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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python+OpenCV图像处理(六)图像平滑与滤波

發布時間:2024/7/23 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python+OpenCV图像处理(六)图像平滑与滤波 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖像平滑與濾波

運用它,首先就要了解它,什么是平滑濾波?

? ? ? 平滑濾波是低頻增強的空間域濾波技術。它的目的有兩類:一類是模糊;另一類是消除噪音。空間域的平滑濾波一般采用簡單平均法進行,就是求鄰近像元點的平均亮度值。鄰域的大小與平滑的效果直接相關,鄰域越大平滑的效果越好,但鄰域過大,平滑會使邊緣信息損失的越大,從而使輸出的圖像變得模糊,因此需合理選擇鄰域的大小。

在看一下濾波的目的:

濾波的本義是指信號有各種頻率的成分,濾掉不想要的成分,即為濾掉常說的噪聲,留下想要的成分.這即是濾波的過程,也是目的。

?

  • 一是抽出對象的特征作為圖像識別的特征模式;(在我未來將要進行的一個項目中將會用的到)
  • 另一個是為適應圖像處理的要求,消除圖像數字化時所混入的噪聲。

有關平滑與濾波更多的介紹,可以查看百度詞條:平滑與濾波

里面有對平滑與濾波詳細的解釋,我就不一 一介紹了,感謝詞條的貢獻者,感謝分享,非常感謝。

?

對于2D圖像可以進行低通或者高通濾波操作,低通濾波(LPF)有利于去噪,模糊圖像,高通濾波(HPF)有利于找到圖像邊界。

(一)2D濾波器cv2.filter2D( )

img = cv2.imread('kenan.jpg', 0) kernel = np.ones((5, 5), np.float32)/25dst = cv2.filter2D(img, -1, kernel) cv2.imshow('dst', dst) cv2.imshow('yuantu', img) cv2.waitKey(0) cv2.destroyAllWindows()

(二)均值濾波

?OpenCV中有一個專門的平均濾波模板供使用------歸一化卷積模板,所有的濾波模板都是使卷積框覆蓋區域所有像素點與模板相乘后得到的值作為中心像素的值。OpenCV中均值模板可以用cv2.blur和cv2.boxFilter,比如一個3*3的模板其實就可以如下表示;

模板大小m*n是可以設置的。如果不想要前面的1/9,可以使用非歸一化模板cv2.boxFitter。

cv2.blur()是一個通用的2D濾波函數,它的使用需要一個核模板。該濾波函數是單通道運算的, 如果是彩色圖像,那么需要將彩色圖像的各個通道提取出來,然后分別對各個通道濾波。

如果不想使用歸一化模板,那么應該使用cv2.boxFilter(), 并且傳入參數normalize=False

img = cv2.imread('kenan.jpg', 0) blur = cv2.blur(img, (3, 5)) # 模板大小為3*5, 模板的大小是可以設定的 box = cv2.boxFilter(img, -1, (3, 5)) cv2.imshow('gray', img) cv2.imshow('gray_new', blur) cv2.imshow('gray_new2', box) cv2.waitKey(0) cv2.destroyAllWindows()

(三)高斯模糊模板

在上一目錄中,我們的卷積模板中的值全是1,現在把卷積模板中的值換一下,不全是1了,換成一組符合高斯分布的數值放在模板里,這時模板中的數值將會中間的數值最大,往兩邊走越來越小,構造一個小的高斯包。這樣可以減少原始圖像信息的丟失。

在OpenCV實現的函數為cv2.GaussianBlur()。對于高斯模板,我們需要制定的是高斯核的高和寬(奇數),沿x與y方向的標準差(如果只給x,y=x,如果都給0,那么函數會自己計算)。高斯 核可以有效的去除圖像的高斯噪聲。當然也可以自己構造高斯核,相關函數為:cv2.GaussianKernel()。

# 高斯模糊模板 img = cv2.imread('kenan.jpg', 0) for i in range(2000): # 在圖像中加入點噪聲_x = np.random.randint(0, img.shape[0])_y = np.random.randint(0, img.shape[1])img[_x, _y] = 255 blur = cv2.GaussianBlur(img, (5, 5), 0) # (5,5)表示的是卷積模板的大小,0表示的是沿x與y方向上的標準差 cv2.imshow('img', img) cv2.imshow('blur', blur) cv2.waitKey(0) cv2.destroyAllWindows()

運行結果為:

(四)中值濾波模板

中值濾波模板就是用卷積框中像素的中值代替中心值,達到去噪聲的目的。這個模板一般用于去除椒鹽噪聲。前面的濾波器都是用計算得到的一個新值來取代中心像素的值,而中值濾波是用中心像素周圍(也可以使他本身)的值來取代他,卷積核的大小也是個奇數。

# 中值濾波模板 img = cv2.imread('kenan.jpg', 0) for i in range(2000): # 加入椒鹽噪聲_x = np.random.randint(0, img.shape[0])_y = np.random.randint(0, img.shape[1])img[_x][_y] = 255 blur = cv2.medianBlur(img, 5) # 中值濾波函數 cv2.imshow('img', img) cv2.imshow('medianblur_img', blur) cv2.waitKey(0) cv2.destroyAllWindows()

結果為:

可以看到,中值濾波對于這些白點噪聲的去除,效果是非常好的。

(五)雙邊濾波

雙邊濾波(Bilateral ?filter)是一種可以保證邊界清晰的去噪的濾波器。之所以可以達到此去噪聲效果,是因為濾波器是由兩個函數構成。一個函數是由幾何空間距離決定濾波器系數。另一個由像素差決定濾波器系數。它的構造比較復雜,即考慮了圖像的空間關系,也考慮圖像的灰度關系。雙邊濾波同時使用了空間高斯權重和灰度相似性高斯權重,確保了邊界不會被模糊掉。

cv2.bilateralFilter(img, d, 'p1', 'p2')函數有四個參數需要,d是領域的直徑,后面兩個參數是空間高斯函數標準差和灰度值相似性高斯函數標準差。

# 雙邊濾波 img = cv2.imread('rose1.jpg', 0) for i in range(2000): # 添加椒鹽噪聲_x = np.random.randint(0, img.shape[0])_y = np.random.randint(0, img.shape[1])img[_x][_y] = 255 # 9表示的是濾波領域直徑,后面的兩個數字:空間高斯函數標準差,灰度值相似性標準差 blur = cv2.bilateralFilter(img, 9, 80, 80) cv2.imshow('img', img) cv2.imshow('blur_img', blur) cv2.waitKey(0) cv2.destroyAllWindows()

結果為:

雙邊濾波函數后面的兩個參數設置的越大,圖像的去噪越多,但隨之而來的是圖像ji將變得模糊,所以根據需要調整好后兩個參數的大小。

總結

以上是生活随笔為你收集整理的python+OpenCV图像处理(六)图像平滑与滤波的全部內容,希望文章能夠幫你解決所遇到的問題。

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