8、灰度图的腐蚀、膨胀、开闭运算、顶帽底帽

1. 灰度图的腐蚀


用结构元素的中心点,从左到右从上到下,依次扫描灰度图的像素点,图片上该像素点的值取为结构元素所覆盖区域中像素点的 最小值,扫描一遍后会得到一张新图,就是原图的腐蚀图。

用该结构元素:
在这里插入图片描述
对下面矩阵进行腐蚀:
在这里插入图片描述
对第一个像素点的腐蚀操作如下:

在这里插入图片描述在这里插入图片描述
当移动到中间某像素点时腐蚀操作如下:
在这里插入图片描述在这里插入图片描述

2. 灰度图的膨胀


用结构元素的中心点,依次扫描灰度图的每个像素点,图片上该像素点的值取为结构元素覆盖的所有像素点中的 最大值,扫描一遍后会得到一张新图,就是原图的膨胀图。

用该结构元素:
在这里插入图片描述
对下面矩阵进行膨胀:
在这里插入图片描述
对第一个像素点的膨胀操作如下:
在这里插入图片描述在这里插入图片描述
扫描到中间某像素点时的膨胀操作为:
在这里插入图片描述在这里插入图片描述

3. 灰度图的腐蚀膨胀图片示例


下图示例结果表明,对灰度图进行腐蚀操作后,图片整体变暗,由于结构体的选择原因,图片分块颜色相似,有颗粒状的颜色分布;对图片进行膨胀操作后,图片整体变亮,也有块状分布的趋势。
在这里插入图片描述
本例代码:

clear,clc,close all;
f=imread('lemon.jpg');
g=rgb2gray(f);
figure,imshow(g);

se=strel('disk',10);
g_en=imerode(g,se);
figure;
subplot(1,2,1),imshow(g_en),title('腐蚀');
g_di=imdilate(g,se);
subplot(1,2,2),imshow(g_di),title('膨胀');

4. 灰度图开运算闭运算图片示例


观察开运算和闭运算的图像可以看出,经过开运算后,图片先腐蚀后膨胀,图片的整体色调变暗,但是图片中阴影和明亮处的界限并未改变,每一部分的亮部和暗部都更加平滑了。

经过闭运算后,图片先膨胀后腐蚀,图片的整体色调变亮,界限没有改变,明亮也更加平滑了。

在这里插入图片描述
本演示代码为:

clear,clc,close all;
f=imread('lemon.jpg');
g=rgb2gray(f);
figure,imshow(g);

se=strel('disk',10);
g_open=imopen(g,se);
g_close=imclose(g,se);
ge=cat(2,g,g_open,g_close);%cat函数解释在下面
figure,imshow(ge);
ge = cat(2, g, g_open, g_close);

cat 的参数为,cat( num , im1 , im2 , im3 [ ,... ] )

cat 函数是将后面的几张图片拼接为一张,其中 num 为拼接的方式,1代表从上到下拼接,2代表从左向右拼接,3代表从前向后拼接(即将几张图片重叠起来,变为一张图片,后面会有应用)。

5. 顶帽操作

顶帽操作的效果等同于原图-开运算,即原图减去开运算的图像。顶帽用来对灰度图进行操作。函数为:

tophat = imtophat(g, se);

顶帽操作通常用来去除背景。等价于 g - g_open

6. 底帽操作

底帽操作的效果等同于原图-闭运算,即原图减去闭运算的图像。底帽用来对灰度图进行操作。函数为:

bothat = imbothat(g, se);

:顶帽和底帽操作都是对于灰度图的操作。

7. 顶帽和底帽的应用

对下图进行顶帽和底帽操作,查看效果。
在这里插入图片描述
步骤:

  1. 首先将图片转为灰度图,因为底帽和顶帽操作都是针对灰度图。
    在这里插入图片描述

  2. 直接用函数进行顶帽和底帽操作

    可以看出,顶帽操作只保留了一些高亮的区域,偏暗的部分都被去除了,而后面较亮的背景也被去除。

    根据上面开运算的图可以知道,开运算保留了偏亮部分,用原图减去开运算,只保留高亮的部分。

    闭运算得到的是比较亮的部分,用原图减去闭运算,得到比较暗部的细节。
    在这里插入图片描述
    本例代码为:

    clear,clc,close all;
    f=imread('lemon.jpg');
    imshow(f);
    g=rgb2gray(f);
    figure,imshow(g);
    
    tophat=imtophat(g,strel('disk',10));
    subplot(1,2,1),imshow(tophat),title('顶帽');
    bothat=imbothat(g,strel('disk',10));
    subplot(1,2,2),imshow(bothat),title('底帽');
    
  • 13
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值