-
主要内容
卷积概念
常见算子
自定义卷积模糊 -
卷积概念
卷积是图像处理中的一个操作,是kernel在图像的每个像素上的操作
kernel本质上是一个固定大小的矩阵数组,其中心被称为锚点(anchor point) -
卷积如何工作
把kernel放到像素数组上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值的操作称为卷积处理。数学表达公式如下
Sum = 8x1+6x1+6x1+2x1+8x1+6x1+2x1+2x1+8x1
New pixel = sum / (m*n)
- 常见算子
定义结构元素举例
Mat kernel_Robert_x =( Mat_(2, 2) << 1, 0, -1, 0);
- Robert算子(梯度算子, 去做图像的X方向梯度和Y方向梯度)
X方向 Y方向
- sobel算子是一种常用的边缘检测算子,是一阶的梯度算法。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法
X方向(显示左右差异) Y方向(显示上下差异)
- 拉普拉斯算子(显示整个的差异),边缘检测常用到
- 锐化算子
- 自定义卷积模糊
filer2D方法API
filter2D(
Mat src,//输入图像
Mat dst,//模糊结果图像
int depth,//图像深度32/8,此处不知道写-1,程序自动判断填写src的深度
Mat kernel,//卷积核/模板
Point anchor,//锚点位置
double delta//计算出来的像素+delta
)//其中kernel是可以自定义的卷积核
- 自定义卷积例程举例
//效果:图像根据设定的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);
}