基于matlab的图像处理(九)---形态学图像处理

第九章 形态学图像处理
前言
形态学以此通常是指生物学的一个小分支,它用于处理动物和植物的形状和结构。我们在数学形态学的语境中也使用该词来作为提取图像分量的一种工具,这些分量在表示和描述区域形状(如边界、骨骼和凸壳)时是很有用的。此外,我们还很关注用于预处理和后处理的形态学技术,如形态学滤波、细化和裁剪。
本章的主要内容:
9.1节-----定义集合论运算,介绍二值图像,讨论二值集合和逻辑运算符
9.2节------基本形态学运算,膨胀和腐蚀
9.3节------膨胀和腐蚀的组合运算
9.4节------标明连接部分的技术
9.5节------形态学重构(涉及到两幅图像)
9.6节------使用最大值和最小值代替集合的并集和交集,将形态学的概念扩展到灰度图像

9.1 预备知识
9.1.1集合论中的基本概念
产生数字图像的取样处理可以看作是对一个整数集合Z(xy平面)分隔成网格的处理,其中每个网格的重心坐标是来自笛卡尔乘积(一个整数集的笛卡尔乘积Z是元素(Zi,Zj)的所有序对的集合,Zi和Zj是来自Z的整数。通常用Z²来定义这个集合)Z²中的一对元素。在集合论的术语中,若(x,y)是Z²中的整数,f是为每对不同的坐标(x,y)分配亮度值的映射,则函数f(x,y)成为数字图像,即该二维函数描述的就是一幅数字图像。
基于matlab的图像处理(九)---形态学图像处理_第1张图片
基于matlab的图像处理(九)---形态学图像处理_第2张图片
基于matlab的图像处理(九)---形态学图像处理_第3张图片
基于matlab的图像处理(九)---形态学图像处理_第4张图片
9.1.2二值图像、集合和逻辑运算符
数学形态学的鱼眼和理论经常表现为一幅二值图像的二重视图。正如本书的剩余部分所述,一幅二值图像可以看作是一个二维函数。形态学理论吧二值图像看成是其前景像素的集合(1值),集合的元素属于Z²。集合的运算(例如集合的交集和并集)可以直接应用于二值图像集合。例如,若A和B是二值图像,那么这二者经过集合的运算得到的也是一副二值图像,若A和B中相应的像素是前景像素,则运算后的像素也是前景像素。

基于matlab的图像处理(九)---形态学图像处理_第5张图片
基于matlab的图像处理(九)---形态学图像处理_第6张图片
9.2 膨胀和腐蚀
9.2.1 膨胀
膨胀是在二值图像中“加长”或“变粗”的操作。这种特殊的方式和变粗的程度有一个称为结构元素的集合控制。图9.4说明了膨胀的计算过程。(a)代表包含一个矩形对象的简单二值图像;(b)是一个结构元素。计算时,结构元素通常用0和1 的矩阵表示;有时,为方便起见只显示1。另外,结构元素的远点必须标明(如图中用黑色方框标明的结构元素)。膨胀处理会将结构元素的原点平移过整个图像区域,并且核对哪些地方的与值为1的像素重叠。
基于matlab的图像处理(九)---形态学图像处理_第7张图片
在这里插入图片描述
基于matlab的图像处理(九)---形态学图像处理_第8张图片
IPT函数----imdilate
9.2.2 结构元素的分解
膨胀满足结合律,即
基于matlab的图像处理(九)---形态学图像处理_第9张图片
结合律很重要,因为计算膨胀所需要的时间正比于结构元素中的菲林像素的个数。例如一个5乘5且其元素均为1的结构元素,可以分解为一个值为1的5元素行矩阵和一个值为1的五元素列矩阵这样的两个结构元素。原始结构元素中的个数为25,但在行-列分解中的总元素只有10个,这意味着首先用行结构元素膨胀,在用列结构元素膨胀,能够比5乘5的数组膨胀快2.5倍。但在实际中,速度多少会慢一些,因为每个膨胀运算中总有一些其他的开销。
9.2.3 函数strel
基于matlab的图像处理(九)---形态学图像处理_第10张图片
基于matlab的图像处理(九)---形态学图像处理_第11张图片
9.2.4 腐蚀
腐蚀用来“收缩”或者“细化”二值图像中的对象。像在膨胀中一样,收缩的方式和程度由一个结构元素控制。

在这里插入图片描述
基于matlab的图像处理(九)---形态学图像处理_第12张图片
基于matlab的图像处理(九)---形态学图像处理_第13张图片
基于matlab的图像处理(九)---形态学图像处理_第14张图片
9.3 膨胀与腐蚀的组合
在图像处理的实际应用中,我们更多地是使用各种组合的形式来使用膨胀和腐蚀。一幅图像将使用相同或有时不同的结构元素来进行一系列的膨胀和腐蚀运算。这一节介绍三种最常用的膨胀和腐蚀的组合:开运算,闭运算、击中或击不中变换。我们将介绍查表操作。
9.3.1 开运算和闭运算
基于matlab的图像处理(九)---形态学图像处理_第15张图片
基于matlab的图像处理(九)---形态学图像处理_第16张图片
基于matlab的图像处理(九)---形态学图像处理_第17张图片
基于matlab的图像处理(九)---形态学图像处理_第18张图片
基于matlab的图像处理(九)---形态学图像处理_第19张图片
基于matlab的图像处理(九)---形态学图像处理_第20张图片
9.3.2 击中和击不中变换
通常,能够识别像素的特定形状是很有用的,例如孤立的前景像素或者是线段的端点像素。击中或击不中变换对这类应用十分适用。
在这里插入图片描述

基于matlab的图像处理(九)---形态学图像处理_第21张图片
基于matlab的图像处理(九)---形态学图像处理_第22张图片
基于matlab的图像处理(九)---形态学图像处理_第23张图片
9.3.3 使用查找表
基于matlab的图像处理(九)---形态学图像处理_第24张图片
9.3.4 函数bwmorph
在这里插入图片描述
基于matlab的图像处理(九)---形态学图像处理_第25张图片
骨骼化和细化经常会产生一些无关的短“毛刺”或计生成分。清除这些“毛刺”的过程称为修剪。函数endpoints可以实现这一目的。该方法会识别并删除端点。例如:下面的命令通过执行删除端点的5次迭代,可以实现骨骼化图像fs的后处理:
基于matlab的图像处理(九)---形态学图像处理_第26张图片
9.4 标注链接分量
迄今为止,我们讨论过的概念主要适用于所有前景(或背景)的单个像素以及相邻像素。本节将分析单个前景像素和所有像素集合之间的重要部分。这就引入了链接分量的概念,在下面的讨论中,链接分量也称为对象。
基于matlab的图像处理(九)---形态学图像处理_第27张图片
若在前景像素p和q之间存在一条完全由前景箱数组成的4连接路径,则这两个前景像素称为4连接。若存在一条8连接路径,则称为8连接。对于任一前景像素p,与其相连的所有前景像素的集合称为包含p的链接分量。
基于matlab的图像处理(九)---形态学图像处理_第28张图片
基于matlab的图像处理(九)---形态学图像处理_第29张图片
9.5 形态学重构
重构是一种涉及到两幅图像和一个结构元素的形态学变换。一幅图像(即标记为marker),是变幻的开始点。另一幅图像是掩模(mask),用来约束变换过程。结构元素用于定义连接性。在本节中,我们将使用8链接,这表明如下讨论中的B是一个大小为3乘3且值为1 的矩阵,其中心坐标为(2,2)。

基于matlab的图像处理(九)---形态学图像处理_第30张图片
基于matlab的图像处理(九)---形态学图像处理_第31张图片
9.5.1 由重构做开运算
在形态学开运算中,腐蚀通常会除去较小的对象,而随后的膨胀往往会还原所保留的对象的形状。然而这种还原的精度取决于形状和结构元素之间的相似性。本节所讨论的方法,即由重构做开运算,将准确的恢复腐蚀之后的对象形状。
在这里插入图片描述

基于matlab的图像处理(九)---形态学图像处理_第32张图片
基于matlab的图像处理(九)---形态学图像处理_第33张图片
9.5.2 填充孔洞
形态学重构的应用范围很广,每种应用都取决于标记和掩模图像的选择。例如,假设我们选择了一幅标记图像fm,该图像的边缘部分的值为1-f,其余的部分值为0:

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

9.5.3 清除边界对象
基于matlab的图像处理(九)---形态学图像处理_第34张图片

9.6 灰度图像形态学
除了击中与击不中变换之外,本章所讨论的所有二值形态学运算都可以扩展到灰度图像。与二值图像的情形一样,本节我们将从膨胀和腐蚀开始,对于灰度图像而言,膨胀和腐蚀是以像素邻域的最大值和最小值来定义的。
基于matlab的图像处理(九)---形态学图像处理_第35张图片
基于matlab的图像处理(九)---形态学图像处理_第36张图片

基于matlab的图像处理(九)---形态学图像处理_第37张图片
基于matlab的图像处理(九)---形态学图像处理_第38张图片
基于matlab的图像处理(九)---形态学图像处理_第39张图片
基于matlab的图像处理(九)---形态学图像处理_第40张图片
基于matlab的图像处理(九)---形态学图像处理_第41张图片
基于matlab的图像处理(九)---形态学图像处理_第42张图片
基于matlab的图像处理(九)---形态学图像处理_第43张图片
基于matlab的图像处理(九)---形态学图像处理_第44张图片
基于matlab的图像处理(九)---形态学图像处理_第45张图片
基于matlab的图像处理(九)---形态学图像处理_第46张图片

9.6.3 重构
基于matlab的图像处理(九)---形态学图像处理_第47张图片
在这里插入图片描述

在这里插入图片描述

基于matlab的图像处理(九)---形态学图像处理_第48张图片
基于matlab的图像处理(九)---形态学图像处理_第49张图片基于matlab的图像处理(九)---形态学图像处理_第50张图片基于matlab的图像处理(九)---形态学图像处理_第51张图片基于matlab的图像处理(九)---形态学图像处理_第52张图片
图像的实例:
clc;
clear;
close all
imgFloader=‘C:\Users\liushijie\Desktop\代码\房间图片’;
imgName=‘实验室测试2-4-3.bmp’;
f = imread(fullfile(imgFloader,imgName));
f=f(:,:,1);
figure
subplot(231),imshow(f);title(‘原图像’);

%% 腐蚀
se=strel(‘disk’,10);
f1=imerode(f,se);
subplot(232),imshow(f1);title(‘腐蚀, 半径为10的圆盘’);

se1=strel(‘disk’,5);
f2=imerode(f,se1);

subplot(233),imshow(f2);title(‘腐蚀,半径为5 的圆盘’);

%% 开运算–完全删除了不能包含结构元素的对象区域,平滑了对象的轮廓,断开了狭窄的链接,去掉了细小的突出部分
%% 使用函数imopen(A,B)A是二值图像,B是结构元素
se2=strel(‘square’,3);
f3=imopen(f,se2);

subplot(234),imshow(f3);title(‘原图像开运算’);

%% 闭运算
%% 使用函数imclose
f4=imclose(f,se2);
subplot(235),imshow(f4);title(‘原图像闭运算’);

%% 开闭运算
f5=imclose(f3,se2);
subplot(236),imshow(f5);title(‘原图像先开后闭’);

%% 函数bwmorph的使用
g1=bwmorph(f,‘skel’,1000);%骨骼化
g2=bwmorph(f,‘spur’,100);%去除毛刺
g3=bwmorph(f,‘thin’,1000);%细化
figure
subplot(231),imshow(g1);title(‘骨骼化’);
subplot(232),imshow(g2);title(‘去除毛刺’);
subplot(233),imshow(g3);title(‘细化’);

%% 消除骨骼化和细化产生的毛刺或寄生成分
%%使用函数endpoints
for k=1:5
g1=g1 & ~endpoints(g1);
g2=g2 & ~endpoints(g2);
g3=g3 & ~endpoints(g3);
end

subplot(234),imshow(g1);title(‘消除骨骼化后的毛刺’);
subplot(235),imshow(g2);title(‘消除去除毛刺后毛刺’);
subplot(236),imshow(g3);title(‘消除细化后的毛刺’);

function g=endpoints(f)
persistent lut
if isempty(lut)
lut=makelut(@endpoint_fcn,3);
end
g=applylut(f,lut);

function is_end_point=endpoint_fcn(nhood)
is_end_point=nhood(2,2)& (sum(nhood(?)==2);

你可能感兴趣的:(图像处理,图像处理,分析与机器视觉,图像处理,matlab)