首頁>技術>

影象去噪是研究人員幾十年來試圖解決的一個經典問題。在早期,研究人員使用濾波器器來減少影象中的噪聲。它們曾經在噪音水平合理的影象中工作得相當好。然而,應用這些濾鏡會使影象模糊。如果影象太過嘈雜,那麼合成的影象會非常模糊,影象中的大部分關鍵細節都會丟失。

使用深度學習架構會更好的解決這個問題。目前看深度學習遠遠超過了傳統的去噪濾波器。在這篇文章中,我將使用一個案例來逐步解釋幾種方法,從問題的形成到實現最先進的深度學習模型,然後最終看到結果。

內容摘要影象中的噪聲是什麼?問題表述機器學習問題提法資料來源探索性資料分析影象去噪的傳統濾波器概述用於影象去噪的深度學習模型結果比較未來的工作和改進的範圍參考文獻影象中的噪點是什麼?

影象噪聲是所捕獲影象中亮度或顏色資訊的隨機變化。 這是由外部源引起的影象訊號劣化。 從數學上講,影象中的噪點可以表示為

 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的照片數量最少。

大多數照片是在100快門速度下拍攝的,其次是400和800快門。快門速度越快,影象就越暗,反之亦然。

我們可以看到每一部手機都有自己的影象解析度。每一部手機都以相同的解析度拍攝照片。

可以看出,大部分的平均畫素值處於較低到中值(較暗到中亮度的影象)。只有少數是非常高的價值(明亮的影象)。你也可以看到在噪聲影象中的一些平均值與真實影象有差異。這種差異在較高畫素值時更容易看到。

可以觀察到,與原始影象相比,噪聲影象具有畫素強度的平滑分佈。 產生這樣的原因是,每當影象中有噪點時,相機便無法捕獲這些畫素的顏色資訊(由於各種原因),因此,在這些畫素中填充“無顏色”(大部分是 透過相機軟體填充一些隨機值。 由於這些隨機值(噪聲),畫素值變得平滑了。

傳統影象去噪濾波器概述

傳統上,研究人員想出了濾波器器來對影象進行降噪。大多數濾波器器特定於影象所具有的噪聲型別。有幾種型別的噪聲,例如高斯噪聲,泊松噪聲,斑點噪聲,椒鹽(脈衝)噪聲等。每種型別的噪聲都有特定的濾波器。因此,使用傳統濾波器對影象進行降噪的第一步是識別影象中存在的噪聲型別。確定後,我們可以繼續應用特定的濾波器器。為了識別噪聲的型別,有一些數學公式可以幫助我們猜測噪聲的型別。否則,領域專家可以僅透過檢視影象來決定。還有一些濾波器可以處理任何型別的噪聲。

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

6
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 鴻蒙核心原始碼分析(彙編傳參篇) | 逐行分析一段彙編傳參程式碼