除了之前写的腐蚀、膨胀、开运算、闭运算。还有很多其它形态学计算。
1、图像梯度
形态学梯度就是膨胀图与腐蚀图之差,梯度从原区域的膨胀中减去了原区域的收缩,保留了图像的外边缘部分,也就是图像的轮廓。
imgPath = 'E:\opencv_pic\src_pic\pic2.bmp'; img = imread(imgPath); img=rgb2gray(img); img = 255-img; se = strel('square', 3); img2 = imerode(img, se); img3 = imdilate(img, se); subplot(1,2,1),imshow(255-img),title('原始图像'); subplot(1,2,2),imshow(255-(img3-img2)),title('梯度图像');
2、顶帽(Top Hat)
顶帽变换是指原始图像减去其开运算的图像,得到图像的噪声。
imgPath = 'E:\opencv_pic\src_pic\pic1.bmp'; img = imread(imgPath); img=rgb2gray(img); img = 255-img; se = strel('square', 5); img3 = imopen(img, se); subplot(1,2,1),imshow(255-img),title('原始图像'); subplot(1,2,2),imshow(255-(img-img3)),title('顶帽运算');
使用matlab语句img3 = imtophat(img, se)效果和上面的代码相同。
3、底帽
图像底帽运算是图像闭运算操作减去原始图像的结果,得到图像内部的小孔,或者前景色中的小黑点。
imgPath = 'E:\opencv_pic\src_pic\pic1.bmp'; img = imread(imgPath); img=rgb2gray(img); img = 255-img; se = strel('square', 5); img3 = imclose(img, se); subplot(1,3,1),imshow(255-img),title('原始图像'); subplot(1,3,2),imshow(255-img3),title('闭运算'); subplot(1,3,3),imshow(255-(img3-img)),title('底帽运算');
使用matlab语句img3 = imbothat(img, se)效果和上面的代码相同。
4、击中、击不中
击中击不中变换是形态学中用来检测特定形状所处位置的一个基本工具。
原理:
A*S =(AΘS1)∩(AcΘS2)
其中S1∩S2 = Ø, S=S1∪S2,S1是感兴趣物体(要检测物体)的集合,S2是背景部分对应的集合。结构元素S1对目标图像进行腐蚀,背景结构元素S2对目标图像的补集进行腐蚀。
Hit-miss算法对图像内部和外部同时探测,结构元素S1对图像进行匹配,结构元素S2与图像的补集进行匹配。
5、参考文献
1、C#数字图像处理(十四)击中击不中变换 (Hit-miss)
https://www.cnblogs.com/dearzhoubi/p/8714941.html
2、Hit-and-Miss Transform
https://homepages.inf.ed.ac.uk/rbf/HIPR2/hitmiss.htm
3、Hit-or-Miss
https://docs.opencv.org/trunk/db/d06/tutorial_hitOrMiss.html
尊重原创技术文章,转载请注明。