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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图像处理之图像平滑

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像处理之图像平滑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖像平滑
本節主要知識點:

  • 使用各種低通濾鏡模糊圖像
  • 將定制的濾鏡應用于圖像(2D卷積)
    1.2D卷積(圖像過濾)
    與一維信號一樣,還可以使用各種低通濾波器(LPF),高通濾波器(HPF)等對圖像進行濾波。LPF有助于消除噪聲,使圖像模糊等。HPF濾波器有助于在圖像中找到邊緣。

OpenCV提供了一個函數cv.filter2D來將內核與圖像進行卷積。例如,我們將嘗試對圖像進行平均濾波。5x5平均濾波器內核如下所示:

K=125[1111111111111111111111111]K = \frac{1}{25} \begin{bmatrix} 1 & 1 & 1 & 1 & 1 \ 1 & 1 & 1 & 1 & 1 \ 1 & 1 & 1 & 1 & 1 \ 1 & 1 & 1 & 1 & 1 \ 1 & 1 & 1 & 1 & 1 \end{bmatrix} K=251?[1?1?1?1?1?1?1?1?1?1?1?1?1?1?1?1?1?1?1?1?1?1?1?1?1?]

操作如下:保持這個內核在一個像素上,將所有低于這個內核的25個像素相加,取其平均值,然后用新的平均值替換中心像素。它將對圖像中的所有像素繼續此操作。試試這個代碼,并檢查結果:

import numpy as np import cv2 as cv from matplotlib import pyplot as plt img = cv.imread('opencv_logo.png') kernel = np.ones((5,5),np.float32)/25 dst = cv.filter2D(img,-1,kernel) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(dst),plt.title('Averaging') plt.xticks([]), plt.yticks([]) plt.show()

運行結果:

2.圖像模糊
通過將圖像與低通濾波器內核進行卷積來實現圖像模糊。這對于消除噪音很有用。它實際上從圖像中消除了高頻部分(例如噪聲,邊緣)。因此,在此操作中邊緣有些模糊。(有一些模糊技術也可以不模糊邊緣)。OpenCV主要提供四種類型的模糊技術。
1.平均

這是通過將圖像與歸一化框濾鏡進行卷積來完成的。它僅獲取內核區域下所有像素的平均值,并替換中心元素。這是通過功能cv.blur()或cv.boxFilter()完成的。檢查文檔以獲取有關內核的更多詳細信息。我們應該指定內核的寬度和高度。3x3歸一化框式過濾器如下所示:

K=19[111111111]K = \frac{1}{9} \begin{bmatrix} 1 & 1 & 1 \ 1 & 1 & 1 \ 1 & 1 & 1 \end{bmatrix} K=91?[1?1?1?1?1?1?1?1?1?]

注意 如果您不想使用標準化的框式過濾器,請使用cv.boxFilter()。將參數normalize = False傳遞給函數。

查看下面的示例演示,其內核大小為5x5:

import cv2 as cv import numpy as np from matplotlib import pyplot as plt img = cv.imread('opencv-logo-white.png') blur = cv.blur(img,(5,5)) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title('Blurred') plt.xticks([]), plt.yticks([]) plt.show()

運行結果:

2.高斯模糊
在這種情況下,代替盒式濾波器,使用了高斯核。這是通過功能cv.GaussianBlur() 完成的。我們應指定內核的寬度和高度,該寬度和高度應為正數和奇數。我們還應指定X和Y方向的標準偏差,分別為sigmaX和sigmaY。如果僅指定sigmaX,則將sigmaY與sigmaX相同。如果兩個都為零,則根據內核大小進行計算。高斯模糊對于從圖像中去除高斯噪聲非常有效。

如果需要,可以使用函數cv.getGaussianKernel() 創建高斯內核。

可以修改以上代碼以實現高斯模糊:

blur = cv.GaussianBlur(img,(5,5),0)

運行結果:

3.中位模糊
在這里,函數cv.medianBlur() 提取內核區域下所有像素的中值,并將中心元素替換為該中值。這對于消除圖像中的椒鹽噪聲非常有效。有趣的是,在上述過濾器中,中心元素是新計算的值,該值可以是圖像中的像素值或新值。但是在中值模糊中,中心元素總是被圖像中的某些像素值代替。有效降低噪音。其內核大小應為正奇數整數。

在此演示中,我向原始圖像添加了50%的噪聲并應用了中值模糊。檢查結果:

median = cv.medianBlur(img,5)


4.雙邊濾波
cv.bilateralFilter() 在去除噪聲的同時保持邊緣清晰銳利非常有效。但是,與其他過濾器相比,該操作速度較慢。我們已經看到,高斯濾波器采用像素周圍的鄰域并找到其高斯加權平均值。高斯濾波器僅是空間的函數,也就是說,濾波時會考慮附近的像素。它不考慮像素是否具有幾乎相同的強度。它不考慮像素是否是邊緣像素。因此它也模糊了邊緣,這是我們不想做的。

雙邊濾波器在空間中也采用高斯濾波器,但是又有一個高斯濾波器,它是像素差的函數??臻g的高斯函數確保僅考慮附近像素的模糊,而強度差的高斯函數確保僅考慮強度與中心像素相似的那些像素的模糊。由于邊緣的像素強度變化較大,因此可以保留邊緣。

以下示例顯示了使用雙邊過濾器。

blur = cv.bilateralFilter(img,9,75,75)


可以看到,此時表面上的紋理消失了,但是邊緣仍然保留。

總結

以上是生活随笔為你收集整理的图像处理之图像平滑的全部內容,希望文章能夠幫你解決所遇到的問題。

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