摘要:卷積與一維信號一樣,圖像也可以使用各種低通濾波器,高通濾波器等進行濾波有助于消除噪聲,模糊圖像等濾波器有助于找到邊緣圖片將內核與圖像進行卷積應用對圖像進行平均過濾。它只取內核區域下所有像素的平均值并替換中心元素。
Smoothing Images
1 2D卷積與一維信號一樣,圖像也可以使用各種低通濾波器(LPF),高通濾波器(HPF)等進行濾波.LPF有助于消除噪聲,模糊圖像等.HPF濾波器有助于找到邊緣圖片.
cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]):將內核與圖像進行卷積
應用對圖像進行平均過濾。 一個5x5的平均濾波器內核可以定義如下:
$$ K=frac{1}{25} left[ egin{matrix} 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{matrix} ight] $$
將此內核保持在像素上方,添加該內核下方的所有25個像素,取其平均值并用新的平均值替換中心像素.
代碼:
import cv2 import numpy as np import matplotlib.pylab as plt img = cv2.imread("img.jpg") kernel = np.ones((5,5),np.float32)/25 dst = cv2.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平均法過將圖像與標準化的盒式過濾器進行卷積來完成的。它只取內核區域下所有像素的平均值并替換中心元素。這是由函數cv2.blur()或cv2.boxFilter()完成的,3x3標準化的盒式過濾器如下所示:
$$ K=frac{1}{9} left[ egin{matrix} 1 & 1 & 1 1 & 1 & 1 1 & 1 & 1 end{matrix} ight] $$
NOTE:
如果不想使用規范化的框過濾器,請使用cv2.boxFilter().將參數normalize = False傳遞給函數.
使用5x5大小的內核進行圖像平滑:
代碼:
import cv2 import numpy as np import matplotlib.pylab as plt img = cv2.imread("img.jpg") blur = cv2.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高斯模糊
cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
應該指定內核的寬度和高度,它應該是正數和奇數.
還應該分別指定X和Y方向的標準偏差sigmaX和sigmaY.如果僅指定了sigmaX,則sigmaY與sigmaX相同.如果兩者都為零,則根據內核大小計算它們.
高斯模糊在從圖像中去除高斯噪聲方面非常有效
可以使用函數cv2.getGaussianKernel()創建高斯內核
代碼:
import cv2 import numpy as np import matplotlib.pylab as plt img = cv2.imread("img.jpg") blur = cv2.GaussianBlur(img,(5,5),0) 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()3 中值模糊
cv2.medianBlur(src, ksize[, dst]):內核區域下所有像素的中值,并用該中值替換中心元素.對圖像中的椒鹽噪聲非常有效.其內核大小應為正整數
代碼
import cv2 import numpy as np import matplotlib.pylab as plt img = cv2.imread("img7.png") blur = cv2.medianBlur(img,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()4 雙邊濾波
cv2.bilateralFilter()在降低噪音方面非常有效,同時保持邊緣清晰,但與其他過濾器相比,操作速度較慢.
NOTE:
高斯濾波器采用像素周圍的鄰域并找到其高斯加權平均值. 該高斯濾波器僅是空間的函數,即在濾波時考慮附近的像素, 沒有考慮像素是否具有幾乎相同的強度,不考慮像素是否是邊緣像素,所以它也模糊了邊緣.
雙邊濾波器在空間中也采用高斯濾波器,但是還有一個高斯濾波器是像素差的函數.空間的高斯函數確保僅考慮附近的像素用于模糊,而強度差的高斯函數確保僅考慮具有與中心像素相似的強度的像素用于模糊,因此它保留了邊緣,因為邊緣處的像素將具有較大的強度變化.
代碼:
import cv2 import numpy as np import matplotlib.pylab as plt img = cv2.imread("img.jpg") blur = cv2.bilateralFilter(img,9,75,75) 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()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41989.html
摘要:下面是二維空間的高斯分布函數公式這個公式被稱作高斯核。高斯模糊使用高斯平均算子來實現的圖像模糊叫高斯模糊,也叫高斯平滑被認為是一種最優的圖像平滑處理。 SciPy庫 SciPy庫,與之前我們使用的NumPy和Matplotlib,都是scipy.org提供的用于科學計算方面的核心庫。相對NumPy,SciPy庫提供了面向更高層應用的算法和函數(其實也是基于NumPy實現的),并以子模塊...
摘要:由所有邊緣增強像素組成的新圖像,稱為邊緣增強圖像。交叉算子上述使用差分方法得出亮度變化梯度其實就是一階微分的近似值。 邊緣檢測(edge detection)是最重要的圖像處理技術之一,圖像邊緣檢測大幅度地減少了數據量,并且剔除了可以認為不相關的信息,保留了圖像重要的結構屬性,為后續圖像理解方法提供了基礎。 邊緣檢測方法 從視覺上看,圖像中的邊緣處亮度較周圍強,比如對一垂直方向的邊緣,...
閱讀 1627·2021-10-12 10:11
閱讀 3745·2021-09-03 10:35
閱讀 1437·2019-08-30 15:55
閱讀 2121·2019-08-30 15:54
閱讀 990·2019-08-30 13:07
閱讀 1002·2019-08-30 11:09
閱讀 567·2019-08-29 13:21
閱讀 2643·2019-08-29 11:32