OpenCV-08-图像降噪和边缘检测

1. 滤波器的选择及设计
  1. 滤波器的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2
  2. 滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。
  3. 如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。
2. 通过自定义构造矩阵实现滤波
kernel = np.array([[1,1,1],
                   [1,1,1],
                   [1,1,1]])/9
dst = cv.filter2D(sec,-1,kernel) #-1位置代表目标图片的数据类型,-1代表和输入数据类型一致
3. 滤波器的api
#均值滤波
dst = cv.blur(img, (3,3))
# 高斯模糊   参数1:图像  参数2:卷积核大小, 参数3:标准差越大,去除高斯噪声能力越强,图像越模糊
dst = cv.GaussianBlur(img, (5,5), 10)
#中值滤波
dst = cv.medianBlur(img, 3)
4. 边缘检测,都是通过一些算子来计算梯度,有sobel算子、拉普拉斯算子、canny算子
  1. sobel算子:计算x、y两个方向上的梯度,再合成,便得到最后的结果
# sobel算子  参数1:图像, 参数2:图像的深度 -1表示和原图相同, 
#            参数3: x方向求导的阶数 参数4: y方向求导的阶数
x_sobel = cv.Sobel(img, -1, 1, 0)
y_sobel = cv.Sobel(img, -1, 0, 1)
x_y_sobel = cv.addWeighted(x_sobel, 0.5, y_sobel, 0.5,0)

        由于使用Sobel算子计算的时候有一些偏差, 所以opencv提供了sobel的升级版Scharr函数,计算比sobel更加精细

x_scharr = cv.Scharr(img, -1, 1, 0)
y_scharr = cv.Scharr(img, -1, 0, 1)
xy_scharr = cv.addWeighted(x_scharr, 0.5, y_scharr, 0.5,0)
  1. 拉普拉斯算子
    通过拉普拉斯变换后增强了图像中灰度突变处的对比度,使图像中小的细节部分得到增强,使图像的细节比原始图像更加清晰。
# 使用拉普拉斯算子
dst = cv.Laplacian(img,cv.CV_32F)  #这里数据类型可能会较大影响结果
# 取绝对值,将数据转到uint8类型
dst = cv.convertScaleAbs(dst)
  1. canny算子
    指定两个阈值,高于阈值保留,低于阈值的话且无联系则抛弃。推荐高低阈值比例 3:1或2:1
dstImg = cv.Canny(grayImg,50,180)
  1. 锐化滤波,进一步锐化图像
kernel = np.array([
                    [-1,-1,-1],
                    [-1,9,-1],
                    [-1,-1,-1]])

dst = cv.filter2D(img,-1,kernel)
  1. 双边滤波
# src: 输入图像 
# d: 表示在过滤过程中每个像素邻域的直径范围。
#    如果这个值是非正数,则函数会从sigmaSpace计算该值。 
# sigmaColor: 颜色空间过滤器的sigma值,这个参数的值越大,
#             表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
# sigmaSpace: 坐标空间中滤波器的sigma值,如果该值较大,
#             则意味着越远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色.
cv.bilateralFilter(输入图像, d, sigmaColor, sigmaSpace)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值