腐蚀,膨胀,开运算:先腐蚀后膨胀 ;
腐蚀
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)中的图像
% 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的结构元素膨胀后');
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)