图像形态学即数学形态学(Mathematical morphology)是一门建立在格伦和拓扑学基础上的图像分析学科,是数学形态学图像处理的基本理论;
常见图像形态学运算:腐蚀、膨胀、开运算、闭运算、骨架抽取、极线腐蚀、击中击不中变换、Top-hat变换、颗粒分析、流域变换、形态学梯度等;
最基本的形态学操作是:膨胀(dilation)和腐蚀(erosion);
腐蚀:erode
void erode( Mat& src, //原图像
Mat& dst, //目标图像
const Mat& element,//卷积核
Point anchor=Point(-1,-1),//内核中心点,可省略
int iterations=1,//腐蚀次数,可省略
int borderType=BORDER_CONSTANT,//边缘类型,可省略
const Scalar& borderValue=morphologyDefaultBorderValue()//边缘值,可省略
);
例子:
1 Mat image = imread("C:/figure6_16_a.png"); 2 namedWindow("原图"); 3 imshow("原图", image); 4 Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));//构造矩形15*15卷积核 5 Mat out2; 6 7 erode(image, out2, element); 8 namedWindow("腐蚀图"); 9 imshow("腐蚀图", out2);
Mat getStructuringElement(int shape, Size esize, Point anchor=Point(-1,-1));
参数:
shape:内核形状,主要有MORPH_RECT,MORPH_CROSS和MORPH_ELLIPSE,分别为矩形、椭圆形和交叉形,对应的值分别为0,1,2
膨胀:
1 Mat out1; 2 namedWindow("膨胀图"); 3 dilate(image, out1, element); 4 imshow("膨胀图", out1);
开闭运算:
OpenCV:morphologyEx()
功能:morphologyEx函数利用基本的膨胀和腐蚀技术,来执行更加高级形态学变换,
如开闭运算,形态学梯度,“顶帽”、“黑帽”等等。
void morphologyEx(
InputArray src, //
OutputArray dst,//
int op,//形态学运算的类型
InputArraykernel,
Pointanchor=Point(-1,-1),
intiterations=1,
intborderType=BORDER_CONSTANT,
constScalar& borderValue=morphologyDefaultBorderValue() );
【注】:
int op:表示形态学运算的类型,
MORPH_OPEN – 开运算(Opening operation)
MORPH_CLOSE – 闭运算(Closing operation)
MORPH_GRADIENT -形态学梯度(Morphological gradient)
MORPH_TOPHAT - “顶帽”(“Top hat”)
MORPH_BLACKHAT - “黑帽”(“Black hat“)
开运算:先腐蚀后膨胀的过程;
功能:
消除小物体;
在纤细处分离物体;
平滑较大的边界并不明显改变其面积;
1 Mat out3; 2 namedWindow("开运算图"); 3 morphologyEx(image, out3, MORPH_OPEN, element); 4 imshow("开运算图", out3);
形态学闭运算:
闭运算(Closing Openration),先膨胀后腐蚀;
功能:
排除小型黑洞(黑斑);
Mat out4; namedWindow("闭运算图"); morphologyEx(image, out4, MORPH_CLOSE, element); imshow("闭运算图", out4);