图像形态学

  • 膨胀

  跟卷积操作类似,假设有图像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 形态学操作类型.

猜你喜欢

转载自www.cnblogs.com/fuzhuoxin/p/12111973.html