16.自定义线性滤波

  1. 主要内容
    卷积概念
    常见算子
    自定义卷积模糊

  2. 卷积概念
    卷积是图像处理中的一个操作,是kernel在图像的每个像素上的操作
    kernel本质上是一个固定大小的矩阵数组,其中心被称为锚点(anchor point)

  3. 卷积如何工作
    把kernel放到像素数组上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值的操作称为卷积处理。数学表达公式如下

Sum = 8x1+6x1+6x1+2x1+8x1+6x1+2x1+2x1+8x1
New pixel = sum / (m*n)

  1. 常见算子

定义结构元素举例
Mat kernel_Robert_x =( Mat_(2, 2) << 1, 0, -1, 0);

  • Robert算子(梯度算子, 去做图像的X方向梯度和Y方向梯度)
        X方向              Y方向
    在这里插入图片描述
  • sobel算子是一种常用的边缘检测算子,是一阶的梯度算法。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法
    X方向(显示左右差异)    Y方向(显示上下差异)
    在这里插入图片描述
  • 拉普拉斯算子(显示整个的差异),边缘检测常用到
    在这里插入图片描述
  • 锐化算子
  1. 自定义卷积模糊
    filer2D方法API
filter2D(
Mat src,//输入图像
Mat dst,//模糊结果图像
int depth,//图像深度32/8,此处不知道写-1,程序自动判断填写src的深度
Mat kernel,//卷积核/模板
Point anchor,//锚点位置
double delta//计算出来的像素+delta
)//其中kernel是可以自定义的卷积核

在这里插入图片描述

  1. 自定义卷积例程举例
//效果:图像根据设定的kernel每隔0.5秒逐渐模糊
int c =0;
int index =0;
while(ture){
    c = waitKey(500);
    if((char)c==27){
        break;
    }
     kesize = 4 + (index % 5) * 2 + 1;
    Mat kernel = Mat::ones(Size(ksize,ksize),CV_32F / (float)( ksize*ksize ));
    filter2D(src,dst,-1,kernel,Point(-1,-1));
    index++;
    imshow("OUT_image",dst);
}
  1. 课外扩展
    卷积的本质及物理意义(全面理解卷积)
    图像增强(锐化)相关算子
发布了41 篇原创文章 · 获赞 14 · 访问量 2003

猜你喜欢

转载自blog.csdn.net/qq_43367829/article/details/104157953