日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python,OpenCV中的非局部均值去噪(Non-Local Means Denoising)

發布時間:2023/11/27 生活经验 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python,OpenCV中的非局部均值去噪(Non-Local Means Denoising) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python,OpenCV中的非局部均值去噪(Non-Local Means Denoising)

    • 1. 效果圖
    • 2. 原理
    • 3. 源碼
      • 2.1 單彩色圖去噪
      • 2.2 多連續彩色幀去噪
    • 參考

這篇博客將介紹不同的計算攝影技術——非局部均值去噪(Non-Local Means Denoising),以去除圖像中的噪聲。OpenCV提供了4個方法實現該算法;

  • cv2.FastNLMeansDeoising() 適用于單個灰度圖像
  • cv2.FastNLMeansDeoisingColor() 適用于彩色圖像。
  • cv2.fastNlMeansDenoisingMulti() 適用于短時間內捕獲的圖像序列(灰度圖像)
  • cv2.fastNlMeansDenoisingColoredMulti() 適用于短時間內捕獲的圖像序列(彩色圖像)

1. 效果圖

原圖 VS 彩色圖像去噪效果圖1如下:

原圖 VS 彩色圖像去噪效果圖2如下:
可以看到去噪的效果圖右看起來更加磨皮美白了,穎寶更加動人了。

對彩色圖像序列幀進行去噪,原圖灰度圖 VS 噪音圖 VS 去噪效果圖1如下:
可能因為圖像的原因,看著不是很明顯~

對彩色圖像序列幀進行去噪,原圖灰度圖 VS 噪音圖 VS 去噪效果圖2如下:
用自己的數據集,效果看起來也基本差不多~

2. 原理

  • 前邊學習幾種圖像平滑方法:如高斯模糊,均值模糊,中值模糊,它們在一定程度上很好地去除了少量的噪聲。 這些技術在一個像素周圍選取一個小鄰域,并進行一些操作,如高斯加權平均、值的均值、中值等,以替換中心元素。簡言之,像素處的噪聲消除是其鄰近區域的局部問題。

  • 與之前看到的模糊技術相比,非局部均值去噪需要更多的時間,但效果非常好。

  • 非局部均值去噪需要一組相似的圖像來平均噪聲。考慮圖像中的一個小窗口(比如說5x5窗口)。同一補丁可能在圖像中的其他地方的可能性很大。

  • 對于彩色圖像,非局部均值去噪將圖像轉換為CIELAB顏色空間,然后分別對L和AB分量進行去噪。

  • h:決定過濾器強度的參數。較高的h值可以更好地去除噪聲,但也可以去除圖像的細節(建議10)
  • hForColorComponents:與h相同,但僅適用于彩色圖像(通常與h相同)
  • TemplateWindowsSize: 應該是奇數(建議7)
  • SearchWindowsSize: 應該是奇數(建議21)

3. 源碼

2.1 單彩色圖去噪

# 圖像去噪:非局部均值去噪(Non-Local MeansDenoising)# 前面已經學習了許多圖像平滑技術,如高斯模糊、均值模糊、中值模糊等,它們在一定程度上很好地去除了少量的噪聲。
# 這些技術在一個像素周圍選取一個小鄰域,并進行一些操作,如高斯加權平均、值的中值等,以替換中心元素。簡言之,像素處的噪聲消除是其鄰近區域的局部問題。
# 需要一組相似的圖像來平均噪聲??紤]圖像中的一個小窗口(比如說5x5窗口)。同一補丁可能在圖像中的其他地方的可能性很大。# 與之前看到的模糊技術相比,它需要更多的時間,但效果非常好。
# 對于彩色圖像,將圖像轉換為CIELAB顏色空間,然后分別對L和AB分量進行去噪。# 對單個彩色圖像進行去噪
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('images/ml.jpg')dst = cv2.fastNlMeansDenoisingColored(img, None, 10, 10, 7, 21)plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.xticks([]), plt.yticks([]), plt.title("origin")
plt.subplot(122), plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
plt.xticks([]), plt.yticks([]), plt.title("dst")
plt.show()

2.2 多連續彩色幀去噪

# 對彩色圖像序列幀進行去噪
import cv2
import numpy as np
from matplotlib import pyplot as pltcap = cv2.VideoCapture('images/Megamind.avi')# 對前5幀創建一個lsit
img = [cap.read()[1] for i in range(5)]# 均轉換為灰度圖
gray = [cv2.cvtColor(i, cv2.COLOR_BGR2GRAY) for i in img]# 轉換為float64
gray = [np.float64(i) for i in gray]# 填充一些噪聲點 create a noise of variance 25
noise = np.random.randn(*gray[1].shape) * 10# 添加噪聲到圖像中
noisy = [i + noise for i in gray]# 轉換為圖像uint8
noisy = [np.uint8(np.clip(i, 0, 255)) for i in noisy]# 考慮5幀圖像,對第2幀進行去噪,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.xticks([]), plt.yticks([]), plt.title("origin")plt.subplot(132), plt.imshow(noisy[2], 'gray')
plt.xticks([]), plt.yticks([]), plt.title("noise")plt.subplot(133), plt.imshow(dst, 'gray')
plt.xticks([]), plt.yticks([]), plt.title("dst")
plt.show()

參考

  • https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_photo/py_table_of_contents_photo/py_table_of_contents_photo.html#py-table-of-content-photo

總結

以上是生活随笔為你收集整理的Python,OpenCV中的非局部均值去噪(Non-Local Means Denoising)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。