开运算和闭运算的基础是膨胀和腐蚀,可以在看本文章前先阅读这篇文章机器视觉技术与应用实战(Chapter Two-04)-CSDN博客
开运算:先腐蚀后膨胀。开运算可以使图像的轮廓变得光滑,具有断开狭窄的间断和消除细小突出物的作用。
闭运算:先膨胀后腐蚀。它具有填充物体细小空间、消除缝隙、连接临近的物体和平滑边界轮廓的作用。
开和闭使用膨胀和腐蚀的顺序有区别,这个我们需要去理解它们作用,这样就更加好记住。开运算由于腐蚀先,腐蚀的作用更加明显,体现在断开连接作用,自然就是“开”。闭运算是膨胀先使用,影响更加大,起到了连接和填充的作用,更加有“闭”的含义了。
看了作用,当然要来一波效果瞧一瞧,注意了开运算和闭运算的基础是在膨胀和腐蚀上的,同样会有膨胀和腐蚀因为灰度不同产生貌似“不同的效果”。
使用Visionpro里面IPOneImage里面闭运算、开运算处理
原图:
闭运算:亮的部分(白色)填充,这里是填充作用,消除了噪点
开运算:亮的部分(白色)断开
在matlab中使用bwmorph函数来处理开运算和闭运算,还是采用相同的图片,我们用matlab来试一下开运算和闭运算,图片的名称为“image3.jpg"。
I1 = imread('image3.jpg'); %读取原图像
level=graythresh(I1); %最大类间方差法找到图片的一个合适的阈值
I = im2bw(I1, level); %二值化图像
I2= bwmorph(I, 'open'); %开运算
I3= bwmorph(I, 'close'); %闭运算
figure('name','开运算和闭运算');
subplot(1,3,1); %一行三列第一张
imshow(I);
title('原图像');
subplot(1,3,2); %一行三列第二张
imshow(I2);
title('开运算');
subplot(1,3,3); %一行三列第三张
imshow(I3);
title('闭运算');
?效果如下:
在Visionpro中我调整了结构元素(内核)的大小,和matlab中展示的效果稍有区别。可能会有友友想问为什么用visionpro,其实传统机器视觉在工业领域通常采用visionpro和halcon,在我接触到的项目领域里面采用了visionpro,当然如果是在学术界,matlab会使用得更加多。
接下来,我们讲一下细化
一个图像的“骨架”,是指图像中央的骨骼部分,是描述图像几何重要特征之一。求一幅图像的“骨架”的过程通常称作为图像的“细化”的过程,当然也可以这么说,细化*是把一个平面区域简化成图的结构形状表示方法*。由此可以看出细化作用就是有助于突出图像形状特点和减少冗余信息量。
细化的过程通常是:图像特征有规律的减少像素点(宽度变窄),在减少的过程中,图像的连通性要求保持不变。
细化的概念还是非常好理解的吧,直接看一下效果吧,注意了细化前务必对图像进行一定处理,确保噪声等不会影响到细化。
原图:
代码如下:
y1 = imread('7.jpg'); %读取原图像
level=graythresh(y1); %最大类间方差法找到图片的一个合适的阈值
y = im2bw(y1, level); %二值化图像
figure('name','细化');
subplot(1,2,1); imshow(y); title('原始图像');
img_thin = bwmorph(y, 'thin', Inf);% 细化
subplot(1,2,2); imshow(img_thin); title('细化');
运行结果如下:
?
从上面可以看到,细化提取了图像的”骨架“,图像太小了,实际上那些线是连接的,连通的。放大版:
最后,写了这么多,有一个疑惑会产生,有了腐蚀和膨胀,为什么还需要开运算和闭运算呢?
可以这么思考:腐蚀在去除图像的噪声同时压缩图像,导致图像的前景变小。膨胀去除噪声并且扩大了前景,但是可能会增强图像的边缘噪声,这两者都有局限性。膨胀和腐蚀两者有互相弥补的特点,就出现了开运算和闭运算。
“人生用特写镜头来看是悲剧,长镜头来看则是喜剧。”当前的点滴是为后期厚积薄发做准备,趁青春,勇敢闯!
欢迎各位大佬指出文章不足!