matlab形态学处理——膨胀腐蚀的原理

matlab形态学处理——膨胀腐蚀的原理,第1张

在matlab定义里面,这两个函数本来就是能够作用于灰度图像的,看帮助文件你也能看到

作用与灰度图的例子

当然,膨胀和腐蚀多用于处理二值图像

先把输入的图像二值化成为二值图像,在用这两个函数就可以了

在图像处理中,腐蚀和膨胀是一种常用的 *** 作方法。腐蚀可以使图像中的物体变小,而膨胀则可以使图像中的物体变大。在对图像进行腐蚀或膨胀 *** 作时,如果 *** 作的区域超过了图像边界,就会出现白边。

这是因为,当进行腐蚀或膨胀 *** 作时, *** 作区域会向外扩张一定的像素,如果超过了图像边界,就会出现空白区域。这些空白区域就会呈现出白色,从而形成白边。

为了避免出现白边,可以在进行腐蚀或膨胀 *** 作前,先将图像进行裁剪,使得 *** 作区域不超过图像边界。

1、用Prewitt算子检测图像的边缘

I = imread('bacteriaBMP');

BW1 = edge(I,'prewitt',004); % 004为梯度阈值

figure(1);

imshow(I);

figure(2);

imshow(BW1);

2、用不同σ值的LoG算子检测图像的边缘

I = imread('bacteriaBMP');

BW1 = edge(I,'log',0003); % σ=2

imshow(BW1);title('σ=2')

BW1 = edge(I,'log',0003,3); % σ=3

figure, imshow(BW1);title('σ=3')

3、用Canny算子检测图像的边缘

I = imread('bacteriaBMP');

imshow(I);

BW1 = edge(I,'canny',02);

figure,imshow(BW1);

4、图像的阈值分割

I=imread('blood1tif');

imhist(I); % 观察灰度直方图, 灰度140处有谷,确定阈值T=140

I1=im2bw(I,140/255); % im2bw函数需要将灰度值转换到[0,1]范围内

figure,imshow(I1);

5、用水线阈值法分割图像

afm = imread('afmsurftif');figure, imshow(afm);

se = strel('disk', 15);

Itop = imtophat(afm, se); % 高帽变换

Ibot = imbothat(afm, se); % 低帽变换

figure, imshow(Itop, []); % 高帽变换,体现原始图像的灰度峰值

figure, imshow(Ibot, []); % 低帽变换,体现原始图像的灰度谷值

Ienhance = imsubtract(imadd(Itop, afm), Ibot);% 高帽图像与低帽图像相减,增强图像

figure, imshow(Ienhance);

Iec = imcomplement(Ienhance); % 进一步增强图像

Iemin = imextendedmin(Iec, 20); figure,imshow(Iemin) % 搜索Iec中的谷值

Iimpose = imimposemin(Iec, Iemin);

wat = watershed(Iimpose); % 分水岭分割

rgb = label2rgb(wat); figure, imshow(rgb); % 用不同的颜色表示分割出的不同区域

6、对矩阵进行四叉树分解

I = [ 1 1 1 1 2 3 6 6

1 1 2 1 4 5 6 8

1 1 1 1 10 15 7 7

1 1 1 1 20 25 7 7

20 22 20 22 1 2 3 4

20 22 22 20 5 6 7 8

20 22 20 20 9 10 11 12

22 22 20 20 13 14 15 16];

S = qtdecomp(I,5);

full(S)

7、将图像分为文字和非文字的两个类别

I=imread('4-11jpg');

I1=I(:,:,1);

I2=I(:,:,2);

I3=I(:,:,3);

[y,x,z]=size(I);

d1=zeros(y,x);

d2=d1;

myI=double(I);

I0=zeros(y,x);

for i=1:x

for j=1:y

%欧式聚类

d1(j,i)=sqrt((myI(j,i,1)-180)^2+(myI(j,i,2)-180)^2+(myI(j,i,3)-180)^2);

d2(j,i)=sqrt((myI(j,i,1)-200)^2+(myI(j,i,2)-200)^2+(myI(j,i,3)-200)^2);

if (d1(j,i)>=d2(j,i))

I0(j,i)=1;

end

end

end

figure(1);

imshow(I);

% 显示RGB空间的灰度直方图,确定两个聚类中心(180,180,180)和(200,200,200)

figure(2);

subplot(1,3,1);

imhist(I1);

subplot(1,3,2);

imhist(I2);

subplot(1,3,3);

imhist(I3);

figure(4);

imshow(I0);

8、形态学梯度检测二值图像的边缘

I=imread('wrod213bmp');

imshow(I);

I=~I; % 腐蚀运算对灰度值为1的进行

figure, imshow(I);

SE=strel('square',3); % 定义3×3腐蚀结构元素

J=imerode(~I,SE);

BW=(~I)-J; % 检测边缘

figure,imshow(BW);

9、形态学实例——从PCB图像中删除所有电流线,仅保留芯片对象

I=imread('circbwtif');

imshow(I);

SE=strel('rectangle',[40 30]); % 结构定义

J=imopen(I,SE); % 开启运算

figure,imshow(J);

膨胀和腐蚀

膨胀和腐蚀这两种 *** 作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的

① 膨胀

是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的A被B膨胀是所有位移z的集合,这样,和A至少有一个元素是重叠的我们可以把上式改写为:

结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的

⑴ 用结构元素B,扫描图像A的每一个像素

⑵ 用结构元素与其覆盖的二值图像做“与” *** 作

⑶ 如果都为0,结果图像的该像素为0否则为1

② 腐蚀

对Z中的集合A和B,B对A进行腐蚀的整个过程如下:

⑴ 用结构元素B,扫描图像A的每一个像素

⑵ 用结构元素与其覆盖的二值图像做“与” *** 作

⑶ 如果都为1,结果图像的该像素为1否则为0

腐蚀处理的结果是使原来的二值图像减小一圈

⑷ 击中(匹配)或击不中变换

不知道你的膨胀是指哪个:1 图像像素变大;2 图像中的白色变大;3 图像中的黑色区域变大?

请注意看 腐蚀 *** 作 的定义和 imerode 函数,其需要选择一个模板,模板种类很多

选择全1的模板做腐蚀 *** 作,图像的1目标区域变小

选择全0的模板做腐蚀 *** 作,图像的1目标区域变大

(我记不太清楚了,你可以在matlab上运行下结果,建议参考 《数字图像处理matlab》冈萨雷斯

以上就是关于matlab形态学处理——膨胀腐蚀的原理全部的内容,包括:matlab形态学处理——膨胀腐蚀的原理、图像处理腐蚀膨胀后屏幕出现白边、图像污垢检测用什么方法,matlab编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10638573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存