使用深度学习进行图像去噪
圖像去噪是研究人員幾十年來試圖解決的一個經典問題。在早期,研究人員使用濾波器器來減少圖像中的噪聲。它們曾經在噪音水平合理的圖像中工作得相當好。然而,應用這些濾鏡會使圖像模糊。如果圖像太過嘈雜,那么合成的圖像會非常模糊,圖像中的大部分關鍵細節都會丟失。
使用深度學習架構會更好的解決這個問題。目前看深度學習遠遠超過了傳統的去噪濾波器。在這篇文章中,我將使用一個案例來逐步解釋幾種方法,從問題的形成到實現最先進的深度學習模型,然后最終看到結果。
內容摘要
- 圖像中的噪聲是什么?
- 問題表述
- 機器學習問題提法
- 數據來源
- 探索性數據分析
- 圖像去噪的傳統濾波器概述
- 用于圖像去噪的深度學習模型
- 結果比較
- 未來的工作和改進的范圍
- 參考文獻
圖像中的噪點是什么?
圖像噪聲是所捕獲圖像中亮度或顏色信息的隨機變化。 這是由外部源引起的圖像信號劣化。 從數學上講,圖像中的噪點可以表示為
A(x,y)= B(x,y)+ H(x,y)其中
A(x,y)=噪聲圖像的函數; B(x,y)=原始圖像的函數; H(x,y)=噪聲的函數;
問題表述
傳統的圖像降噪算法始終假定噪聲是均勻的高斯分布。但是,實際上,真實圖像上的噪點可能要復雜得多。真實圖像上的這種噪聲稱為真實噪聲或盲噪聲。傳統的濾波器無法在具有此類噪點的圖像上表現良好。
所以問題的表述變成了:我們如何去噪包含盲噪聲的圖像?
我們的目的是用盲噪聲對彩色圖像進行去噪,沒有延遲的限制,因為我想對圖像進行降噪處理,使其盡可能接近真實值實況,即使它花費了合理的時間
盲去噪是指在去噪過程中,用于去噪的基礎是從有噪聲的樣本本身學習來的。換句話說,無論我們構建什么樣的深度學習體系結構,都應該學習圖像中的噪聲分布并去噪。所以和往常一樣,這都取決于我們提供給深度學習模型的數據類型。
機器學習問題提法
首先,讓我們考慮一下RGB圖像的格式。 一個圖像的3個顏色通道
?
任何RGB圖像對于每個像素都有三個顏色通道——紅、綠、藍。
現在,每種顏色都由一個范圍為0-255的8位數字表示。任何圖像都可以用一個三維矩陣來表示。
?
對于一個有噪聲的圖像。
?
我們在前面的章節中看到,噪聲是像素的隨機變化。換句話說,圖像中3個通道的一些像素數值被破壞了。為了恢復圖像的原始形式,我們需要糾正那些損壞的像素值。
我們可以把這看作是一個監督學習回歸問題,在這個問題中我們預測被損壞像素的真實值[0-255范圍內的數字]。
我將使用的損失是MSE(均方誤差)。分數越低越好。
?
對于績效評估,我會使用兩個指標,分數越高越好
- PSNR (Peak Signal to Noise Ratio) 峰值信噪比
- SSIM (Structural Similarity Index Measure) 結構相似性
數據來源
由于這是一個監督學習問題,我們需要一對有噪聲的圖像(x)和ground truth圖像(y)。
我從三個方面收集了這些數據。
SIDD -包含160對來[噪聲-真值]圖像
RENOIR -包含80對[嘈雜的-真值]圖像
NIND -包含62對[噪聲-真值]圖像
探索性數據分析
元數據分析
?
我們可以看到,大部分照片是在iPhone 7上被拍攝的,其次是三星S6和谷歌Pixel。LG G4的照片數量最少。
?
?
數據集中總共使用了14個唯一的ISO級別設置。大多數照片都是在低ISO設置下點擊的。最常用的ISO設置是100和800,然后是1600,400和3200。曝光越高,圖像就越亮,反之亦然。
?
大多數照片是在100快門速度下拍攝的,其次是400和800快門。快門速度越快,圖像就越暗,反之亦然。
?
大多數照片是在普通亮度模式下點擊的,其次是低亮度模式。三星S6在高亮度下只點擊了2張照片。
?
我們可以看到每一部手機都有自己的圖像分辨率。每一部手機都以相同的分辨率拍攝照片。
?
可以看出,大部分的平均像素值處于較低到中值(較暗到中亮度的圖像)。只有少數是非常高的價值(明亮的圖像)。你也可以看到在噪聲圖像中的一些平均值與真實圖像有差異。這種差異在較高像素值時更容易看到。
?
可以觀察到,與原始圖像相比,噪聲圖像具有像素強度的平滑分布。 產生這樣的原因是,每當圖像中有噪點時,相機便無法捕獲這些像素的顏色信息(由于各種原因),因此,在這些像素中填充“無顏色”(大部分是 通過相機軟件填充一些隨機值。 由于這些隨機值(噪聲),像素值變得平滑了。
傳統圖像去噪濾波器概述
傳統上,研究人員想出了濾波器器來對圖像進行降噪。大多數濾波器器特定于圖像所具有的噪聲類型。有幾種類型的噪聲,例如高斯噪聲,泊松噪聲,斑點噪聲,椒鹽(脈沖)噪聲等。每種類型的噪聲都有特定的濾波器。因此,使用傳統濾波器對圖像進行降噪的第一步是識別圖像中存在的噪聲類型。確定后,我們可以繼續應用特定的濾波器器。為了識別噪聲的類型,有一些數學公式可以幫助我們猜測噪聲的類型。否則,領域專家可以僅通過查看圖像來決定。還有一些濾波器可以處理任何類型的噪聲。
有大量的濾波器可用于對圖像進行降噪。每個人都有其優點和缺點。在這里,我將討論非局部均值(NLM)算法,該算法被認為可以很好地對圖像進行去噪。
NLM的公式,
?
該算法將像素的估計值計算為圖像中所有像素的加權平均值,但是權重族取決于像素i和j之間的相似度。 換句話說,它查看一個圖像塊,然后識別整個圖像中的其他相似塊,并對它們進行加權平均。 要了解這一點,請考慮以下圖像,
?
相似的色塊用相同顏色的方框標記。 因此,現在,它將相似補丁的像素的加權平均值作為目標像素的估計值。 該算法將色塊大小和色塊距離作為輸入。
考慮以下使用NLM濾鏡去噪的灰度圖像。
?
您可以看到NLM在圖像去噪方面做得不錯。 如果仔細觀察,將會發現去噪圖像略有模糊。 這是由于應用于任何數據的均值將使值平滑。
但是,當噪聲水平太高時,NLM無法提供良好的結果。 考慮以下圖像,該圖像已使用NLM濾波器進行了去噪。
?
可以清楚地看到,去噪后的圖像太模糊了,大部分關鍵細節都丟失了。例如,觀察藍色卡車的橙色前燈。
用于圖像去噪的深度學習模型
隨著深度學習技術的出現,現在可以從圖像中去除盲目的噪聲,這樣的結果非常接近于真實圖像的細節損失最小。
已經實現了三個深度學習架構,
REDNet、MWCNN、PRIDNet
REDNet -Residual Encoder-Decoder Networks
這是一個基于CNN的跳過連接的自動編碼器架構。體系結構如下:
?
在這里,我用了5層卷積的編碼器和5層反卷積的解碼器。這是一個非常簡單的體系結構,我將其作為基準。
input_0 = Input(shape=(256,256,3), name="input_layer") conv_layer_1 = Conv2D(filters=256, kernel_size=2, padding='same', name="conv_1")(input_0) conv_layer_2 = Conv2D(filters=256, kernel_size=2, padding='same', name="conv_2")(conv_layer_1) conv_layer_3 = Conv2D(filters=256, kernel_size=3, padding='same', name="conv_3")(conv_layer_2) conv_layer_4 = Conv2D(filters=256, kernel_size=3, padding='same', name="conv_4")(conv_layer_3) conv_layer_5 = Conv2D(filters=128, kernel_size=3, padding='same', name="conv_5")(conv_layer_4)deconv_layer_5 = Conv2DTranspose(filters=256, kernel_size=2, padding='same', name="deconv_5")(conv_layer_5) deconv_layer_5 = Add(name="add_1")([conv_layer_4, deconv_layer_5]) deconv_layer_4 = Conv2DTranspose(filters=256, kernel_size=2, padding='same', name="deconv_4")(deconv_layer_5) deconv_layer_3 = Conv2DTranspose(filters=256, kernel_size=3, padding='same', name="deconv_3")(deconv_layer_4) deconv_layer_3 = Add(name="add_2")([conv_layer_2, deconv_layer_3]) deconv_layer_2 = Conv2DTranspose(filters=128, kernel_size=3, padding='same', name="deconv_2")(deconv_layer_3) deconv_layer_1 = Conv2DTranspose(filters=3, kernel_size=3, padding='same', name="deconv_1")(deconv_layer_2) out = Add(name="add_3")([input_0, deconv_layer_1])model = Model(inputs=[input_0], outputs=[out])?
?
?
如您所見,該體系結構在去噪圖像方面效果很好。 您絕對可以看到噪點有所減少,并且圖像正在嘗試針對損壞的像素適應圖像的原始顏色。該體系結構的PSNR得分為30.5713,SSIM得分為0.7932。
MWCNN — Multi-level Wavelet CNN
這是基于小波的深度學習架構。 它的架構與U-Net架構有著驚人的相似性。 MWCNN的唯一區別在于,與U-Net中的下采樣和上采樣不同,這里我們使用DWT(離散小波變換)和IWT(逆小波變換)。 DWT和IWT的工作方式已超出此文章的范圍。 但是,我在[參考資料部分]附加了一些資源,您可以從中學習這些資源。
?
在這里,我已將此體系結構擴展到4個級別。 因此,我的網絡深度變為32。此代碼有點長,我在Keras中使用了自定義層。 您可以在Github存儲庫中查看有關MWCNN的完整代碼。
?
?
?
我們可以看到,與REDNet相比,該架構的工作方式更好,圖像更清晰。該體系結構的PSNR得分為32.5221,SSIM得分為0.8397。
PRIDNet — Pyramid Real Image Denoising Network
這是用于盲降噪的最先進的深度學習架構。 這種體系結構不像我們在前面的兩個網絡中看到的那樣簡單。 PRIDNet有幾個模塊,分為三個主要部分。
?
起初看起來似乎有些不知所措。 但是讓我將其分解成細節,這很容易理解。
頻道注意力模塊
?
通道注意模塊負責注意力機制。 這里注意力機制的實現方式是將注意力放在輸入U的每個通道上。可以將這種“注意力”視為權重。 因此,每個通道將有一個權重。 注意力權重將是大小為C [通道數]的向量。 該向量將與輸入U相乘。由于我們要“學習”注意力,因此我們需要該向量是可訓練的。 因此PRIDNet實施的過程是,首先對輸入進行全局平均池化,然后從2個全連接層傳遞它,其結果應該是帶有通道數的向量。 這些是注意權重μ。
多尺度特征提取模塊/金字塔模塊
?
這是整個體系結構的核心。 在這里,我們將使用給定內核大小的平均池化。 這將對圖像進行下采樣。 然后,我們將對其應用U-Net架構。 我選擇了5個級別的深層U-Net。 最后,我們將以與平均池化相同的大小進行上采樣。 因此,這會將圖像恢復為與輸入(此模塊的輸入)相同的大小。
我們將使用不同的內核大小執行5次此操作,然后最后將結果連接起來。
內核選擇模塊
?
該模塊的靈感來自介紹選擇性內核網絡的研究論文。 該研究論文很好地闡述了該網絡背后的思想,如下所示:
在標準的卷積神經網絡(CNN)中,每一層中的人工神經元的感受野被設計為共享相同的大小。 在神經科學界眾所周知,視覺皮層神經元的感受野大小是受刺激調節的,在構建CNN時很少考慮。
設計了一個稱為選擇性內核(SK)單元的構建塊,其中使用softmax注意融合了內核大小不同的多個分支,這些注意由這些分支中的信息指導。 對這些分支的不同關注會導致融合層中神經元有效接受場的大小不同。
此模塊與“通道注意力”模塊非常相似。 根據PRIDNet論文,大小為C的合成矢量α,β,γ分別表示對U’,U’和U’’的柔和注意。
整個PRIDNet架構圖如下所示,
?
結果如下:
?
?
?
可以看到,與先前討論的體系結構相比,該體系結構可提供最佳結果。 在上面的眼睛特寫圖像中,請注意去噪圖像中眼球的細節水平!
?
?
嘈雜圖像中的黑色書籍[Cropped Library books]。 它們幾乎與周圍的棕色家具沒有區別。 一切似乎都是黑色的。 但是,我們的模型能夠以至少可以區分書籍和周圍家具的方式對其進行去噪。 第二張圖片[裁剪的圖書館家具]也是如此。 在嘈雜的圖像中,您可以看到家具非常黑,頂部似乎幾乎是黑色的。 但是,我們的模型能夠理解棕色并對其進行去噪。 這太神奇了!
該體系結構的PSNR得分為33.3105,SSIM得分為0.8534。
結果對比
?
?
我們可以清楚地看到PRIDNet是性能最佳的體系結構,用于消噪單個圖像的時間最少。
現在,我們比較一下NLM濾波器和PRIDNet的結果。
?
?
要比較的關鍵領域
- 黃色卡車的車頂區域
- 橙色卡車的座位
- 藍色卡車中的橙色大燈
- 藍色卡車的車頂(觀察陰影)
- 地板中間的兩個細條紋
還有很多
未來的工作和改進范圍
圖像去噪是一個活躍的研究領域,并且時不時地有許多驚人的架構正在開發以對圖像進行去噪。 最近,研究人員正在使用GAN來對圖像進行降噪,事實證明,這種方法會產生令人驚訝的結果。 好的GAN架構肯定會進一步改善去噪效果。
本文代碼地址:github/chintan1995/Image-Denoising-using-Deep-Learning
總結
以上是生活随笔為你收集整理的使用深度学习进行图像去噪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Xss挑战之旅writeup
- 下一篇: 神码ai人工智能写作机器人_从云到设备到