中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

opencv python 圖像去噪的實現方法

發布時間:2020-10-09 19:51:02 來源:腳本之家 閱讀:212 作者:sakurala 欄目:開發技術

在早先的章節里,我們看到很多圖像平滑技術如高斯模糊,Median模糊等,它們在移除數量小的噪音時在某種程度上比較好用。在這些技術里,我們取像素周圍的一小部分鄰居,做一些類似于高斯平均權重,中值等替換掉中間的元素。簡單說,移除一個像素的噪音是基于本地鄰居的。

噪音有一個屬性,噪音一般被認為是具有零平均值的隨機變量。假設一個像素噪音,p = p0 + n, 其中p0是像素的真實值,n是那個像素的噪音。你可以從不同圖像取大量的同一個像素(N)并計算他們的平均值,理想情況下,你應該得到p=p0,因為均值是0.

你可以自己通過一個簡單例子驗證一下。保持一個靜止的攝像機對準一個位置多呆幾秒,這會給你很多幀,或者是對一個場景的很多圖像。然后寫一些代碼來找到視頻里所有幀的平均值。比較最終的結果和第一幀。你可以看到噪點被去掉了。不幸的是這個簡單的方法對于攝像機和場景的運動來說就不健壯了。而且經常你也只有一個噪音圖像可用。

Image Denoising

OpenCV提供了這種技術的四種變體。

  • cv2.fastNlMeansDenoising() - 使用單個灰度圖像
  • cv2.fastNlMeansDenoisingColored() - 使用彩色圖像。
  • cv2.fastNlMeansDenoisingMulti() - 用于在短時間內捕獲的圖像序列(灰度圖像)
  • cv2.fastNlMeansDenoisingColoredMulti() - 與上面相同,但用于彩色圖像。

Common arguments:

  1. h:參數決定濾波器強度。較高的h值可以更好地消除噪聲,但也會刪除圖像的細節 (10 is ok)
  2. hForColorComponents:與h相同,但僅適用于彩色圖像。 (通常與h相同)
  3. templateWindowSize:應該是奇數。 (recommended 7)
  4. searchWindowSize:應該是奇數。 (recommended 21)

cv2.fastNlMeansDenoisingColored()

如上所述,它用于從彩色圖像中去除噪聲。 (噪音預計是高斯噪音)

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()

opencv python 圖像去噪的實現方法

cv2.fastNlMeansDenoisingMulti()

現在我們將相同的方法應用于視頻。 第一個參數是嘈雜幀的列表。 第二個參數imgToDenoiseIndex指定我們需要去噪的幀,因為我們在輸入列表中傳遞了frame的索引。 第三個是temporalWindowSize,它指定了用于去噪的附近幀的數量。 在這種情況下,使用總共temporalWindowSize幀,其中中心幀是要去噪的幀。 例如,傳遞了5個幀的列表作為輸入。 設imgToDenoiseIndex = 2和temporalWindowSize = 3.然后使用frame-1,frame-2和frame-3對幀-2進行去噪

import numpy as np
import cv2
import matplotlib.pyplot as plt


cap = cv2.VideoCapture('test.mp4')

# create a list of first 5 frames
img = [cap.read()[1] for i in range(5)]

# convert all to grayscale
gray = [cv2.cvtColor(i, cv2.COLOR_BGR2GRAY) for i in img]

# convert all to float64
gray = [np.float64(i) for i in gray]

# create a noise of variance 25
noise = np.random.randn(*gray[1].shape)*10

# Add this noise to images
noisy = [i+noise for i in gray]

# Convert back to uint8
noisy = [np.uint8(np.clip(i,0,255)) for i in noisy]

# Denoise 3rd frame considering all the 5 frames
dst = cv2.fastNlMeansDenoisingMulti(noisy, 2, 5, None, 4, 7, 35)

plt.subplot(131),plt.imshow(gray[2],'gray')
plt.subplot(132),plt.imshow(noisy[2],'gray')
plt.subplot(133),plt.imshow(dst,'gray')
plt.show()

opencv python 圖像去噪的實現方法

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

雅安市| 陇川县| 乾安县| 阳东县| 武冈市| 永泰县| 临夏市| 英超| 通许县| 天津市| 阳江市| 神池县| 贞丰县| 绍兴县| 深圳市| 班玛县| 昌图县| 邵阳市| 丹棱县| 双柏县| 青州市| 汨罗市| 清丰县| 四川省| 开远市| 蓬溪县| 禄丰县| 天等县| 郎溪县| 尚志市| 黄大仙区| 长顺县| 万宁市| 宁津县| 胶州市| 出国| 枝江市| 寿阳县| 龙川县| 环江| 沭阳县|