卷积核一般为基数,例如3x3,5x5。一方面是由于padding,另一方面是保证锚点在中间,防止图片位置发生偏移。
边界扩充。原图为分辨率5x5,卷积核大小为3x3,原图通过边界扩充后大小变为7x7,再和3x3的卷积核进行卷积后,输出图像的大小依然是5x5
N = ( W - F + 2 P ) / S + 1。N 输出图像大小,W 原图大小,F卷积核,P扩充尺寸,S步长
低通滤波可以去除噪音或平滑图像
高通滤波可以帮助查找图像的边缘
高斯滤波GaussianBlur(img,kernel,sigmaX,sigmaY)
均值滤波,过滤胡椒噪音 medianBlur(img,ksize)
import cv2
import numpy as np
img = cv2.imread('dog.jpg')
#高斯滤波
new1 = cv2.GaussianBlur(img,(27,27),sigmaX=1)
#均值滤波
new2 = cv2.blur(img,(5,5))
#中值滤波
cv2.medianBlur(img,(5,5))
cv2.imshow('img',img)
cv2.imshow('new',new)
cv2.waitKey(0)
双边滤波:
可以保留边缘,同时可以对边缘内的区域进行平滑处理。美颜功能 好,不适合胡椒噪音
#双边滤波(img,d,sigmaColor,sigmaSpace))
new3 = cv2.bilateralFilter(img,5,20,50)
高通滤波(索贝尔,沙尔)
Sobel(提取不同方向上的边缘)
import cv2
img = cv2.imread('number.jpg')
#计算x方向上的边缘,默认ksize=3,如何ksize=-1,转化为沙尔算子,检测更加细的边缘
dst1 = cv2.Sobel(img,cv2.CV_64F,1,ksize=3)
#计算y方向上的边缘
dst2 = cv2.Sobel(img,cv2.CV_64F,0,1)
new = cv2.add(dst1,dst2)
cv2.imshow('dst1',dst1)
cv2.imshow('new',new)
cv2.waitKey(0)
拉普拉斯算子 可以同时求两个方向上的边缘,但是使用前应先去噪
ldst = cv2.Laplacian(img,cv2.CV_64F,ksize=5) #默认ksize = 1
Canny边缘检测
1.使用5x5高斯滤波消除噪声
2.计算图像的梯度方向(0,45,90,135)
3.去局部最大值
4.阀值计算
Canny(img, minVal,maxVal)