高通濾波器
以檢測邊緣的高通過濾器為例
這是個三乘三的核 其元素總和為 0,邊緣檢測時 所有元素總和為 0 是很重要的,因為這類過濾器要計算的是相鄰像素的差異 或者說變化,要計算差異 就需要將像素值相減,如果這些核值加起來不等於 0,那就意味着計算出來的差,權重會有正負結果就是濾波后的圖像亮度會相應地提高或降低,這就是卷積核元素相加為零的原因。
import numpy as np import matplotlib.pyplot as plt import cv2 %matplotlib inline image = cv2.imread('1.png') image_copy = np.copy(image) image_copy = cv2.cvtColor(image_copy,cv2.COLOR_BGR2RGB) plt.imshow(image_copy)
gray = cv2.cvtColor(image_copy,cv2.COLOR_RGB2GRAY) plt.imshow(gray,cmap='gray')
sobel_x = np.array([[-1,0,1], [-2,0,2], [-1,0,1]]) #sobel filter filtered = cv2.filter2D(gray,-1,sobel_x) #-1表示輸入和輸出類型一致 plt.imshow(filtered,cmap='gray')
retval,binary_image = cv2.threshold(filtered,100,255,cv2.THRESH_BINARY) plt.imshow(binary_image,cmap='gray') print(retval) #不知道這個retval有什么用,輸出看一下
低通濾波器
高通濾波器檢測邊緣時不僅會檢測到噪聲,而且還會強化它們,所以在高通濾波之前,需要先降噪。
低通濾器通常會取均值 不像高通過濾器取的是差值,因此低通過濾器的元素加起來應該為 1,這就能保留圖像的亮度,確保圖像不會變亮或變暗,但我們可以看到 這個核的元素加起來等於 9,所以我們需要進行歸一化處理 也就是將核值總和除以 9
有時我們會想要個既能模糊圖像 又能更好地保存圖像邊緣的過濾器,為此 我們可用高斯模糊,這或許是計算機視覺應用中最常用的低通過濾器了。高斯低通過濾器其實就是加權平均法 賦予中心像素最大的權重,但也會考慮到周圍的像素 權重多少主要取決於周圍像素有多接近中心像素
import numpy as np import cv2 import matplotlib.pyplot as plt %matplotlib inline image = cv2.imread('2.png') image_copy = np.copy(image) image_copy = cv2.cvtColor(image_copy,cv2.COLOR_BGR2RGB) plt.imshow(image_copy)
對圖像進行高斯濾波,比較兩者
gray = cv2.cvtColor(image_copy,cv2.COLOR_RGB2GRAY) gray_blur = cv2.GaussianBlur(gray,(5,5),0) f,(ax1,ax2) = plt.subplots(1,2,figsize=(20,10)) ax1.set_title('original gray') ax1.imshow(gray,cmap='gray') ax2.set_title('blurred image') ax2.imshow(gray_blur,cmap='gray')
對未模糊處理的灰度圖像和經過模糊處理的圖像分別進行高通濾波操作 比較兩者的效果
sobel_y = np.array([[2,1,2], [0,0,0], [-2,-1,-2]]) filtered = cv2.filter2D(gray,-1,sobel_y) filtered_blurred = cv2.filter2D(gray_blur,-1,sobel_y) f,(ax1,ax2) = plt.subplots(1,2,figsize=(20,10)) ax1.set_title('original gray') ax1.imshow(filtered,cmap='gray') ax2.set_title('blurred image') ax2.imshow(filtered_blurred,cmap='gray')
可以看到未模糊處理的圖像,噪聲更多 而模糊處理后的圖像邊緣檢測效果更准確
通常來講 對於這個圖像以及其它諸多圖像,我們都會先對圖像進行小型低通濾波處理,比如應用高斯模糊 從而去除噪聲,然后再用高通過濾器來檢測邊緣,所以在對圖像進行濾波處理時 要牢牢記住這個順序