为了实现自定义滤波我们先了解一下卷积与算子
卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。 Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point),如下图
把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。
例如:
Sum = 8x1+6x1+6x1+2x1+8x1+6x1+2x1+2x1+8x1
New pixel = sum / (m*n) /*锚点的像素*/
卷积过程大致如下图:
算子就是上面提到的kernel,常见算子有Robert,Sobel,拉普拉斯算子
2种Robert算子
2种sobel算子
拉普拉斯算子
自定义滤波就是借助filter2D和自定义算子实现的
filter2D方法filter2D( Mat src, //输入图像
Mat dst, // 模糊图像
int depth, // 图像深度32/8
Mat kernel, // 卷积核/模板
Point anchor, // 锚点位置
double delta // 计算出来的像素+delta
)
其中 kernel是可以自定义的卷积核,例如我们掩模操作时的算子,与拉普拉斯的区别是中心位置处是5