matlab 图像的膨胀indilate和腐蚀imerode

1.图像膨胀的Matlab实现:

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

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 从原始图像中减去形态开启后的图像,可以用来增强图像的对比度

Matlab中,可以使用imdilate函数进行图像膨胀操作。该函数需要两个基本输入参数,即待处理的输入图像结构元素对象。结构元素对象可以是strel函数返回的对象,也可以是一个自己定义的表示结构元素邻域的二进制矩阵。此外,imdilate函数还可以接受两个可选参数:PADOPT(padopt)PACKOPT(packopt)。PADOPT参数影响输出图片的大小,而PACKOPT参数说明输入图像是否为打包的二值图像(二进制图像)。 如果想要实现不均匀膨胀,可以先定义一个自己的结构元素对象,然后将其作为参数传递给imdilate函数。结构元素对象可以是一个二进制矩阵,其中1表示需要参与计算的像素,0表示不参与计算的像素。通过调整结构元素对象的形状大小,可以实现不同的膨胀效果。 以下是一个示例代码,展示了如何在Matlab中实现不均匀膨胀操作: ```matlab clc; close all; img = imread('baihe.jpg'); img_gray = rgb2gray(img); subplot(221),imshow(img_gray); \[m, n\] = size(img_gray); img_gray_fu = zeros(m, n); img_gray_peng = zeros(m, n); for i = 2:m-1 for j = 2:n-1 img_gray_fu(i, j) = min(min(img_gray(i-1:i+1, j-1:j+1))); img_gray_peng(i, j) = max(max(img_gray(i-1:i+1, j-1:j+1))); end end subplot(222),imshow(uint8(img_gray_fu)); subplot(223),imshow(uint8(img_gray_peng)); ``` 在这个示例中,首先将彩色图像转换为灰度图像,然后定义了一个3x3的结构元素对象。接下来,通过嵌套的for循环遍历图像的每个像素,并使用minmax函数分别计算每个像素周围邻域的最小值最大值,从而实现了不均匀膨胀的效果。最后,使用imshow函数显示了原始图像、均匀膨胀后的图像不均匀膨胀后的图像。 请注意,这只是一个示例代码,具体的不均匀膨胀效果取决于结构元素对象的定义图像的特点。你可以根据自己的需求调整代码中的参数结构元素对象,以实现不同的膨胀效果。 #### 引用[.reference_title] - *1* [matlab 膨胀腐蚀](https://blog.csdn.net/xiaojidan2011/article/details/8049763)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [matlab 图像膨胀indilate腐蚀imerode](https://blog.csdn.net/u013228046/article/details/40781249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [膨胀腐蚀MATLAB中](https://blog.csdn.net/zhengalen/article/details/51446779)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值