一. 高通滤波器:
检测图像的某个区域,然后根据像素和周围像素亮度差值来提升该像素亮度的滤波器--适用于边缘检测。
1. 创建核矩阵,又称为滤波器。核:一组权重的集合。大小为7的核时7*7矩阵。一般滤波器所有值和为0。例如kernal_3x3=np.array([[-1,-1,-1], [-1,8,-1], [-1,-1,-1]])
2.读入图像,灰度图。img=cv2.imread('../data/0.jpg',0)
3. 使用核与图像进行卷积,使用scipy中ndimage.convolve函数。得到的结果就是和源图像相同大小的矩阵。其中进行卷积的运算,运算规则参考文章:卷积神经网络简介
4. 显示出卷积后的图像,先创建窗口,重设窗口大小,显示图片,关闭窗口。结果如下:
5. 代码如下:
import cv2
import numpy as np
from scipy import ndimage
#这个是滤波器使用的模板矩阵
kernal_3x3=np.array([[-1,-1,-1],
[-1,8,-1],
[-1,-1,-1]
])
kernal_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=cv2.imread('../data/0.jpg',0) #以灰度的方式加载图片
#通过使用模板矩阵进行高通滤波
k3=ndimage.convolve(img, kernal_3x3)
k5=ndimage.convolve(img,kernal_5x5)
#使用OpenCV的高通滤波
blurred = cv2.GaussianBlur(img,(11,11),0)
g_hpf=img-blurred
cv2.namedWindow("origin picture", cv2.WINDOW_NORMAL) # 初始化一个名为Image的窗口
cv2.resizeWindow("origin picture", 400, 600);
cv2.namedWindow("k3", cv2.WINDOW_NORMAL) # 初始化一个名为Image的窗口
cv2.resizeWindow("k3", 400, 600);
cv2.namedWindow("k5", cv2.WINDOW_NORMAL) # 初始化一个名为Image的窗口
cv2.resizeWindow("k5", 400, 600);
cv2.namedWindow("blurred", cv2.WINDOW_NORMAL) # 初始化一个名为Image的窗口
cv2.resizeWindow("blurred", 400, 600);
cv2.namedWindow("g_hpf", cv2.WINDOW_NORMAL) # 初始化一个名为Image的窗口
cv2.resizeWindow("g_hpf", 400, 600);
cv2.imshow('origin picture',img)
cv2.imshow('k3',k3)
cv2.imshow('k5',k5)
cv2.imshow('blurred',blurred)
cv2.imshow('g_hpf',g_hpf)
cv2.waitKey(0)
cv2.destroyAllWindows()
二、低通滤波器
像素和周围像素的亮度差值小于一个特定值时,平滑该像素的亮度,用于降噪和模糊化。
三、边缘检测
边缘检测滤波函数:Laplacian() Sobe() Scharr(),将非边缘部分转化为黑色,边缘区域转化为白色或者其他饱和的颜色。但容易将噪声错误识别为边缘,故要进行模糊处理。函数有:blur()(简单算数平均)medianBlur() 以及GaussionBlur() 。
具体代码和实现效果待学习~~
网友评论