天天看點

你可以恢複模糊的圖像嗎?

有人認為恢複模糊的圖像是不可能的,因為會丢失資訊。但我對這個問題進行了很多思考,并認為如果輸出圖像的大小與輸入圖像的大小相同,那實際上是可能的!這樣,輸出就有足夠的像素/資訊來恢複原始像素/資訊。

首先,解釋一下什麼是卷積以及如何使用卷積來模糊圖像,以及它如何使用模糊的圖像。卷積是一種數學運算,當應用于圖像時,可以将其視為應用于它的過濾器。

你可以恢複模糊的圖像嗎?

在這個動畫中,我們可以看到一個圖像與過濾器/核心卷積的例子。原始圖像是藍色矩陣,核心是滑動的深藍色矩陣,輸出是藍綠色矩陣。

卷積是通過将重疊的核心和圖像相乘,然後對乘積求和來獲得的。以下等式可能會有所幫助:給定圖像x和核心k,卷積的結果将為y。

你可以恢複模糊的圖像嗎?

你可以恢複模糊的圖像嗎?

如果我們已經知道圖像上的卷積是如何工作的,也許這個方程組并不太可怕;如果我們不知道,别擔心,我們不必記住它,這就是程式的工作!一個有用的表示形式是将卷積解釋為矩陣乘法,從上面的等式中可以很容易的寫出來:

你可以恢複模糊的圖像嗎?

等價于矩陣方程

你可以恢複模糊的圖像嗎?

通過這種表示,似乎知道A和y,那麼x可以通過求解上面的方程來計算。但是,由于A 的列數多于行數,是以該系統尚未确定,這意味着我們不能隻獲得一個解。

首先說,為了能夠反轉卷積,輸入和輸出大小必須相同。在矩陣形式中,這将對應于 A 是正方形(行和列的書面相同),進而我們可以将其求逆并将x計算為:

你可以恢複模糊的圖像嗎?

現在,我們的輸入是 4x4,輸出是 2x2。我們如何獲得與輸入相同大小的輸出?一種方法是向輸入圖像中添加填充,例如 0 填充:

你可以恢複模糊的圖像嗎?

這樣,輸出将像原始輸入一樣是 4x4。詳細地說,對于這種帶有填充的卷積的簡單情況,輸出尺寸可以計算為:

你可以恢複模糊的圖像嗎?

如果我們希望輸入和輸出具有相同的大小,那麼填充必須是:

你可以恢複模糊的圖像嗎?

這産生了一個重要條件:核心大小必須是奇數,因為填充是一個整數值。

這種卷積也可以表示為上述矩陣的乘積,但是我不會不厭其煩地閱讀它,因為尺寸會大得多。可以寫出與 y 的每個項相關聯的卷積方程,然後将其構造為如上所述矩陣乘法。

你可以恢複模糊的圖像嗎?

請注意,盡管填充的輸入是 6x6,對應于 36 個元素,但這些元素中隻有 4x4 是唯一且未知的變量。是以,方程中的 x 隻能是 16x1,而不是 36x1。

要求解 x 并反轉卷積,隻需知道 A 和 y 。要構造 A ,需要知道用于卷積的核心和所使用的填充類型。

現在,如何使用?可以通過卷積來模糊圖像。例如,高斯模糊是通過将圖像與核心/濾波器卷積來獲得的,該核心/濾波器的中心具有高斯分布,最大值在中心,其值總和為 1。

你可以恢複模糊的圖像嗎?

我首先使用高斯模糊對圖像進行模糊處理。我用高斯核對原始圖像進行了卷積,并使用了複制填充(原始圖像之外的值設定為最接近的邊界值,而不是 0)。

你可以恢複模糊的圖像嗎?

左邊是原圖,右邊是模糊圖像。

因為我們知道使用的核心,是以我們能夠構造矩陣 A 然後求解 x 。結果如預期:重建的圖像與原始圖像完全相同。

你可以恢複模糊的圖像嗎?

左邊是模糊的圖像,右邊是重建的圖像。

現在,這種 100% 重建是可能的,因為使用的核心和填充是已知的。如果我們使用的核心與用于模糊原始圖像的核心不完全相同,會發生什麼?

你可以恢複模糊的圖像嗎?

不使用精确核心時,左側圖像模糊,右側重建圖像。

如果假設使用複制填充時填充為 0 ,該怎麼辦呢?

你可以恢複模糊的圖像嗎?

在不假設精确填充的情況下,左側圖像模糊,右側重建圖像。

正如我們所見,如果我們不知道使用的核心和填充,那麼我們就無法重建原始圖像。從這個意義上說,它幾乎可以看作是一個加密問題:如果我們知道“密鑰”,那麼我們便能夠重建原始消息而不回造成任何損失或額外的噪音。

重建原始圖像也是一項非常艱巨的任務,因為矩陣 A 會根據原始圖像的大小增長非常快。如果原始圖像是 4x4,那麼 A 将是 16x16 ——元素數量以 N² 縮放。

希望小夥伴們喜歡這個簡短的解釋并發現它很有趣。我确實做到了,這是了解更多關于 Julia、卷積、圖像處理和線性代數的好方法。

我認為我們現在不必擔心人們不會恢複模糊的圖像了。

你可以恢複模糊的圖像嗎?

左邊是模糊的圖像,右邊是重建的圖像。

你可以恢複模糊的圖像嗎?