形态学处理代码matlab,(8)MATLAB 形态学处理

腐蚀,膨胀,开运算:先腐蚀后膨胀 ;

腐蚀

I = imread('../erode_dilate.bmp'); %读入8位灰度图像

%二值形态学处理中将灰度图像中所有非0值都看作是1,即前景物体

figure, imshow(I);

se = strel('square', 3) %3*3的正方形结构元素

Ib= imerode(I, se); %腐蚀

figure, imshow(Ib);

I = imread('../starcraft.bmp'); %读入图像

figure, imshow(I);

Ie1 = imerode(I, [1 1 1; 1 1 1; 1 1 1]) ; %3*3正方形结构元素的腐蚀

figure, imshow(Ie1); %得到图10.10(b)

Ie2 = imerode(Ie1, [0 1 0; 1 1 1; 0 1 0]); %3*3十字形结构元素的腐蚀

figure, imshow(Ie2);

获取纹理方法

I = imread('../head_portrait.bmp'); %读入原图像

figure, imshow(I); %得到图10.18(a)中的图像

se = strel('square', 3); %3*3的正方形结构元素

Ie = imerode(I, se); %腐蚀得到内部点

Iout = I - Ie; %减去内部点留下边界点

figure, imshow(Iout); %得到图10.18(b)中的图像

c745b5fd5b6e96dec710d3145ecdf0b3.png

% locateMouth.m

I = imread('../mouth.bmp'); %读入图像

Id = im2double(I);

figure, imshow(Id) % 得到10.24(a)

Ibw = im2bw(Id, 0.38); %以0.38为阈值二值化

Ibw = 1 - Ibw; %为在Matlab中进行处理,将图像反色

figure, imshow(Ibw) % 得到10.24(b)

hold on

[L, num] = bwlabel(Ibw, 8); % 标注连通分量

disp(['图中共有' num2str(num) '个连通分量'])

% 找出最大的连通分量(嘴)

max = 0; % 当前最大连通分量的大小

indMax = 0; % 当前最大连通分量的索引

for k = 1:num

[y x] = find(L == k); % 找出编号为k的连通区的行索引集合y和列索引集合x

nSize = length(y); % 计算该连通区的像素数目

if(nSize > max)

max = nSize;

indMax = k;

end

end

if indMax == 0

disp('没有找到连通分量')

return

end

% 计算并显示最大连通分量(嘴)的中心

[y x] = find(L == indMax);

yMean = mean(y);

xMean = mean(x);

plot(xMean, yMean, 'Marker', 'o', 'MarkerSize', 14, 'MarkerEdgeColor', 'w', 'MarkerFaceColor', 'w');

plot(xMean, yMean, 'Marker', '*', 'MarkerSize', 12, 'MarkerEdgeColor', 'k'); % 得到10.24(c)

77a697770d2e3bff974fc8c8f1205de5.png

f = [0 1 2 3 4 5 4 3 2 1 0];

figure, h_f = plot(f);

seFlat = strel([1 1 1]) % 构造平坦(高度为0)的结构元素

fd1 = imdilate(f, seFlat); % 使用平坦的结构元素灰度膨胀

hold on, h_fd1 = plot(fd1, '-ro');

axis([1 11 0 8])

seHeight = strel([1 1 1], [1 1 1]) % 注意此处strel的用法,第一个参数的元素为0或1,表示结构元素的区域范围(形状),第二个参数表示结构元素中各个元素的高度

fd2 = imdilate(f, seHeight); %使用具有高度的结构元素的灰度膨胀

hold on, h_fd2 = plot(fd2, '-g*');

legend('原灰度1维函数f', '使用平坦结构元素膨胀后', '使用高度为1的结构元素膨胀后');

b30afb70096803a203075dc3de1b117b.png

I = imread('rice.png');

subplot(2, 4, 1), imshow(I, []);%得到图10.39(a)

thresh = graythresh(I) %自适应确定阈值

Ibw = im2bw(I, thresh);

subplot(2, 4, 2), imshow(Ibw, []);%得到图10.39(b)

subplot(2, 4, 3), surf(double(I(1:8:end,1:8:end))),zlim([0 255]),colormap gray;%显示I的3维可视化效果,(c)图

bg = imopen(I,strel('disk',15));%半径为15的圆形结构元素进行灰度开运算提取背景曲面

subplot(2, 4, 4), surf(double(bg(1:8:end,1:8:end))),zlim([0 255]), colormap gray; %显示背景曲面的三维可视化效果,图10.39(d)

Itophat = imsubtract(I, bg); %顶帽变换

subplot(2, 4, 5), imshow(Itophat); %得到图10.39(e)

subplot(2, 4, 6), surf(double(Itophat(1:8:end,1:8:end))),zlim([0 255]); %显示顶帽变换图像的三维可视化效果

I2 = imadjust(Itophat);%对比度拉伸

subplot(2, 4, 7), imshow(I2); %得到图10.39(f)

thresh2 = graythresh(I2) %自适应确定阈值

Ibw2 = im2bw(I2, thresh2); %得到图10.39(g)

subplot(2, 4, 8), imshow(Ibw2); %得到图10.39(h)

6fd9fba5583d6e6ea7a563f15ba7f86a.png

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值