(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)中的图像
(8)MATLAB 形态学处理_第1张图片


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

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的结构元素膨胀后');
(8)MATLAB 形态学处理_第2张图片

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)
(8)MATLAB 形态学处理_第3张图片







你可能感兴趣的:((8)MATLAB 形态学处理)