数字图像处理(冈萨雷斯版)学习笔记(5)第9,10章

9.2.3 函数strel

  • IPT函数strel运用各种形状和大小构造结构元素,其基本语法为

    se = strel(shape, parameters)

    其中,shape是指定希望形状的字符串,而parameters是指定形状信息(如其大小)的一列参数。

在这里插入图片描述

在这里插入图片描述
除了可简化常用结构元素形状的产生之外,函数strel还有一个种重要的属性,即分解的形式来产生结构元素。函数imdilate自动地使用分解信息来加快膨胀处理。执行膨胀运算的速度大约比分解形式的速度快三倍

9.2.4 腐蚀

  • 腐蚀“收缩”或“细化”二值图像中的对象。像在膨胀中一样,收缩的方式和程度由一个结构元素控制。腐蚀的数学定义与膨胀相似,A被B腐蚀记为:\(\boldsymbol{A} \Theta \boldsymbol{B}\)定义为:

$$ A \ominus B=\left\{z |(B)_{z} \cap A^{c} \neq \varnothing\right\} $$

A = imread('c:\图像\腐蚀样本.tif');
se = strel('disk',10);

A2 = imerode(A,se);

figure,imshow(A)

figure,imshow(A2)

se = strel('disk',5);

A3 = imerode(A,se);

figure,imshow(A3)

A4 = imerode(A,strel('disk',20));

figure,imshow(A4)
  • 图像1为原始图像

    图像2是用半径为10的圆盘腐蚀后的图像

    图像3是用半径为5的圆盘腐蚀后的图像

    图像4是用半径为20的圆盘腐蚀后的图像

    Z2vL1x.png

在这里插入图片描述
在这里插入图片描述

9.3 膨胀与腐蚀的组合

9.3.1 开运算和闭运算

  • A被B的形态学开运算可以记做\(A \circ B\),这种运算是A被B腐蚀后再用B来膨胀腐蚀结果:

$$ A \circ B=(A \ominus B) \oplus B $$ 开运算的另一个公式为: $$ A \circ B=\cup\left\{(B)_{z} |(B)_{z} \subseteq A\right\} $$

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200626101951567.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMTAxNjM3,size_16,color_FFFFFF,t_70)
  • 开运算和闭运算再工具箱中用函数imopen和imclose实现。这两个函数的语法形式为:

    C = imopen(A, B)和C = imclose(A, B)

    其中,A是一幅二值图像,而B是一个元素值为0和1的矩阵,该矩阵指定了结构元素。strel对象SE可以用来代替B。

      f = imread('c:\图像\开运算闭运算样本.tif');
    
      se = strel('square',20);
    
      fo = imopen(f, se);
    
      figure,imshow(f)
    
      figure,imshow(fo)
    
      fc = imclose(f, se);
    
      foc = imclose(fo, se);
    
      figure,imshow(foc)
    
      fc = imclose(f, se);
    
      figure,imshow(fc)
    

    图像1为原图像

    图像2为开运算后的图像

    图像3为闭运算后的图像

    图像4是经过图像2闭运算的结果

    ZRErH1.png

    f = imread(‘c:\图像\指纹.tif’);

    se = strel(‘square’,3);

    fo = imopen(f,se);

    figure,imshow(f)

    figure,imshow(fo)

    foc = imclose(fo,se);

    figure,imshow(foc)

    fc = imclose(f, se);

    figure,imshow(fc)

    图像1为原图像

    图像2为开运算后的图像

    图像3是经过图像2闭运算的结果

    图像4为闭运算后的图像

在这里插入图片描述

9.3.2 击中或击不中变换

  • A被B击中或击不中定义为\(A \otimes B\),其中,B是结构元素对B=(B1,B2),而不是单个元素。击中或击不中变换由这两个结构元素定义为:

$$ A \otimes B=\left(A \ominus B_{1}\right) \cap\left(A^{c} \ominus B_{2}\right) $$

+ 击中或击不中变换在IPT中用函数bwhitmiss实现,该函数的语法为:
**C = bwhitmiss(A,B1,B2)**

其中,C为结果,A为输入图像,B1和B2为刚讨论过的结构元素。

 	B1 = strel([0 0 0; 0 1 1; 0 1 0]);

	B2 = strel([1 1 1; 1 0 0; 1 0 0]);

	f = imread('c:\图像\击中或击不中样本.tif');

	g = bwhitmiss(f,B1,B2);

	figure,imshow(f)

	figure,imshow(g)

图像1为原图像

图像2为应用击中或击不中变换后的结果

在这里插入图片描述

9.3.3 使用查找表

  • 当击中或击不中结构元素较小时,计算击中或击不中变换的较快方法是使用查找表(LUT)。这种方法是预先计算出每个可能邻域形状的像素值,然后把这些值存储到一个表中,以备以后使用。

  • 大脸猫:

      lut = makelut(@conwaylaws, 3);
    
      bw1 = [0 0 0 0 0 0 0 0 0 0;
      		0 0 0 0 0 0 0 0 0 0;
      		0 0 0 1 0 0 1 0 0 0;
      		0 0 0 1 1 1 1 0 0 0;
      		0 0 1 0 0 0 0 1 0 0;
      		0 0 1 0 0 0 0 1 0 0;
      		0 0 1 0 0 0 0 1 0 0;
      		0 0 0 1 1 1 1 0 0 0;
      		0 0 0 0 0 0 0 0 0 0;
      		0 0 0 0 0 0 0 0 0 0;
      		];
    
      subplot(2, 2, 1), imshow(bw1), title('1');
    
      bw2 = applylut(bw1, lut);
    
      subplot(2, 2, 2), imshow(bw2), title('2');
    
      bw3 = applylut(bw2, lut);
    
      subplot(2, 2, 3), imshow(bw3), title('3');
    
      bw4 = applylut(bw3, lut);
    
      subplot(2, 2, 4), imshow(bw4), title('4');
    

在这里插入图片描述

9.3.4 函数bwmorph

  • IPT函数bwmorph可基于膨胀,腐蚀和查找表操作的组合实现许多有用的操作,该函数的调用语法为:

    g = bwmorph(f,operation,n)

    其中,f是一幅输入二值图像,operation是一个指定期望操作的字符串,n是一个用于指定将被重复的操作次数的正整数。输入参量n是可选的,因此可以忽略,省略时操作只执行一次。表9.3描述了函数bwmorph的有效运算集合。

在这里插入图片描述

	f = imread('c:\图像\指纹.tif');

	se = strel('square',3);

	fo = imopen(f,se);

	foc = imclose(fo,se);

	figure,imshow(foc)

	g1 = bwmorph(foc,'thin',1);

	g2 = bwmorph(foc,'thin',2);

	figure,imshow(g1)

	figure,imshow(g2)

	ginf = bwmorph(foc,'thin',Inf);

	imshow(ginf)

	figure,imshow(g2)

	figure,imshow(ginf)

图像1为原图像

图像2为细化一次后的指纹图像

图像3为细化两次后的图像

图像4为细化到稳定状态的图像

在这里插入图片描述

骨骼化和细化经常会产生无关的短“毛刺”或寄生成分。清除(或去除)这些“毛刺”的过程称为修剪。函数endpoints可实现这一目的。该方法会识别并删除端点。

第十章 图像分割

10.1 点,线和边缘检测

10.1.1 点检测

在这里插入图片描述

  • 若T已经给出,则如下命令可用实现刚才讨论的点检测方法:

    g = abs(imfilter(double(f),w)) >= T;

    其中,f是输入图像,w是一个合适的点检测掩模(如图10.1所示掩模),g是结果图像。函数imfilter会将其输出转化为输入的类,若输入是uint8类,且abs操作不接受整数数据,则我们可以在滤波操作中使用double(f)来防止过早的截断。若输出图像g是logical类图像,则它的值是0和1。若未给出T值,则其值通常会基于滤波结果来选择,这种情况下,前面的命令串分成了三个基本步骤

    (1)计算已滤波的图像,即abs(imfiter(double(f),w));

    (2)使用来自己滤波的图像的数据找到T的值

    (3)将已滤波的图像与T做比较。

  • 点检测实例:

      w = [-1 -1 -1; -1 8 -1; -1 -1 -1];
    
      f = imread('c:\图像\点检测样本.tif');
    
      g = abs(imfilter(double(f),w));
    
      T = max(g(:));
    
      g = g >= T;
    
      figure,imshow(f)
    
      figure,imshow(g)
    

    图像1为原图像(东北象限的暗灰色区域中几乎看不见的黑点)

    图像2显示了检测到的点的图像

在这里插入图片描述

ZWW4G4.png

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值