Python 使用Opencv實現高通濾波器

本人新書《玩轉Python網絡爬蟲》,可在天貓、京東等商城搜索查閱或通過右側圖書鏈接購買,項目深入淺出,適合爬蟲初學者或者是已經有一些網絡爬蟲編寫經驗,但希望更加全面、深入理解Python爬蟲的開發人員。

歡迎加入學習交流QQ羣:657341423


高通濾波器
高通濾波器(HPF)是檢測圖像的某個區域,然後根據像素與周圍像素的亮度差值來提升像素的亮度。
用於:邊緣提取與增強。
注意:通過高通濾波器進行濾波後,再和原圖像疊加,可以增強圖像中灰度級變化較快的部分,即銳化。

低通濾波器
低通濾波器是像素與周圍像素的亮度差值小於一個特定值時,平滑該像素的亮度。
用於:去噪和模糊化。
注意:低通濾波器容許低頻信號通過,但減弱頻率高於截止頻率的信號的通過。

import cv2
import numpy as np
from skimage import io
from scipy import ndimage
# 高通濾波器是根據像素比它周圍的像素更突出,就會提升它的亮度
# 常用邊緣提取與增強,檢測圖像中物體的邊緣位置
kernel_3x3 = np.array([[-1, -1, -1],
                   [-1,  8, -1],
                   [-1, -1, -1]])

kernel_5x5 = np.array([[-1, -1, -1, -1, -1],
                       [-1,  1,  2,  1, -1],
                       [-1,  2,  4,  2, -1],
                       [-1,  1,  2,  1, -1],
                       [-1, -1, -1, -1, -1]])

img = io.imread("planet_glow.jpg",as_grey=True)

k3 = ndimage.convolve(img, kernel_3x3)
k5 = ndimage.convolve(img, kernel_5x5)

# cv2.GaussianBlur 高斯濾波,(17,17)爲核大小,包含寬度和高度的二元組。
blurred = cv2.GaussianBlur(img, (17,17), 0)
g_hpf = img - blurred
cv2.imshow("img", img)
cv2.imshow("3x3", k3)
cv2.imshow("5x5", k5)
cv2.imshow('blurred',blurred)
cv2.imshow("g_hpf", g_hpf)
cv2.waitKey(0)
cv2.destroyAllWindows()

運行結果
原圖:
這裏寫圖片描述

原圖經過灰度處理
這裏寫圖片描述

灰度處理後經過高斯模糊
這裏寫圖片描述

灰度處理後經過濾波核3*3處理
這裏寫圖片描述

灰度處理後經過濾波核5*5處理
這裏寫圖片描述

灰度處理減去高斯模糊
這裏寫圖片描述

從效果圖看來,最後一種處理結果明顯最優,但對邊緣提前不算十分明顯


參考資料:OpenCV 3計算機視覺 Python語言實現第二版

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章