首页 > 其他分享 >【数字图像处理第9章——形态学图像处理】

【数字图像处理第9章——形态学图像处理】

时间:2024-07-08 12:55:19浏览次数:16  
标签:运算 数字图像处理 元素 形态学 图像处理 子集 result 图像 结构

数字图像处理第9章——形态学图像处理

9.形态学图像处理

9.1 概述

什么是形态学

形态学:生物学中研究动植物结构的一个分支

数学形态学(也称图像代数):以形态为基础对图像进行处理(分析)的数学工具

形态学图像处理的作用

可以简化图像数据,去除图像中不重要的结构,仅保持图像的基本形状特性

请添加图片描述

基本思想

使用具有一定形态的结构元素度量和提取图像中的对应形状,以达到对图像进行处理和分析的目的

数学基础与基本操作

形态学图像处理的数学基础和所用语言是集合论

形态学图像处理的基本运算有4个:膨胀腐蚀开启闭合

集合的反射

一个集合B的反射定义如下:
B ^ = { w ∣ w = − b , b ∈ B } 集合 B 及其反射关于原集合原点对称,即相对于原点旋转 180 ° \hat B=\{w|w=-b,b\in B\}\\ 集合B及其反射关于原集合原点对称,即相对于原点旋转180° B^={w∣w=−b,b∈B}集合B及其反射关于原集合原点对称,即相对于原点旋转180°

集合的平移

一个集合B的平移定义如下:
( B ) z = { c ∣ c = b + z , b ∈ B } z = ( z 1 , z 2 ) (B)_z=\{c|c=b+z,b\in B\}\\ z=(z_1,z_2) (B)z​={c∣c=b+z,b∈B}z=(z1​,z2​)

9.2 二值图像形态学处理的基本概念

  • 二值图像形态学处理的运算对象是集合
    • 设A为像素集合,B为结构元素(本身也是一个像素集合,其成员是感兴趣目标的像素),其处理过程是用B对A进行操作
  • B对A的具体操作
    • 通过让B在A上平移,以便B的原点访问A的每一个元素,以此得到一个新的像素集合
  • 结构元素必须指定一个原点
    • 结构元素的原点是形态学运算的参考点(当结构元素对称且未显示原点时,通常假定原点位于对称中心处)
    • 注意,原点可以包含在结构元素中,也可以不包含在结构元素中(结构元麦原卢的位智不同.运算结果也不相同)
  • 当对图像操作时,要求结构元素是矩形阵列(通过添加最小可能数量的背景元素形成一个矩形阵列来实现)

请添加图片描述

注意 : 在实际处理中,只考虑图像和结构元素中有效像素点,也即只考虑感兴趣前景部分 . 背景部分不予老虑 \color{red}{注意:在实际处理中,只考虑图像和结构元素中有效像素点,也即只考虑感兴趣前景部分.背景部分不予老虑} 注意:在实际处理中,只考虑图像和结构元素中有效像素点,也即只考虑感兴趣前景部分.背景部分不予老虑

9.3 膨胀(加深前景像素点)

效果:扩大图像中的物体(背景像素点变为前景像素点)

定义:设A为原始二值图像,B是结构元素,则A被B膨胀定义为:

A ⨁ B = { z ∣ ( B ^ ) z ∩ A ≠ ∅ } 对结构元素 B 做反射,反射后再做平移,平移后的图像与原始图像 A 交集不为空,就在位置 z 输出一个前景值 A\bigoplus B =\{z|(\hat B)_z \cap A ≠ \emptyset \}\\ 对结构元素B做反射,反射后再做平移,平移后的图像与原始图像A交集不为空,就在位置z输出一个前景值 A⨁B={z∣(B^)z​∩A=∅}对结构元素B做反射,反射后再做平移,平移后的图像与原始图像A交集不为空,就在位置z输出一个前景值

又定义为:
A ⨁ B = { z ∣ [ ( B ^ ) z ∩ A ] ≠ ⊆ A } A\bigoplus B =\{z|[(\hat B)_z \cap A] ≠ \subseteq A \} A⨁B={z∣[(B^)z​∩A]=⊆A}
即,A被B膨胀的结果是满足上式的所有位移z的点(前景像素点)的集合

请添加图片描述

A=imread('图片路径');
subplot(1,2,1);
imshow(A);
B=[0 1 0;1 1 1;0 1 0];
result=imdilate(A,B);
subplot(1,2,2);
imshow(result);

请添加图片描述

9.4 腐蚀(细化前景像素点)

效果:缩小图像中的物体(前景像素点变为背景像素点)

定义:设A为原始二值图像,B是结构元素,则A被B腐蚀定义为:

A ㊀ B = { z ∣ ( B ) z ⊆ A } 结构元素完全包含在原始图像的前景目标中 A㊀B=\{z|(B)_z\subseteq A\}\\ 结构元素完全包含在原始图像的前景目标中 A㊀B={z∣(B)z​⊆A}结构元素完全包含在原始图像的前景目标中

即,将结构元素B相对于集合A进行平移,只要平移后结构元素都包含在集合A中,则这些位移的点(前景像素点)的集合即为腐蚀结果。

请添加图片描述

腐蚀在数学形态学运算中的作用

如果结构元素取3×3的方块,腐蚀将使物体的边界沿周边减少一个像素

腐蚀可以去除小于结构元素的物体(如:毛刺、小凸起等)。选取不同大小的结构元素,可以在原图像中去掉不同大小的物体

如果两个物体之间有细小的连通,那么当结构元素足够大时,通过腐蚀运算可以将两个物体分开

A=imread('图片路径');
subplot(2,3,2);
imshow(A);
title('原始图像');
B=strel('square',11);
result=imerode(A,B);
subplot(2,3,4);
imshow(result);
title('边长为11的方形结构元素腐蚀后的图像');
B=strel('square',15);
result=imerode(A,B);
subplot(2,3,5);
imshow(result);
title('边长为15的方形结构元素腐蚀后的图像');
B=strel('square',45);
result=imerode(A,B);
subplot(2,3,6);
imshow(result);
title('边长为45的方形结构元素腐蚀后的图像');

请添加图片描述

A=imread('图片路径');
subplot(1,3,1);
imshow(A);
title('原始图像');
B=strel('square',13);
%先腐蚀
result1=imerode(A,B);
subplot(1,3,2);
imshow(result1);
title('先使用13*13像素大小的方形结构元素腐蚀后的图像');
%后膨胀
result2=imdilate(result1,B);
subplot(1,3,3);
imshow(result2);
title('再用使用13*13像素大小的方形结构元素膨胀后的图像');

请添加图片描述

9.5 开操作

效果:断开较窄的狭颈、消除细的突出物,使图像的轮廓变得光滑

定义:设A为原始二值图像,B是结构元素,则使用结构元素B对集合A进行开启操作,定义为:
A ∘ B = ( A ㊀ B ) ⨁ B A\circ B=(A㊀B)\bigoplus B A∘B=(A㊀B)⨁B
即,先用B对A 腐蚀,然后用B对腐蚀结果进行膨胀。

  • 性质

    • A ∘ B 是 A 的子集 A\circ B是A的子集 A∘B是A的子集

    • 如果 C 是 D 的子集,并采用结构元素 B 对 C 和 D 进行开启运算 , 结果还是保持原来的关系( C 是 D 的子集) 即 C ∘ B 是 D ∘ B 的子集 如果C是D的子集,并采用结构元素B对C和D进行开启运算,结果还是保持原来的关系(C是D的子集)\\ 即C\circ B是D\circ B的子集 如果C是D的子集,并采用结构元素B对C和D进行开启运算,结果还是保持原来的关系(C是D的子集)即C∘B是D∘B的子集

    • ( A ∘ B ) ∘ B = A ∘ B , 即多次开启的运算结果和一次开启的运算结果一致 (A\circ B)\circ B=A\circ B,\\ 即多次开启的运算结果和一次开启的运算结果一致 (A∘B)∘B=A∘B,即多次开启的运算结果和一次开启的运算结果一致

9.6 闭操作

效果:填补狭窄的间断、小的孔洞,使图像的轮廓变得光滑

定义:设A为原始二值图像,B是结构元素,则使用结构元素B对集合A进行闭合操作,定义为:
A ⋅ B = ( A ⨁ B ) ㊀ B A\cdot B=(A\bigoplus B)㊀B A⋅B=(A⨁B)㊀B
即,先用B对A膨胀,然后用B对结果进行腐蚀

  • 性质

    • A ⋅ B 是 A 的子集 A\cdot B是A的子集 A⋅B是A的子集

    • 如果 C 是 D 的子集,并采用结构元素 B 对 C 和 D 进行开启运算 , 结果还是保持原来的关系( C 是 D 的子集) 即 C ⋅ B 是 D ⋅ B 的子集 如果C是D的子集,并采用结构元素B对C和D进行开启运算,结果还是保持原来的关系(C是D的子集)\\ 即C\cdot B是D\cdot B的子集 如果C是D的子集,并采用结构元素B对C和D进行开启运算,结果还是保持原来的关系(C是D的子集)即C⋅B是D⋅B的子集

    • ( A ⋅ B ) ⋅ B = A ⋅ B , 即多次闭合的运算结果和一次闭合的运算结果一致 (A\cdot B)\cdot B=A\cdot B,\\ 即多次闭合的运算结果和一次闭合的运算结果一致 (A⋅B)⋅B=A⋅B,即多次闭合的运算结果和一次闭合的运算结果一致

请添加图片描述

A=imread('图片路径');
subplot(2,2,1);
imshow(A);
title('(a) 原二值图A');
B=strel('square',20);% 通过strel函数生成具有一定形状的结构元素
result_open=imopen(A,B);
subplot(2,2,2);
imshow(result_open);
title('(b) 开启运算的结果图');
result_close=imclose(A,B);
subplot(2,2,3);
imshow(result_close);
title('(c) 闭合运算的结果图');
result_open_close=imclose(result_open,B);
subplot(2,2,4);
imshow(result_open_close);
title('(d) 图像(b)经闭合运算后的结果');

请添加图片描述

A=imread('图片路径');
subplot(1,3,1);
imshow(A);
title('(a) 带有杂散点的指纹图像','FontSize',15);
B=strel('square',3);
result_open=imopen(A,B);
subplot(1,3,2);
imshow(result_open);
title({'(b) 开启运算的结果图';'(消除了杂散点但在纹脊上产生了许多缺口)'},'FontSize',15); 
result_open_close=imclose(result_open,B);
subplot(1,3,3);
imshow(result_open_close);
title({'(c) 对(b)图进行闭合运算的结果图';'(填充了纹脊上的缺口)'},'FontSize',15); 

请添加图片描述

形态学的主要应用

边界提取

图像A的边界b(A)定义为:
b ( A ) = A − ( A ㊀ B ) B 是适当的结构元素 b(A)=A-(A㊀B)\\ B是适当的结构元素 b(A)=A−(A㊀B)B是适当的结构元素
即,先用B对A腐蚀,然后用A减去腐蚀得到的结果

尽管图示中的结构元素是最常用的,但并不是唯一的。例如,使用5×5的结构元素,将得到2个像素宽的边界

A=imread('图片路径');
subplot(3,2,3);
imshow(A);
title('(a)一幅简单的二值图像 ','FontSize',15); 
B=strel('square',3);
result=A-imerode(A,B);
subplot(3,2,2);
imshow(result);
title('(b)使用3*3白色方形结构元素提取的边界','FontSize',15); 
B=strel('square',5);
result=A-imerode(A,B);
subplot(3,2,6);
imshow(result);
title('(c)使用5*5白色方形结构元素提取的边界','FontSize',15); 

请添加图片描述

孔洞填充

  • 定义

    • 一个孔洞可被定义为由前景像素相连接的边界所包围的一个背景区域
  • 实现

    • 令A表示一个集合:其元素是8连通的边界,且每个边界包围一个孔洞

    • 令X_0表示一个与包含A的相同大小的阵列,其初始状态为:

      • 包含每个孔洞中的一个指定位置处的前景像素点
      • 除了上述的前景像素点之外,其余元素均为背景像素点
    • 在给定A和X_0的前提下,采用前景像素填充A的所有孔洞的过程如下:

      • 其中,B是对称结构元素,如下:

      • [ 0 1 0 1 1 1 0 1 0 ] \begin{bmatrix} 0 & 1 & 0 \\ 1 & 1 & 1 \\0 & 1 & 0 \end{bmatrix} ​010​111​010​

      • 在算法执行过程中,如果 X k = X k − 1 ,则算法在迭代的第 k 步结束 在算法执行过程中,如果X_k=X_{k-1},则算法在迭代的第k步结束 在算法执行过程中,如果Xk​=Xk−1​,则算法在迭代的第k步结束

      • 集合 X k 包含所有被填充的孔洞, X k 和 A 的并集则包含被填充的孔洞及其边界 集合X_k包含所有被填充的孔洞,X_k和A的并集则包含被填充的孔洞及其边界 集合Xk​包含所有被填充的孔洞,Xk​和A的并集则包含被填充的孔洞及其边界

X k = ( X k − 1 ⨁ B ) ∩ A c , k = 1 , 2 , 3... A c 为 A 的补集 X_k=(X_{k-1}\bigoplus B)\cap A^c,k=1,2,3...\\ A^c为A的补集 Xk​=(Xk−1​⨁B)∩Ac,k=1,2,3...Ac为A的补集

注意:在每一步运算中,膨胀结果与 A c 的交集操作实现了将膨胀结果限制在 感兴趣区域内,即条件膨胀 ( 否则,上述公式的膨胀将填充整个区域 ) \color{red}{注意:在每一步运算中,膨胀结果与A^c的交集操作实现了将膨胀结果限制在}\\ \color{red}{感兴趣区域内,即条件膨胀(否则,上述公式的膨胀将填充整个区域)} 注意:在每一步运算中,膨胀结果与Ac的交集操作实现了将膨胀结果限制在感兴趣区域内,即条件膨胀(否则,上述公式的膨胀将填充整个区域)

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

骨架抽取

  • 骨架的概念
    • 图像的一种细化结构(图像中物体的骨骼部分)),由物体的若干条细化的中轴线组成,描述了图像中物体的形状和方向信息
  • 骨架的作用
    • 通过骨架抽取可以简化图像中物体的信息而保留其同伦结构(结构、形状和笔画等并没有发生变化)
    • 有助于突出形状特点和减少冗余信息量
    • 在图像工程领域有着广泛的应用(如形状分析、模式识别、数据压缩)

请添加图片描述

  • 骨架的定义(最大内切圆盘概念)
    • 物体A的骨架由A内部所有的最大内切圆盘的圆心组成,骨架的每个点都对应一个相应的最大内切圆盘。
    • 其中,最大内切圆盘不是其它任何完全属于A的圆盘的子集并且至少两点与集合A的边界轮廓相切。

请添加图片描述

  • 骨架抽取的实现
    • 对于集合A,一般用S(A)表示其骨架,可以使用腐蚀和开启操作来实现骨架的抽取,如下:

S ( A ) = ∪ k = 0 K S k ( A ) 其中 , S k ( A ) = ( A ㊀ k B ) − [ ( A ㊀ k B ) ] ∘ B , S k ( A ) 为骨架子集, B 是一个结构元素,而 ( A ㊀ k B ) 表示对 A 的连续 k 次腐蚀。 ( A ㊀ k B ) = ( ( . . . ( A ㊀ B ) ㊀ B ) ㊀ . . . ) ㊀ B ) , K 是 A 被腐蚀为空集前的最后一次迭代步骤,即: K = m a x { k ∣ ( A ㊀ k B ) ≠ ∅ } S(A)=\cup_{k=0}^KS_k(A)\\ 其中,S_k(A)=(A㊀kB)-[(A㊀kB)]\circ B,S_k(A)为骨架子集,\\ B是一个结构元素,而(A㊀kB)表示对A的连续k次腐蚀。\\ (A㊀kB)=((...(A㊀B)㊀B)㊀...)㊀B),\\ K是A被腐蚀为空集前的最后一次迭代步骤,即: K=max\{k|(A㊀kB)\neq \emptyset\} S(A)=∪k=0K​Sk​(A)其中,Sk​(A)=(A㊀kB)−[(A㊀kB)]∘B,Sk​(A)为骨架子集,B是一个结构元素,而(A㊀kB)表示对A的连续k次腐蚀。(A㊀kB)=((...(A㊀B)㊀B)㊀...)㊀B),K是A被腐蚀为空集前的最后一次迭代步骤,即:K=max{k∣(A㊀kB)=∅}

骨架要求最大限度的细化、连通,且受到的腐蚀最小 \color{red}{骨架要求最大限度的细化、连通,且受到的腐蚀最小} 骨架要求最大限度的细化、连通,且受到的腐蚀最小

请添加图片描述

A=imread('图片路径');
subplot(1,2,1);
imshow(A);
title('(a) 骨头的二值图像A','FontSize',15); 
subplot(1,2,2);
bwmorph(A,'skel',Inf);
title('(b) 原图的骨架图像','FontSize',15); 

请添加图片描述

连通分量的提取

  • 从二值图像中提取连通分量(连通组元)是许多自动图像分析应用的核心

  • 令A表示包含一个或多个连通分量的集合

  • X_0表示一个与包含A的相同大小的阵列,其初始状态如下:

    • 包含每个连通分量中的一个指定位置处的前景像素点
    • 除了上述的前景像素点之外,其余元素均为背景像素点
  • 在给定A和X_0的前提下,提取图像中所有由前景像素所构成的连通分量的过程如下:

    • X k = ( X k − 1 ⨁ B ) ∩ A , k = 1 , 2 , 3 , . . . X_k=(X_{k-1}\bigoplus B)\cap A ,k=1,2,3,... Xk​=(Xk−1​⨁B)∩A,k=1,2,3,...

    • 其中B是对称结构元素
      [ 1 1 1 1 1 1 1 1 1 ] \begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\1 & 1 & 1 \end{bmatrix} ​111​111​111​

  • 在算法执行过程中,如果 X k = X k − 1 ,则算法在迭代的第 k 步结束 在算法执行过程中,如果X_k=X_{k-1},则算法在迭代的第k步结束 在算法执行过程中,如果Xk​=Xk−1​,则算法在迭代的第k步结束

  • 集合 X k 包含原始图像中的所有连通分量 集合X_k包含原始图像中的所有连通分量 集合Xk​包含原始图像中的所有连通分量

请添加图片描述
请添加图片描述
请添加图片描述请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

请添加图片描述

连通分量提取实例(使用连通分量检测包装食品中的外来物)

  • 步骤1,将碎骨从背景中提取出来:对(a)图进行阈值化处理,得到如图(b)所示二值图像,在该图像中保留下来的点聚集为目标〈骨头),而不是彼此孤立的毫无关系的点

  • 步骤2,消除细节,保留大尺寸目标:使用元素为1(白色)大小为5×5的结构元素对(b)图进行腐蚀,得到图©所示的结果图像,在该图像中仅保留了“有效”尺寸的大目标

  • 步骤3,提取连通分量,识别大尺寸目标:使用公式
    X k = ( X k − 1 ⨁ B ) ∩ A X_k=(X_{k-1}\bigoplus B)\cap A Xk​=(Xk−1​⨁B)∩A
    提取©图中的各个连通分量,从中识别对应大尺寸目标的连通分量,如图(d)所示,共有15个连通分量,其中4个尺寸较大(足以确定包含在原图像中的大尺寸目标)

标签:运算,数字图像处理,元素,形态学,图像处理,子集,result,图像,结构
From: https://blog.csdn.net/m0_53694086/article/details/140254718

相关文章

  • 【深度解析】Zxing:开源条形码图像处理库的领航者
                    在数字化浪潮席卷全球的今天,二维码和条形码已经成为我们日常生活中不可或缺的一部分,从超市购物到移动支付,从文档管理到物流追踪,它们无处不在。而在这背后,有一个开源项目默默地支撑着这一切——Zxing,一个强大的条形码图像处理库。     ......
  • 树莓派5 — 官方Raspberry Pi OS — OpenCV图像处理 — 1
    引言一名视觉入门选手,在校生大一,了解OpenCV的皮毛。撰写此文,一是为了分享内容,帮助后来人;二更是为了能吸引大佬能给我提出我在学习上的建议和问题。说明环境:树莓派5  官方操作系统RaspberryPiOS  OpenCV  Python语言  CSI500万摄像头内容:树莓派5安装OpenCV,调......
  • 形态学图像处理
    2.2孔洞填充1工具1.1灰度腐蚀和膨胀当平坦结构元b的原点是(x,y)时,它在(x,y)处对图像f的灰度腐蚀定义为,图像f与b重合区域中的最小值。结构元b在位置(x,y)处对图像f的腐蚀写为:类似地,当b的反射的原点是(x,y)时,平坦结构元b在(x,y)处对图像f的膨胀,定义为图像f与b的反射重......
  • 神经网络图像数据训练集成应用 | 可视化图像处理 | 可视化训练器
    〇、写在前面本应用基于开源UI框架PyDracula进行开发,除去最基本的UI框架外,所有功能的前后端实现都由我个人开发完成,但也有部分UI(如开关控件和进度条)是参考其他大佬的分享。这个应用是我的本科毕业设计,但因为个人能力不足,姑且只能使用Python+PySide6开发。开发这个应用的启发是,......
  • 探索开源世界:常用的条形码图像处理库及其应用
                    在数字时代,条形码作为信息传输的重要媒介,其识别与处理技术显得尤为重要。无论是物流管理、库存控制,还是产品追溯,条形码的准确读取都是实现高效运营的关键。本文将带领大家走进开源软件的世界,探索那些优秀的条形码图像处理库,了解它们的特点、......
  • 2023年天津大学图像工程课程设计 基于 OpenCV 、 Qt 库的图像处理软件+源代码+文档说
    文章目录源码下载地址项目介绍项目功能界面预览项目备注源码下载地址源码下载地址点击这里下载代码项目介绍图像工程课程设计基于OpenCV、Qt库实现的图像处理软件大学编程作业(TUST天津科技大学2023年)图像工程课程设计基于OpenCV、Qt库实现的图像处......
  • 2024年大数据、遥感与图像处理国际会议(BDRSIP 2024)
    2024InternationalConferenceonBigData,RemoteSensing,andImageProcessing【1】大会信息会议简称:BDRSIP 2024大会地点:中国·西安会议官网:www.bdrsip.com投稿邮箱:[email protected] 【2】会议简介2024年大数据、遥感与图像处理国际会议即将召开,本次会......
  • 10.[机器视觉]Halcon形态学膨胀,腐蚀,开运算,闭运算
    膨胀:对边界点进行扩充,填充空洞,使边界向外部扩张的过程。 腐蚀:消除物体边界点,使边界向内部收缩的过程,把小于结构元素的物体去除掉. 开运算:先腐蚀后膨胀的过程称为开运算。作用:去除孤立的小点,毛刺,消除小物体,平滑较大物体边界,同时不改变其面积.闭运算:先膨胀......
  • 数字图像处理之二维傅里叶变换
    二维连续傅里叶变换二维离散傅里叶变换二维离散傅里叶变换的性质frombuiltinsimportprint,intimportcv2importnumpyasnpfrommatplotlibimportpyplotasplt#shape:600*600img=cv2.imread('../pic/Fig0438(a)(bld_600by600).tif'......
  • 上位机图像处理和嵌入式模块部署(h750 mcu和usb虚拟串口)
    【 声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:[email protected]】    对于mcuusb而言,大部分情况下,它和上位机之间的关系都是device的关系。一般usb,可以成成host和device。如果mcu是host,那么意味着它可以主动访问别的usb设备,比如u盘、相机之类的设备。如......