在早先的章節(jié)里,我們看到很多圖像平滑技術(shù)如高斯模糊,Median模糊等,它們?cè)谝瞥龜?shù)量小的噪音時(shí)在某種程度上比較好用。在這些技術(shù)里,我們?nèi)∠袼刂車囊恍〔糠粥従?,做一些類似于高斯平均?quán)重,中值等替換掉中間的元素。簡(jiǎn)單說(shuō),移除一個(gè)像素的噪音是基于本地鄰居的。
噪音有一個(gè)屬性,噪音一般被認(rèn)為是具有零平均值的隨機(jī)變量。假設(shè)一個(gè)像素噪音,p = p0 + n, 其中p0是像素的真實(shí)值,n是那個(gè)像素的噪音。你可以從不同圖像取大量的同一個(gè)像素(N)并計(jì)算他們的平均值,理想情況下,你應(yīng)該得到p=p0,因?yàn)榫凳?.
你可以自己通過(guò)一個(gè)簡(jiǎn)單例子驗(yàn)證一下。保持一個(gè)靜止的攝像機(jī)對(duì)準(zhǔn)一個(gè)位置多呆幾秒,這會(huì)給你很多幀,或者是對(duì)一個(gè)場(chǎng)景的很多圖像。然后寫(xiě)一些代碼來(lái)找到視頻里所有幀的平均值。比較最終的結(jié)果和第一幀。你可以看到噪點(diǎn)被去掉了。不幸的是這個(gè)簡(jiǎn)單的方法對(duì)于攝像機(jī)和場(chǎng)景的運(yùn)動(dòng)來(lái)說(shuō)就不健壯了。而且經(jīng)常你也只有一個(gè)噪音圖像可用。
Image Denoising
OpenCV提供了這種技術(shù)的四種變體。
Common arguments:
cv2.fastNlMeansDenoisingColored()
如上所述,它用于從彩色圖像中去除噪聲。 (噪音預(yù)計(jì)是高斯噪音)
import numpy as np import cv2 import matplotlib.pyplot as plt img = cv2.imread('img.jpg') dst = cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21) plt.subplot(121),plt.imshow(img) plt.subplot(122),plt.imshow(dst) plt.show()