【zz】matlab 腐蚀膨胀算法

1.图像膨胀的Matlab实现:函数

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

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

>> BW=zeros(9,10);ci

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

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的正方形结构元素对象对建立的图像进行膨胀。object

>> 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')

 

2.图像腐蚀的Matlab实现:

可使用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)

3.膨胀和腐蚀联合操做(图像开运算操做):

下面以图像开启为例,说明如何综合使用imdilate和imerode这两个函数,实现图像处理操做。

步骤1,建立结构元素:

>> clear;close all 
>> SE = strel('rectangle',[40 30]); %注意:结构元素必须具备适当的大小,既能够删电流线又能够删除矩形.

步骤2,使用结构元素腐蚀图像: %将会删除全部直线,但也会缩减矩形

>> BW1=imread('circbw.tif'); 
>> BW2=imerode(BW1,SE); 
>> imshow(BW2) 
>> figure,imshow(BW1)

步骤3,恢复矩形为原有大小,使用相同的结构元素对腐蚀过的图像进行膨胀.

>> BW3=imdilate(BW2,SE); 
>> figure,imshow(BW3)

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

(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 从原始图像中减去通过形态关闭后的图像,该函数可用来寻找图像中的灰度槽

imclose 闭合操做.首先对图像进行膨胀,而后再对膨胀后的图像进行腐蚀,两个操做使用一样的结构元素

imopen 开启操做,首先对图像进行腐蚀,而后再对腐蚀后的图像进行膨胀,两个操做使用一样的结构元素

imtophat 从原始图像中减去形态开启后的图像,能够用来加强图像的对比度

相关文章
相关标签/搜索