精华内容
下载资源
问答
  • 使用matlab语言,实现灰度图像形态学处理,包括腐蚀、膨胀及顶帽变换操作
  • 昨晚分享了图像形态学处理—开操作和闭操作的基本原理,同时基于Python的OpenCV实现了对应的图像处理,本文分享一下基于Matlab图像形态学处理—开操作和闭操作。 传送门:Python OpenCV 形态学应用—图像开运算与...

    昨晚分享了图像形态学处理—开操作和闭操作的基本原理,同时基于Python的OpenCV实现了对应的图像处理,本文分享一下基于Matlab的图像形态学处理—开操作和闭操作。

    传送门:Python OpenCV 形态学应用—图像开运算与闭运算

    %开启和闭合操作 用 MATLAB实现开启和闭合操作clc;clear;close;%clc清除命令行,clear清除存在内存里的数据,close关闭打开了的文件,I=imread('1.png');         %载入图像subplot(2,2,1),imshow(I);title('原始图像');axis on;                  %显示坐标系I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title('灰度图像');axis on;                  %显示坐标系se=strel('square',6);     %采用半径为6的矩形作为结构元素I2=imopen(I1,se);         %开启操作I3=imclose(I1,se);        %闭合操作subplot(2,2,3),imshow(I2);title('开启运算后图像');axis on;                  %显示坐标系subplot(2,2,4),imshow(I3);title('闭合运算后图像');axis on;                  %显示坐标系

    图片

    %开启和闭合操作 用 MATLAB实现开启和闭合操作clc;clear;close;%clc清除命令行,clear清除存在内存里的数据,close关闭打开了的文件,I=imread('2.png');         %载入图像subplot(2,2,1),imshow(I);title('原始图像');axis on;                  %显示坐标系I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title('灰度图像');axis on;                  %显示坐标系se=strel('square',4);     %采用半径为4的矩形作为结构元素I2=imopen(I1,se);         %开启操作I3=imclose(I1,se);        %闭合操作subplot(2,2,3),imshow(I2);title('开启运算后图像');axis on;                  %显示坐标系subplot(2,2,4),imshow(I3);title('闭合运算后图像');axis on;                  %显示坐标系
    

     

    图片

    展开全文
  • 该程序对二值图像执行形态学操作MATLAB 输入图像... 请注意,如果您输入的是灰度或 RGB 图像(不是二进制), 它将通过阈值转换为二进制图像图像或其副本保存在 MATLAB 工作目录中输入图像文件的名称(filename...
  • 眼底图像形态学操作MATLAB代码
  • 本代码由MATLAB语言编写,通过形态学方法,即腐蚀和膨胀进行图像内部的噪声处理,实现去噪效果,内附有处理过程和处理结果
  • matlab基于形态学的权重自适应图像去噪
  • 图像提取形态学实战之对图片的腐蚀区域提取显示源码展示MATLAB的源程序打包,图片以及输入输出。
  • 该代码演示了阈值图像或二进制图像上的形态图像处理操作
  • 形态学滤波matlab程序

    2018-03-20 17:21:23
    自己写的matlab形态学滤波function函数,方便调用,且实用
  • 基于形态学滤波去噪matlab代码
  • matlab开发-灰度图像形态学运算。灰度图像的放大、腐蚀、打开和关闭
  • [MATLAB] 常用形态学操作函数

    千次阅读 2018-04-14 20:41:15
    腐蚀和膨胀是数学形态学上的名词,如果用于图像处理上则就称为图像二值形态学形态学主要是为了获取物体的拓扑和结构信息,通过物体和结构元素相互作用的某些运算,得到物体更本质的形态。当形态学运用到图像处理中...

    腐蚀和膨胀是数学形态学上的名词,如果用于图像处理上则就称为图像二值形态学。

    形态学主要是为了获取物体的拓扑和结构信息,通过物体和结构元素相互作用的某些运算,得到物体更本质的形态。当形态学运用到图像处理中,它的主要作用是利用形态学的基本运算,如腐蚀和膨胀运算,对图像进行观察和处理,从而达到改善图像质量的目地;描述和定义图像的各种几何参数和特征。

    二值图像的腐蚀和膨胀操作具体如下

    腐蚀的具体操作:用一个结构元素(也可以说成操作数矩阵)一般为3×3大小的,也可以看成一个卷积模板它们的区别就在于卷积模板是以算术运算为基础的,而结构元素是以集合运算为基础的,扫描图像中的每一个像素(关于图像边缘的处理见下面详细分析),用操作数矩阵扫描图像中的每一个像素,操作数矩阵中每一个像素与覆盖的像素做操作,如果全部为1,则图像中的该像素为1,反之为0

    而膨胀操作正好相反,全部为0时,则图像素中的该像素为0,反之为1

    腐蚀的作用是消除物体的边界点,使目标缩小,这个根据操作的过程可以显然的想到,物体的边界处像素值肯定是有01,腐蚀操作后这些紧邻着为1的像素点都会变成0,所以腐蚀操作会消除那些小的且无意义的物体,使边界向内部收缩的过程。

    相反,膨胀的作用当然是使目标增大,填充物体内细小的空洞,并且平滑物体的边界,边界向外部扩张的作用。

    开运算是先腐蚀后膨胀的过程,可以消除图像上细小的噪声,并平滑物体的边界使对象的轮廓变得光滑,断开狭窄的间断和消除细的突出物

    imopen函数:该函数功能是对灰度图像执行形态学开运算,即使用同样的结构元素先对图像进行腐蚀操作后进行膨胀操作。调用格式为:

    IM2=imopen(IM,SE)

    IM2=imopen(IM,NHOOD)

     

    闭运算是先膨胀后腐蚀的过程,可以填充物体内细小的空洞,并平滑物体边界,可使轮廓线更光滑,但与开操作相反的是,闭操作通常消弥狭窄的间断和长细的鸿沟,消除小的空洞,并填补轮廓线中的断裂

    imclose函数:该函数功能是对灰度图像执行形态学闭运算,即使用同样的结构元素先对图像进行膨胀操作后进行腐蚀操作。调用格式为:

    IM2=imclose(IM,SE)

    IM2=imclose(IM,NHOOD)

     

    通常,由于噪声的影响,图象在阈值化后所得到边界往往是很不平滑的,物体区域具有一些噪声孔,背景区域上散布着一些小的噪声物体。连续的开和闭运算可以有效地改善这种情况。有时需要经过多次腐蚀之后再加上相同次数的膨胀,才可以产生比较好的效果。

    腐蚀操作会去掉物体的边缘点,细小物体所有的点都会被认为是边缘点,因此会整个被删去。再做膨胀时,留下来的大物体会变回原来的大小,而被删除的小物体则永远消失了。

    腐蚀操作: 腐蚀就是使用算法,将图像的边缘腐蚀掉。作用就是将目标的边缘的“毛刺”剔除掉。

    erode 函数:该函数能够实现二值图像的腐蚀操作,有以下形式:

    BW2= erode(BW1,SE)

    BW2= erode(BW1,SE,…,n)

    其中:BW2= erode(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行腐蚀操作。输入图像BW1的类型为double或unit8,输出图像BW2的类型为unit8。BW2= erode(BW1,SE,…,n)表示执行腐蚀操作n次。

     

    膨胀操作会使物体的边界向外扩张,如果物体内部存在小空洞的话,经过膨胀操作这些洞将被补上,因而不再是边界了。再进行腐蚀操作时,外部边界将变回原来的样子,而这些内部空洞则永远消失了。

    膨胀操作膨胀就是使用算法,将图像的边缘扩大些。作用就是将目标的边缘或者是内部的坑填掉。

    dilate函数该函数能够实现二值图像的膨胀操作,有以下形式:

    BW2=dilate(BW1SE)

    BW2=dilate(BW1SEn)

    其中:BW2=dilate(BW1SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行膨胀操作。输入图像BW1的类型为doubleunit8,输出图像BW2的类型为unit8BW2=dilate(BW1SEn)表示执行膨胀操作n次。

    注:结构元素在扫描图像中的每个像素时,结构元素的邻域有部分会在图像外面。比如当结构元素扫描图像上方第一行像素值(这里默认结构元素为3×3),结构元素会有部分在图像的外面,此时,为了有效处理边界像素,进行形态学运算的函数通常都会给出超出图像、未指定数值的像素指定一个数值,这样就类似于函数给图像填充了额外的行和列。对于膨胀和腐蚀操作,它们对像素进行填充的值是不同的。规则如下:

    腐蚀和膨胀填充图像规则表

     

     通过对膨胀操作使用最小值填充和对腐蚀操作使用最大值填充,可以有效地消除边界效应(输出图像靠近边界处的区域与图像其它部分不连续)。否则,如果腐蚀操作使用最小值进行填充,则进行腐蚀操作后,输出图像会围绕着一个黑色边框。(此处根据腐蚀和膨胀的具体操作过程应该不难理解,因为当图像边缘都是白色时也就是像素值全为1,此时如果图像边缘外面的像素值填充为最小值,如果二值图像的话则像素值为0,根据腐蚀操作,相与后肯定为0,这时图像边缘处便会成为黑色)

    结构元素:膨胀和腐蚀操作的最基本组成部分,用于测试输出图像,通常要比待处理的图像小的多。二维平面结构元素由一个数值为01的矩阵组成。结构元素的原点指定了图像中需要处理的像素范围,结构元素中数值为1的点决定结构元素的邻域像素在进行膨胀或腐蚀操作时是否需要参与计算。三维或非平面的结构元素使用01定义结构元素在xy平面上的范围,第三维z定义高度。

    关于图像腐蚀和膨胀的实现:

    matlabopenCV都可以实现

    matlab语言中自带了关于腐蚀和膨胀的函数,如果想要看实现效果,则可以直接调用,imerode(输入图像,结构元素)imdilate(输入图像,结构元素),结构元素对象可以是strel函数返回的对象,也可以是一个自己定义的表示结构元素邻域的二进制矩阵。


    常用形态学操作函数

    可以使用imdilate函数进行图像膨胀,imdilate函数需要两个基本输入参数,即待处理的输入图像和结构元素对象。结构元素对象可以是strel函数返回的对象,也可以是一个自己定义的表示结构元素邻域的二进制矩阵。此外,imdilate还可以接受两个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。举个实例如下:

    步骤1,首先创建一个包含矩形对象的二值图像矩阵。

    >> BW=zeros(9,10);

    >> BW(4:6,4:7) =1

    BW =

    0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 
    0 0 0 1 1 1 1 0 0 0 
    0 0 0 1 1 1 1 0 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 
    0 0 0 0 0 0 0 0 0 0

    步骤2,使用一个3×3的正方形结构元素对象对创建的图像进行膨胀。

    >> SE=strel('square',3)

    SE = 
    Flat STREL object containing 9 neighbors.

    Neighborhood: 
    1 1 1 
    1 1 1 
    1 1 1

    步骤3,将图像BW和结构元素SE传递给imdilate函数。

    >> BW2=imdilate(BW,SE)

    BW2 =

    0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 
    0 0 1 1 1 1 1 1 0 0 
    0 0 1 1 1 1 1 1 0 0 
    0 0 1 1 1 1 1 1 0 0 
    0 0 1 1 1 1 1 1 0 0 
    0 0 1 1 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

    步骤4,显示结果。

    >> imshow(BW,'notruesize')

    >> imshow(BW2,'notruesize')

     

    可以使用imerode函数进行图像腐蚀。imerode函数需要两个基本输入参数:待处理的输入图像以及结构元素对象。此外,imerode函数还可以接受3个可选参数:PADOPT(padopt) ——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)M——指定原始图像的行数。

    以下程序示例说明了如何对某一副具体图像进行腐蚀操作,腐蚀前后的效果对比如图末。

    步骤1,读取图像cameraman.tif (该图像是Matlab当前目录下自带的图片)

    >> BW1=imread('cameraman.tif');

    步骤2,创建一个任意形状的结构元素对象

    >> SE=strel('arbitrary',eye(5));

    步骤3,以图像BW1和结构元素SE为参数调用imerode函数进行腐蚀操作。

    >> BW2=imerode(BW1,SE);

    步骤4,显示操作结果

    >> imshow(BW1) 
    >> figure,imshow(BW2)

     

    bwmorph函数

    该函数的功能是: 对二值图像进行数学形态学(Mathematical Morphology)运算。

    语法格式: (1) BW2 = bwmorph(BW,operation) 对二值图像进行指定的形态学处理。

    (2)BW2 = bwmorph(BW,operation,n) 对二值图像进行n次指定的形态学处理。

    其中:对于格式①,bwmorph函数可对二值图像BW1采用指定的形态学运算;对于格式②,bwmorph函数可对二值图像BW1采用指定的形态学运算n次。n可以是Inf(无穷大),这意味着将一直对该图像做同样的形态学处理直到图像不再发生变化。operation是一个字符串, 用于指定进行的形态学处理类型。

    operation可以为以下值:

    ‘clean’:去除图像中孤立的亮点,比如, 一个像素点, 像素值为1, 其周围像素的像素值全为0, 则这个孤立的亮点将被去除;

    ‘close’:进行形态学闭运算(即先膨胀后腐蚀);

    ‘dilate’:使用结构元素ones(3)对图像进行膨胀运算;

    ‘erode’:使用结构元素ones(3)对图像进行腐蚀运算;

    'bothat':进行“bottom hat”形态学运算,即返回闭运算减去源图像的图像;

    'branchpoints':找到骨架中的分支点;

    'bridge':进行像素连接操作;

    'diag': 采用对角线填充, 去除八邻域的背景;

    'endpoints':找到骨架中的结束点;

    'fill':填充孤立的黑点, 比如3*3的矩阵, 除了中间元素为0外, 其余元素全部为1, 则这个0将被填充为1;

    'hbreak':断开图像中的H型连接;

    'majority':如果一个像素的8邻域中有等于或超过5个像素点的像素值为1, 则将该点像素值置1;

    'open':进行形态学开运算(即先腐蚀后膨胀);

    'remove':如果一个像素点的4邻域都为1, 则该像素点将被置0;该选项将导致边界像素上的1被保留下来;

    'skel':在这里n = Inf,骨架提取但保持图像中物体不发生断裂;不改变图像欧拉数;

    'spur':去除小的分支, 或引用电学术语“毛刺”;

    'thicken':在这里n = Inf, 通过在边界上添加像素达到加粗物体轮廓的目的;

    'thin':在这里n = Inf,进行细化操作;

    'tophat':进行“top hat”形态学运算, 返回源图像减去开运算的图像。

     

     

     

    基于膨胀与腐蚀的形态操作——骨架化和边缘检测

    1)骨架化:

    某些应用中,针对一副图像,希望对图像中所有对象简化为线条,但不修改图像的基本结构,保留图像基本轮廓,这个过程就是所谓的骨架化。提供了专门的函数bwmorph,可以实现骨架化操作。

    >> clear;close all 
    >> BW1=imread('circbw.tif'); 
    >> BW2=bwmorph(BW1,'skel',Inf); 
    >> imshow(BW1) 
    >> figure,imshow(BW2)

    2)边缘检测

    对于一副灰度二进制图像,如果图像像素值为1,则该像素的状态为ON,如果其像素值为0,则该像素的状态为OFF。在一副图像中,如果图像某个像素满足以下两个条件:

    1.该像素状态为ON,

    2.该像素邻域中有一个或多个像素状态为OFF

    则认为该像素为边缘像素。

    Matlab中提供了专门的函数bwperim,可以用于判断一副二进制图像中的哪些像素为边缘像素。

    以下程序代码示例就是利用bwperim函数,对图像circbw.tif进行边缘检测,其边缘像素检测效果如尾图。

    >> clear;close all 
    >> BW1=imread('circbw.tif'); 
    >> BW2=bwperim(BW1); 
    >> imshow(BW1) 
    >> figure,imshow(BW2)

     

    基于腐蚀和膨胀的形态操作函数如下:

    bwhitmiss 图像逻辑""操作,该函数使用一个结构元素对图像进行腐蚀操作后,再使用第二个结构元素对图像进行腐蚀操作

    imbothat 从原始图像中减去经过形态关闭后的图像,该函数可用来寻找图像中的灰度槽

    imtophat 从原始图像中减去形态开启后的图像,可以用来增强图像的对比度

     


    展开全文
  • 本资源包含基于Matlab形态学图像处理视频、配套源码和图片素材分享: 例12-1 创建结构元素 例12-2 创建图像并进行矩形腐蚀操作 例12-3 创建图像并进行矩形膨胀操作 例12-4 对二值图像进行线性膨胀操作 例12-5 对...
  • Matlab形态学处理

    2015-04-30 10:14:08
    Word文档(Matlab程序代码及其处理效果)和Matlab程序处理图片,设计Matlab常用的形态学操作,包括膨胀、腐蚀、开运算、闭运算、击中击不中变换等。详见博文:...
  • 本章详细的介绍利用MATLAB软件进行形态学图像处理,主要内容包括基本运算、组合形态学运算以及二值图像的其他形态学运算等内容。 12.1 基本的形态学运算 数学形态学可以看作是一种特殊的数字图像处理方法和理论,...

    本例程配套完整视频、源码和素材图片下载

    视频在线观看请点击

    第12章  形态学图像处理

          12.1  基本的形态学运算

                 例12-1 创建结构元素

                 例12-2 创建图像并进行矩形腐蚀操作

                 例12-3 创建图像并进行矩形膨胀操作

                 例12-4 对二值图像进行线性膨胀操作

                 例12-5 对灰度图像进行球性膨胀操作

                 例12-6 对二值图像进行盘状腐蚀操作

                 例12-7 对二值图像进行腐蚀和膨胀操作

                 例12-8 对灰度图像进行开运算

                 例12-9 对灰度图像进行闭运算

          12.2  组合形态学运算

                 例12-10 对灰度图像进行形态学高帽滤波

                 例12-11 通过高帽滤波和低帽滤波增强图像对比度

                 例12-12 对二值图像进行填充操作

                 例12-13 对灰度图像进行填充操作

                 例12-14 创建图像并获取所有数据局部最大值

                 例12-15 获取创建图像中设定阈值的局部极大值(1)

                 例12-15 获取灰度图像中设定阈值的局部极大值(2)

                 例12-16 创建图像通过imhmax()对极大值进行抑制

                 例12-17 通过膨胀腐蚀获取灰度图像边缘

                 例12-18 获取二值图像的边缘

                 例12-19 二值图像的细化

                 例12-20 二值图像的骨架化

                 例12-21 移除二值图像的内部像素点

          12.3  二值图像的其他形态学操作

                 例12-22 对二值图像进行极限腐蚀

                 例12-23 建立表格和查表操作

                 例12-24 二值图像的标记

                 例12-25 通过函数label2rgb()显示标记矩阵

                 例12-26 通过函数bwselect()进行对象选择

                 例12-27 通过函数bwarea()计算二值图像的面积

                 例12-28 通过函数bweuler()计算二值图像的欧拉数

          12.4  本章小结

     

     

    第12章  形态学图像处理

    形态学是一种应用于图像处理模式识别领域的新的方法,是一门建立在严格的数学理论基础上而又密切联系实际的科学。由于形态学具有完备的数学基础,这为形态学用于图像分析和处理等奠定了坚实的基础。本章详细的介绍利用MATLAB软件进行形态学图像处理,主要内容包括基本运算组合形态学运算以及二值图像的其他形态学运算等内容。

    12.1  基本的形态学运算

    数学形态学可以看作是一种特殊的数字图像处理方法和理论,主要以图象的形态特征为研究对象。它通过设计一整套运算概念算法,用以描述图象的基本特征。这些数学工具不同于常用的频域或空域算法,而是建立在微分几何以及随机集论的基础之上的。数学形态学作为一种用于数字图象处理和识别的新理论和新方法,它的理论虽然很复杂,但它的基本思想却是简单而完美的。         

    数学形态学方法比其他空域或频域图像处理和分析方法具有一些明显的优势。例如,基于数学形态学的边缘信息提取处理优于基于微分运算的边缘提取算法它不像微分算法对噪声那样敏感,提取的边缘比较光滑;利用数学形态学方法提取的图像骨架也比较连续,断点少等;数学形态学易于用并行处理方法有效的实现,而且硬件实现容易

    12.1.1  基本概念

    集合论是数学形态学的基础,首先对集合论的一些基本概念做一个简单介绍。腐蚀运算膨胀运算是数学形态学的两个基本变换。参加运算的对象有两个:图像A(感兴趣目标)和结构集合BB称为结构元素。结构元素通常是个圆盘,但它其实可以是任何形状。

       

       

    12.1.2  结构元素

    结构元素膨胀和腐蚀的最基本组成部分用于测试输入图像二维结构元素是由数值01组成的矩阵结构元素原点指定了图像中需要处理的像素范围,结构元素中数值为1的点决定结构元素的领域像素在进行膨胀或腐蚀操作时是否参与计算

    在MATLAB软件中,结构元素定义为一个STREL对象。如果nhood结构元素定义的领域,则任意大小和维数的结构元素的原点坐标为:origin=floor((size(nhood)+1)/2)。在MATLAB软件中,采用函数strel( )创建任意大小和形状的STREL对象。函数strel( )支持常用的形状,例如线型(line矩形(rectangle方形(square球形(ball钻石型(diamond自定义的任意型(arbitrary等。

    例12-1 创建结构元素

    clear all; close all; clc;%关闭所有窗口,清空变量,命令行
    se1=strel('square', 3)%矩形结构元素
    se2=strel('line', 10, 45)%线形结构元素,角度为45度

     

    注:se1包含9个邻居(neighbors),se2包含7个邻居(neighbors),值为1的才为邻居

    12.1.3  膨胀与腐蚀

    膨胀将与物体接触的所有背景点合并到该物体中使边界向外部扩张的过程通过膨胀,可以填充图像中的小孔,及在图像边缘处的小凹陷部分。结构元素B对图像A的膨胀,记作,定义为:

                                                                     

    腐蚀和膨胀是对偶操作。腐蚀是一种消除边界点使边界向内部收缩的过程。利用腐蚀操作,可以消除小且无意义的物体。集合A被结构元素B腐蚀,记作,定义为:

                                                                          

    腐蚀的原理

    二值图像前景物体为1,背景为0。假设原图像中有一个前景物体,那么我们用一个结构元素去腐蚀原图的过程是这样的:遍历原图像的每一个像素,然后用结构元素的中心点对准当前正在遍历的这个像素,然后取当前结构元素所覆盖下的原图对应区域内的所有像素的最小值,用这个最小值替换当前像素值。由于二值图像最小值就是0,所以就是用0替换,即变成了黑色背景。从而也可以看出,如果当前结构元素覆盖下,全部都是背景,那么就不会对原图做出改动,因为都是0。如果全部都是前景像素,也不会对原图做出改动,因为都是1。只有结构元素位于前景物体边缘的时候,它覆盖的区域内才会出现0和1两种不同的像素值,这个时候把当前像素替换成0就有变化了。因此腐蚀看起来的效果就是让前景物体缩小了一圈一样。对于前景物体中一些细小的连接处,如果结构元素大小相等,这些连接处就会被断开。

    膨胀的原理

    二值图像前景物体为1,背景为0。假设原图像中有一个前景物体,那么我们用一个结构元素去膨胀原图的过程是这样的:遍历原图像的每一个像素,然后用结构元素的中心点对准当前正在遍历的这个像素,然后取当前结构元素所覆盖下的原图对应区域内的所有像素的最大值,用这个最大值替换当前像素值。由于二值图像最大值就是1,所以就是用1替换,即变成了白色前景物体。从而也可以看出,如果当前结构元素覆盖下,全部都是背景,那么就不会对原图做出改动,因为都是0.如果全部都是前景像素,也不会对原图做出改动,因为都是1。只有结构元素位于前景物体边缘的时候,它覆盖的区域内才会出现0和1两种不同的像素值,这个时候把当前像素替换成1就有变化了。因此膨胀看起来的效果就是让前景物体胀大了一圈一样。对于前景物体中一些细小的断裂处,如果结构元素大小相等,这些断裂的地方就会被连接起来。

    例12-2 创建图像并进行矩形腐蚀操作

    clear all; close all;%关闭所有窗口,清空变量,命令行
    bw=zeros(9,9);%创立一个值都为0的9*9的二值图像
    bw(2:6, 3:7)=1%2-6行,3-7列的元素赋值为1
    se=strel('square', 5)%创立5*5的矩形结构元素
    bw2=imerode(bw, se)%图像bw进行腐蚀操作
    figure;
    subplot(121);  imshow(bw);%显示原图
    title('输入原图像');
    subplot(122);  imshow(bw2);%显示腐蚀后的图像
    title('腐蚀后图像');

          

          

    相当于输入图像每个像素进行遍历,以当前像素为中心构成输入图像的5*5的矩阵,在此矩阵内的最小值即为新的当前位置像素值。

    例12-3 创建图像并进行矩形膨胀操作

    clear all; close all;%关闭所有窗口,清空变量,命令行
    bw=zeros(9,9);%创立一个值都为0的9*9的二值图像
    bw(3:5, 4:6)=1%3-5行,4-6列的元素赋值为1
    se=strel('square', 3)%创立3*3的矩形结构元素
    bw2=imdilate(bw, se)%图像bw进行膨胀操作
    figure;
    subplot(121);  imshow(bw);%显示原图
    title('输入原图像');
    subplot(122);  imshow(bw2);%显示膨胀后的图像
    title('膨胀后图像');

                                    

                  

    相当于输入图像每个像素进行遍历,以当前像素为中心构成输入图像的3*3的矩阵,在此矩阵内的最大值即为新的当前位置像素值。

    例12-4 对二值图像进行线性膨胀操作

    clear all; close all;%关闭所有窗口,清空变量,命令行
    bw=imread('text.png');%读取一张二值图像
    se=strel('line', 11, 90);%%创建一个线形结构元素,角度为90度
    bw2=imdilate(bw, se);%对图像bw进行膨胀操作
    figure;
    subplot(121);  imshow(bw);%显示原图
    title('输入原图像');
    subplot(122);  imshow(bw2);%显示膨胀后的图像
    title('膨胀后图像');

       

    相当于输入图像每个像素进行遍历,以当前像素为中心构成输入图像的11*1的矩阵,在此矩阵内的最大值即为新的当前位置像素值。,所以看起来只是上下被拉长了。

    例12-5 对灰度图像进行球性膨胀操作

    clear all; close all;%关闭所有窗口,清空变量,命令行
    bw=imread('cameraman.tif');%读取一张灰度图像
    se=strel('ball', 5, 5);%创建一个球形结构元素
    bw2=imdilate(bw, se);%对图像bw进行膨胀操作
    figure;
    subplot(121);  imshow(bw);%显示原图
    title('输入原图像');
    subplot(122);  imshow(bw2);%显示膨胀后的图像
    title('膨胀后图像');

       

    例12-6 对二值图像进行盘状腐蚀操作

    clear all; close all;%关闭所有窗口,清空变量
    bw=imread('circles.png');%读取一张二值图像
    se=strel('disk', 11)%创建一个盘状结构元素
    bw2=imerode(bw, se);%对图像bw进行腐蚀操作
    figure;
    subplot(121);  imshow(bw);%显示原图
    title('输入原图像');
    subplot(122);  imshow(bw2);%显示膨胀后的图像
    title('腐蚀后图像');
    

        

    例12-7 对二值图像进行腐蚀和膨胀操作

    clear all; close all;%关闭所有窗口,清空变量
    se=strel('rectangle', [40, 30]);%%创建一个40*30的矩形结构元素,值都为1
    bw1=imread('circbw.tif');%读取一张二值图像
    bw2=imerode(bw1, se);%对图像bw1进行腐蚀操作
    bw3=imdilate(bw2, se);%对图像bw2进行膨胀操作
    figure;
    subplot(131);  imshow(bw1);
    title('输入原图像');
    subplot(132);  imshow(bw2);
    title('腐蚀后图像');
    subplot(133);  imshow(bw3);
    title('膨胀后图像');

       

    可见,由于选取的是一个比较大的矩阵结构元素,所以在进行腐蚀操作时,便可以将宽度和厚度都小于结构元素的区域都滤去,剩下的再通过相同结构元素膨胀操作后便可以恢复到原图像一样大小,以此提取原图像中较大形状的区域图像(但是这样操作得到的膨胀后的图像的边缘都是矩形的,所以会丢失原图像边缘的一些细节

    12.1.4  开运算和闭运算

    结构元素BA的开运算,定义为:

    即首先采用结构元素对A腐蚀运算然后再做膨胀运算,使用相同的结构元素。闭运算是开运算的对偶运算,

    定义为:

    即首先用结构元素BA做膨胀运算然后再做腐蚀运算,使用相同的结构元素。

    例12-8 对灰度图像进行开运算

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('snowflakes.png');%读取一张灰度图像
    se=strel('disk', 5);%建立一个盘状结构元素
    J=imopen(I, se);%对图像I进行开运算
    figure;
    subplot(121);  imshow(I);%显示原图
    title('输入原图像');
    subplot(122);  imshow(J, []);%显示开运算后的图像
    title('开运算后图像');

    可见,通过开运算先腐蚀,后膨胀去除了原图像中一些比较小的点

    例12-9 对灰度图像进行闭运算

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('circles.png');%读取一张二值图像
    se=strel('disk', 10);%建立一个半径为10的盘状结构元素
    J=imclose(I, se);%对图像I进行闭运算
    figure;
    subplot(121);  imshow(I);%显示原图
    title('输入原图像');
    subplot(122);  imshow(J, []);%显示闭运算后的图像
    title('闭运算后图像');

    可见,通过闭运算先膨胀,后腐蚀,可以将图像中的多个圆变为一个整体

    12.2  组合形态学运算

    图像的膨胀和腐蚀是最基本的形态学运算。下面介绍组合形态学运算,主要内容包括高帽滤波低帽滤波边界提取区域填充

    12.2.1  高帽滤波和低帽滤波

    图像的形态学高帽滤波(top-hat filtering)定义为:

    其中为A输入的图像,B为采用的结构元素,即从图像中减去形态学开操作后的图像。通过高帽滤波可以增强图像的对比度

    图像的形态学低帽滤波(bottom-hat filtering)定义为:

    其中为A输入的图像,B为采用的结构元素,即从图像中减去形态学闭操作后的图像。通过低帽滤波可以获取图像的边缘

    例12-10 对灰度图像进行形态学高帽滤波

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('rice.png');%读取一张灰度图像
    se=strel('disk', 11);%建立一个半径为11的盘状结构元素
    J=imtophat(I, se);%对图像I进行高帽滤波
    K=imadjust(J);%对图像J进行灰度变换增强对比度
    figure;
    subplot(131);  imshow(I);%显示原图
    title('输入原图像');
    subplot(132);  imshow(J);%显示高帽滤波后的图像
    title('高帽滤波后图像');
    subplot(133);  imshow(K);%显示灰度变换后的图像
    title('图像增强后图像');

    可见,高帽滤波后的图像改变了图像的背景灰度变换图像的对比度增强了图像变得更加清晰

    例12-11 通过高帽滤波和低帽滤波增强图像对比度

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('pout.tif');%读取一张灰度图像
    se=strel('disk', 3);%建立一个半径为3的盘状结构元素
    J=imtophat(I, se);%对图像I进行高帽滤波得到J
    K=imbothat(I, se);%对图像I进行低帽滤波得到K
    L=imsubtract(imadd(I, J), K);%I与K图像先进行相加,然后相减操作
    figure;
    subplot(141);  imshow(I);%显示原图
    title('输入原图像');
    subplot(142);  imshow(J);%高帽滤波
    title('高帽滤波后图像');
    subplot(143);  imshow(K);%低帽滤波
    title('低帽滤波后图像');
    subplot(144);  imshow(L);%显示增强图像L
    title('增强后图像');

    可见,通过形态学处理后,增强了图像的对比度(最左I和最右L对比)

    12.2.2  图像填充操作

    MATLAB软件中,采用函数imfill( )二值图像或灰度图像进行填充操作。函数imfill( )的调用格式为:

    BW2=imfill(BW)该函数对二值图像BW进行填充操作,对于二维图像允许用户通过鼠标选择填充的点。通过键盘上面的

    Backspace键或Delete键可以取消当前选择的点,通过键盘上的Return键可以结束交互式的选择。

    [BW2, locations]=imfill(BW)该函数中返回值locations包含了交互式选择时的点的坐标。

    BW2=imfill(BW, locations)该函数中通过参数locations指定了进行填充时的点的坐标。

    BW2=imfill(BW, holes)该函数通过参数holes可以填充二值图像中的空洞。

    I2=imfill(I) 该函数对灰度图像进行填充操作,返回值 I2 也是灰度图像。

    例12-12 对二值图像进行填充操作

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('coins.png');%读取一张灰度图像
    J=im2bw(I);%将图像I转换为二值图像J
    K=imfill(J, 'holes');%对二值图像J进行填充
    figure;
    subplot(121);  imshow(J);%显示二值图像J
    title('二值图像');
    subplot(122);  imshow(K);%显示填充后图像K
    title('填充后图像');

    可见,二值图像进行填充后,内部的空洞都被填充好了。

    例12-13 对灰度图像进行填充操作

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('tire.tif');%读取一张灰度图像
    J=imfill(I, 'holes');%对灰度图像I进行填充
    figure;
    subplot(121);  imshow(I);%显示原图像
    title('原图像');
    subplot(122);  imshow(J);%显示填充后后图像
    title('填充后图像');

    12.2.3  最大值和最小值

    对于一幅图像可以有多个局部极大值或极小值但只有一个最大值或最小值。在MATLAB软件中,采用函数imregionalmax( )获取图像的所有局部极大值,采用函数imregionalmin( )获取局部极小值。函数imregionalmax ( )的调用格式为:

    BW=imregionalmax(I)该函数获取灰度图像I的局部极大值,返回值BW为和原图像大小相同的二值图像,BW中元素1对应的是极大值,其它元素值为0

    BW=imregionalmax(I, conn)该函数中参数conn为连通类型。对于二维图像conn可以取值为48,默认值为8。对于三维图像,conn可取值为61826,默认值为26

     例12-14 创建图像并获取所有数据局部最大值

    clear all; close all; clc;%关闭所有窗口,清空变量,命令行
    I=10*ones(6, 10);%创建一个6*10的,值都为10的矩阵
    I(3:4, 3:4)=13;%矩阵的3-4行,3-4列对应的数都赋值为13
    I(4:5, 7:8)=18;%矩阵的4-5行,7-8列对应的数都赋值为18
    I(2,8)=15%矩阵第2行,第八列对应的数赋值为15
    bw=imregionalmax(I)%获取局部最大值

    在程序中,建立了矩阵,通过 imregionalmax() 函数获取了矩阵内所有的局部极大值,返回值为二值图像,局部极大值对应的元素为1,其它元素对应为0

     例12-15 获取创建图像中设定阈值的局部极大值(1)

    clear all; close all; clc;%关闭所有窗口,清空变量,命令行
    I=10*ones(6, 10);%创建一个6*10的,值都为10的矩阵
    I(3:4, 3:4)=13;%矩阵的3-4行,3-4列对应的数都赋值为13
    I(4:5, 7:8)=18;%矩阵的4-5行,7-8列对应的数都赋值为18
    I(2,8)=15%矩阵第2行,第八列对应的数赋值为15
    bw=imextendedmax(I, 3)%[输入像素值-周围值(10)]>3(设定阈值)时,二值图像中此处为1

    J = imextendedmax(I,3),可以看出只有18(15)-10=8(5)> 3,所以返回的二值图像中值为1。[imextendedmin函数用法和imextendedmax用法类似]

     例12-15 获取灰度图像中设定阈值的局部极大值(2)

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('glass.png');%读取一张灰度图像
    %带阈值的局部极大值(即指定阈值为80的局部最大值求取)
    J=imextendedmax(I, 150);
    figure;
    subplot(121);  imshow(I);%显示原图像
    title('原图像');
    subplot(122);  imshow(J);%显示极大值结果图像
    title('带阈值局部极大值结果图像');
    

    在程序中,首先读入一张灰度图像,然后获取图像的局部极大值,阈值为80,运行后,左图为灰度图像,右图为获取的局部极大值组成的二值图像(即二值图像中白色区域(值为1)的原图像素值比其周围像素值都大于80以上

    阈值设定为150时:

     例12-16 创建图像通过imhmax()对极大值进行抑制

    clear all; close all; clc;%关闭所有窗口,清空变量,命令行
    I=2*ones(5, 10);%创建一个5*10的,值都为2的矩阵
    I(2:4, 2:4)=3;%矩阵的2-4行,2-4列对应的数都赋值为3
    I(4:5, 6:7)=9;%矩阵的4-5行,6-7列对应的数都赋值为9
    I(2,8)=5%矩阵第2行,第8列对应的数赋值为5
    J=imregionalmax(I)%获取I中所有极大值
    K=imhmax(I, 4)%对极大值进行抑制

    12.2.4  图像的边界测定

    对于灰度图像可以通过形态学的膨胀和腐蚀来获取图像的边缘。通过形态学获取灰度图像的边缘的优点对边缘的方向性依赖比较小。下面通过例子程序进行说明。

     例12-17 通过膨胀腐蚀获取灰度图像边缘

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('rice.png');%读取一张灰度图像
    se=strel('disk', 2);%%建立一个半径为2的盘状结构元素
    J=imdilate(I, se);%膨胀操作
    K=imerode(I, se);%腐蚀操作
    L=J-K;%相减
    figure;
    subplot(121);  imshow(I);%显示原图像
    title('原图像');
    subplot(122);  imshow(L);%显示边缘结果图像
    title('边缘结果图像');

     例12-18 获取二值图像的边缘

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('circbw.tif');%读取一张二值图像
    J=bwperim(I, 8);%获取边缘
    figure;
    subplot(121);  imshow(I);%显示原图像
    title('原图像');
    subplot(122);  imshow(J);%显示边缘结果图像
    title('二值图像边缘');

     

    12.2.5  二值图像的形态学操作

    MATLAB软件中,通过函数bwmorph( )可以进行二值图像的大量形态学操作,例如图像的骨骼化图像的细化,以及开操作闭操作等等。该函数的功能非常强大,读者可以查询MATLAB的帮助系统获取该函数的调用格式。下面通过几个例子程序介绍该函数的功能。

     例12-19 二值图像的细化

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('text.png');%读取一张二值图像
    J=bwmorph(I, 'thin', Inf);%对图像I进行细化
    figure;
    subplot(121);  imshow(I);%显示原图像
    title('原图像');
    subplot(122);  imshow(J);%显示边缘结果图像
    title('二值图像的细化');

     例12-20 二值图像的骨架化

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('circbw.tif');%读取一张二值图像
    J=bwmorph(I, 'skel', Inf);
    figure;
    subplot(121);  imshow(I);%显示原图像
    title('原图像');
    subplot(122);  imshow(J);%显示边缘结果图像
    title('骨架化后图像');

     例12-21 移除二值图像的内部像素点

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('circles.png');%读取一张二值图像
    J=bwmorph(I, 'remove');%移除内部像素点
    figure;
    subplot(121);  imshow(I);%显示原图像
    title('原图像');
    subplot(122);  imshow(J);%显示结果图像
    title('移除内部像素点后图像');

    12.3  二值图像的其他形态学操作

    图像的膨胀和腐蚀是最基本的形态学操作。下面介绍一些常用的形态学操作,主要包括极限腐蚀、查表操作、图像的标记、对象的选择、图像的面积和欧拉数等。

    12.3.1  二值图像的极限腐蚀

    MATLAB软件中,采用函数bwulterode( )进行图像的极限腐蚀,每个对象最后变为一个像素点为止。函数bwulterode( )的调用格式为:

    BW2=bwperim(BW1)该函数获取二值图像的边缘,返回值BW2是和原图像大小相同的二值图像。

    BW2=bwulterode(BW, method, conn)该函数中设置参数method,可取值为euclideancityblockchessboardquasi-euclidean。对于二维图像,参数conn可取值为48,默认值为8。对于三维图像,conn可取值为61826,默认值为26

      例12-22 对二值图像进行极限腐蚀

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('circles.png');%读取一张二值图像
    J=bwulterode(I);%极限腐蚀
    figure;
    subplot(121);  imshow(I);%显示原图像
    title('原图像');
    subplot(122);  imshow(J);%显示结果图像
    title('极限腐蚀后图像');

     12.3.2  二值图像的查表操作

    为了提高二值图像的处理速度,MATLAB软件提供了查表操作的相关函数。查表操作适合处理2×23×3的邻域情况。在MATLAB软件中,函数makelut( )用于建立表单,函数applylut( )用于查表操作。函数makelut( )的调用格式为:

    lut=makelut(fun, n)该函数建立表单,其中参数fun为设定判断条件的函数,n为邻域大小,可取值为23

    采用函数makelut( )建立表单后,可以采用函数applylut( )进行查表操作。在MATLAB中,函数applylut( )的调用格式为:

    A=applylut(BW, LUT)该函数采用查表的方式对二值图像的邻域进行操作,参数BW为二值图像,参数LUT为采用函数makelut( )建立的表单。返回值A为查表操作后得到的二值图像。

      例12-23 建立表格和查表操作

    clear all; close all;%关闭所有窗口,清空变量,命令行
    fun=@(x) (sum(x(:))==4);%建立匿名函数
    lut=makelut(fun, 2);%建立表格
    I=imread('text.png');%读取一张二值图像
    J=applylut(I, lut);%查表
    figure;
    subplot(121);  imshow(I);%显示原图像
    title('原图像');
    subplot(122);  imshow(J);%显示结果图像
    title('查表后图像');

     12.3.3  二值图像的标记

    对于属于同一个像素连通区域的所有像素分配相同的编号,对不同的连通区域分配不同的编号,称为连通区域的标记。在MATLAB中,采用函数bwlabel( )和函数bwlabeln( )进行连通区域的标记操作。函数bwlabel( )只支持二维的二值图像,函数bwlabeln( )支持任意维数的二值图像。函数bwlabel( )的调用格式为:

    L=bwlabel(BW, n)该函数建对二值图像BW的连通区域进行标记,参数n为连通类型,可取值为48,默认值为8,即8-连通。函数的返回值L为标记矩阵,和原来的二值图像有相同的大小。

    [L, num]=bwlabel(BW, n)该函数对二值图像BW进行标记,返回值num为连通区域的数目。

      例12-24 二值图像的标记

    clear all; close all; clc;%关闭所有窗口,清空变量,命令行
    BW=zeros(4, 8); %建立4*8的零矩阵
    BW(2:3, 2:3)=1;%矩阵的2-3行,2-3列对应的数都赋值为1
    BW(2, 5)=1;%矩阵第2行,第5列对应的数赋值为1
    BW(3, 7)=1%矩阵第3行,第7列对应的数赋值为1
    [L, num]=bwlabel(BW, 8)%二值图像的标记clear all; close all; clc;%关闭所有窗口,清空变量,命令行
    BW=zeros(4, 8); %建立4*8的零矩阵
    BW(2:3, 2:3)=1;%矩阵的2-3行,2-3列对应的数都赋值为1
    BW(2, 5)=1;%矩阵第2行,第5列对应的数赋值为1
    BW(3, 7)=1%矩阵第3行,第7列对应的数赋值为1
    [L, num]=bwlabel(BW, 8)%二值图像的标记

      

    可见,连通区域(非0且在一起的归为一个区域)分别被标记为了区域1,区域2,区域3

      例12-25 通过函数label2rgb()显示标记矩阵

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('rice.png');%读取一张灰度图像
    J=im2bw(I, graythresh(I));%转换为二值图像
    K=bwlabel(J);%对二值图像J标记
    RGB=label2rgb(K);%将标记矩阵转换为RGB图像
    figure;
    subplot(121);  imshow(J);%显示原图像
    title('原图像');
    subplot(122);  imshow(RGB);%显示结果图像
    title('RGB标记图像');

    左图为二值图像,右图为采用真彩色图像显示的标记矩阵

     12.3.4  二值图像的对象选择

    MATLAB软件中,采用函数bwselect( )在二值图像中选择单个的对象,要求图像必须是二维的。函数bwselect( )的调用格式为:

    BW2=bwselect(BW, c, r, n)该函数对输入的二值图像BW进行对象选择,输入参数(c, r)为对象的像素点的位置,cr的维数相同,参数n为对象的连通类型,可取值为48。返回值BW2为选择了指定对象的二值图像,和原图像有相同的大小。

    BW2=bwselect(BW, n)该函数采用交互的方式,用户采用鼠标选择像素点的位置。

      例12-26 通过函数bwselect()进行对象选择

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('text.png');%读取一张二值图像
    c=[43, 185, 212];%选择对象的横坐标
    r=[38, 68, 181];%选择对象的纵坐标
    J=bwselect(I, c, r, 4);%对象选择
    figure;
    subplot(121);  imshow(I);%显示原图像
    title('原图像');
    subplot(122);  imshow(J);%显示结果图像
    title('选择对象图像');

    可见,通过(43,38)、(185,68)、(212,181)三个坐标提取了三个对象

     12.3.5  二值图像的面积

    面积是二值图像中像素值为1的像素的个数。在MATLAB软件中,采用函数bwarea( )计算二值图像的面积。函数bwarea( )的调用格式为:

    total=bwarea(BW)该函数计算输入的二值图像BW的面积,返回值total为得到的面积值。在计算二值图像的面积时,不是简单的计算像素值为1的像素的个数,而是为每个像素设置一个权值,采用加权求和的方式得到面积。

     例12-27 通过函数bwarea()计算二值图像的面积

    clear all; close all;%关闭所有窗口,清空变量,命令行
    I=imread('circbw.tif');%读取一张二值图像
    se=strel('disk', 3);%建立一个半径为3的盘状结构元素
    J=imdilate(I, se);%对I进行膨胀
    a1=bwarea(I)%计算原图像的面积
    a2=bwarea(J)%计算膨胀后图像的面积
    (a2-a1)/a1%面积增加的百分比
    figure;
    subplot(121);  imshow(I);%显示原图像
    title('原图像');
    subplot(122);  imshow(J);%显示膨胀后图像
    title('膨胀后图像');

       

     12.3.6  二值图像的欧拉数

    在二值图像中,像素值为 1 的连通区域(对象)的个数减去孔数,所得的差值为这幅图像的欧拉数。欧拉数测量的是图像的拓扑结构。在 MATLAB 中,使用函数 bweuler ( ) 计算二值图像的欧拉数,该函数的调用格式为:
     
    eul=bweuler(BW, n) 该函数计算输入的二值图像 BW 的欧拉数,参数 n 可以为 4 8 ,默认值为 8 ,即 8 连通。

     

     例12-28 通过函数bweuler()计算二值图像的欧拉数

    clear all; close all; clc;%关闭所有窗口,清空变量,命令行
    I=imread('circbw.tif');%读取一张图像
    J=imread('circles.png');%读取一张图像
    e1=bweuler(I, 8)%计算图像I的欧拉数
    e2=bweuler(J, 8)%计算图像J的欧拉数
                                                                                             
     

     12.4  本章小结

    本章详细的介绍了利用形态学进行图像的处理和分析。首先详细的介绍了形态学的基本概念和基本运算,包括膨胀、腐蚀、开运算和闭运算等。然后详细介绍了利用形体学进行图像的处理,主要内容包括图像的填充、最大值和最小值的获取、图像的边界测定以及二值图像的形态学分析。最后介绍了形态学进行图像处理常用的操作,包括极限腐蚀、查表操作、图像的标记、对象的选取、图像的面积和欧拉数等。如有资料及技术问题请留言,也可联系扣扣1837393417,共同探讨,共同进步!!!

    展开全文
  • MATLAB常用形态学操作函数

    千次阅读 2017-03-21 17:05:55
    MATLAB常用形态学操作函数  (2009-07-15 14:54:25) 转载▼ 常用形态学操作函数 1、dilate函数——膨胀 该函数能够实现二值图像的膨胀操作,有以下形式: BW2=dilate(BW1,SE) BW2=dilate(BW1...

    MATLAB常用形态学操作函数

      (2009-07-15 14:54:25)

    常用形态学操作函数

    1、dilate函数——膨胀

    该函数能够实现二值图像的膨胀操作,有以下形式:

    BW2=dilate(BW1,SE)

    BW2=dilate(BW1,SE,…,n)

    其中:BW2=dilate(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行膨胀操作。输入图像BW1的类型为double或unit8,输出图像BW2的类型为unit8。BW2=dilate(BW1,SE,…,n)表示执行膨胀操作n次。

    2、erode 函数——腐蚀

    该函数能够实现二值图像的腐蚀操作,有以下形式:

    BW2= erode(BW1,SE)

    BW2= erode(BW1,SE,…,n)

    其中:BW2= erode(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行腐蚀操作。输入图像BW1的类型为double或unit8,输出图像BW2的类型为unit8。BW2= erode(BW1,SE,…,n)表示执行腐蚀操作n次。

    3、bwmorph函数——二值图像形态学运算

    该函数的功能是能实现二值图像形态学运算。它的格式如下:

    ① BW2=bwmorph(BW1,operation)

    ② BW2=bwmorph(BW1,operation,n)

    其中:对于格式①,bwmorph函数可对二值图像BW1采用指定的形态学运算;对于格式②,bwmorph函数可对二值图像BW1采用指定的形态学运算n次。operation为下列字符串之一:

    ‘clean’:除去孤立的像素(被0包围的1)

    ‘close’:计算二值闭合

    ‘dilate’:用结构元素计算图像膨胀

    ‘erode’:用结构元素计算图像侵蚀

    4、imclose函数——形态学闭运算

    该函数功能是对灰度图像执行形态学闭运算,即使用同样的结构元素先对图像进行膨胀操作后进行腐蚀操作。调用格式为:

    IM2=imclose(IM,SE)

    IM2=imclose(IM,NHOOD)

    5、imopen函数——形态学开运算

    该函数功能是对灰度图像执行形态学开运算,即使用同样的结构元素先对图像进行腐蚀操作后进行膨胀操作。调用格式为:

    IM2=imopen(IM,SE)

    IM2=imopen(IM,NHOOD)

    展开全文
  • Matlab形态学梯度检测二值图像的边缘 使用的是matlab代码
  • %读入图像,并转换为double型,该计算针对的是二值图像,所以加入图像时需注意 %膨胀测试图像 I=im2double(imread('D:\Gray Files\9-11.tif')); %获得图像大小 [M,N]=size(I); %存放膨胀后的图像 J=zeros(M,N); %===...
  • MATLAB(三) 图像处理--形态学

    万次阅读 2018-04-07 12:29:14
    7.形态学操作 灰度形态学 1.膨胀与腐蚀 2.开操作与闭操作 3.形态学图像平滑 4.顶帽操作与底帽操作 5.纹理分割 6.粒度测定 7.形态学图像梯度 二值形态学 1. 结构元素的构造与分解 Se=str...
  • 数字图像处理Matlab-形态学图像处理(附代码)

    千次阅读 多人点赞 2020-03-26 18:59:10
    目录1.Objectives:2.Experiment Content:3.Experiment Principle:4.Experiment Steps Result and Conlusion:1、二值图像的形态学变换2、对输入图像进行形态学操作,即腐蚀、膨胀、开运算和闭运算,改变结构元素...
  • matlab形态学分割实例共享-形态学分割.rar 自己学习matlab写了一个关于利用形态学进行分割的实例,特共享之 所含文件: Figure9.jpg matlab形态学分割实例共享
  • clc; clear all; close all; %区域填充测试图像 I=im2double(imread('D:\Gray Files\9-16.tif'));...%----------------------------形态学区域填充-------------------------------- %=====================...
  • 这个项目通过设计 GUI 对图像应用形态学操作
  • matlab 图像形态学处理与图像分割

    万次阅读 2016-12-01 17:07:30
    1. 对图像进行去噪、直方图均衡等图像增强处理去噪>> finger_noise=imread('finger_noise.jpg'); >> gray_finger_noise=rgb2gray(finger_noise); %均值滤波 >> gray_finger_avg3=filter2(fspecial('average',3),gray...
  • Matlab数学形态学进行图像处理

    千次阅读 2017-11-20 16:04:24
    数学形态图像处理的方法基本有膨胀,腐蚀,开运算,闭运算clc,clear I=imread('circbw.tif'); imshow(I),title('原始图像'); %腐蚀操作 se=strel('square',3); Ie=imerode(I,se); figure,imshow(Ie),title('腐蚀之后...
  • %灰度膨胀、腐蚀、开操作、闭操作测试图像 I=im2double(imread('D:\Gray Files\9-37.tif')); %========================灰度开操作和闭操作================================ %半径为3的磁盘(disk)结构元素 r=...
  • 二值形态学处理:长字符提取、空洞填充、边界清除。灰度级形态学处理:顶帽变换纠正阴影、粒度测定、纹理分割。matlab代码与测试图像、结果图像。复现数字图像处理教材例子。
  • 数学形态学细化算法的matlab实现,主要应用循环击中击不中算法,同时有matlab自带的细化函数实现,循环击中击不中算法运行速度效率不及Matlab自带的细化函数,但原理很清晰,吻合冈萨雷斯版教材中细化方法。
  • 形态学滤波器 matlab程序

    热门讨论 2013-03-18 11:03:57
    形态学滤波器 matlab程序,主要用于特征提起、信号处理
  • Matlab形态学图像处理

    千次阅读 2018-05-30 16:02:49
    MATLAB中,采用函数strel()创建结构元素。 close all; clear all; clc; se1 = strel('square', 3) % 方形结构元素 se2 = strel('line', 10, 45) % 线性结构元素,角度为45° 2. 结构元素的分解 在MATLAB中,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,104
精华内容 1,641
关键字:

matlab图像形态学操作

matlab 订阅