- 膨胀
跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状,首先明确灰度图像(0~255)对应(黑~白);膨胀结果如下:
- 腐蚀
腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值替换锚点重叠下图像的像素值
- 开操作
开操作为先腐蚀后膨胀可以去掉小的对象,单纯去掉小点噪声的话多进行几次腐蚀迭代也可以,但是这样会使像素值小的区域变小,与原图不匹配,再膨胀回来是为了保持目标图像大小不变。
- 闭操作
闭操作为先膨胀后腐蚀可以去掉区域内部的噪声小对象,可以填充小的洞,单纯去掉小点噪声的话多进行几次膨胀迭代也可以,但是这样会使像素值大的区域变大,与原图不匹配,再腐蚀回来是为了保持目标图像大小不变。
- 形态学梯度(基本梯度还包括内部梯度、方向梯度)
形态学梯度是膨胀减去腐蚀;
- 顶帽
是原图像与开操作之间的差值图像
- 黑帽
是原图像与闭操作之间的差值图像
创建用于形态学操作的结构元素:Mat struct = getStructuringElement(MORPH_RECT, Size(3,3), Point(-1,-1)); //Point(-1,-1)默认自动寻找区域中心,参数一有MORPH_RECT MORPH_CROSS MORPH_ELLIPSE等几种区域形状。 struct = getStructuringElement(MORPH_RECT, Size(image.cols/20,1), Point(-1,-1)); //就是一条水平直线去扫描,可以取出图片中的横线。 膨胀函数dilate(in1,out1,structa, Point(-1, -1),5); //第三个参数为结构操作元素,5为迭代次数,即膨胀几次; 腐蚀函数:erode(in2, out2, structa, Point(-1, -1), 5); //参数意义同上。 图像形态学运算:morphologyEx(in2, out2, CV_MOP_CLOSE, structa); // CV_MOP_CLOSE为指定操作类型,structa同35为结构操作元素。 //有CV_MOP_OPEN/ CV_MOP_CLOSE/ CV_MOP_GRADIENT为形态学梯度 / CV_MOP_TOPHAT/ CV_MOP_BLACKHAT 形态学操作类型.