文章目录
- 一、形态学:二值图像的腐蚀 P405
- 二、形态学:二值图像的膨胀 P407
- 三、形态学:二值图像的开、闭操作 P410
- 四、形态学:二值图像--- 边界提取 P413
- 五、形态学:二值图像 --- 空洞填充 P414
- 六、形态学:二值图像 --- 重建开操作 P424
- 七、形态学:二值图像 --- 空洞填充 P425
- 八、形态学:二值图像 --- 边界清除 P426
- 九、形态学:灰度图像 --- 腐蚀与膨胀 P429
- 十、形态学:灰度图像 --- 开、闭操作 P431
- 十一、形态学:灰度图像 --- 形态学平滑 P432
- 十二、形态学:灰度图像 --- 形态学梯度 P432
- 十三、形态学:灰度图像 --- 顶帽变换 P433
- 十四、形态学:灰度图像 --- 纹理分割 P435
- 十五、形态学:灰度图像 --- 形态学重建 P437
实验所用教材配图资源:数字图像处理-冈萨雷斯-第三版(教材配图)
实验Matlab代码资源:数字图像处理 第九章 形态学图像处理(Matlab实验代码)
一、形态学:二值图像的腐蚀 P405
1.1 实验内容
关于灰度图像腐蚀的实验
1.2 文件目录结构
1.3 Matlab代码
% 关于腐蚀的实验 P405
close all;clear all;clc;
f = imread('Fig0905(a)(wirebond-mask).tif');
g = imerode(f, strel('disk', 5));
g1 = imerode(f, strel('disk', 7));
g2 = imerode(f, strel('disk', 22));
subplot(1,4,1), imshow(f);title('(a)原始图像的尺寸为480x480像素:');
subplot(1,4,2), imshow(g);title('(b)使用大小为 11 * 11 的结构元腐蚀的图像');
subplot(1,4,3), imshow(g1);title('(c)使用大小为 15 * 15 的结构元腐蚀的图像');
subplot(1,4,4), imshow(g2);title('(d)使用大小为 45 * 45 的结构元腐蚀的图像');
1.4 实验结果
二、形态学:二值图像的膨胀 P407
2.1 实验内容
关于灰度图像膨胀的实验
2.2 文件目录结构
2.3 Matlab代码
% 关于膨胀的实验 P407
close all;clear all;clc;
A = imread('Fig0907(a)(text_gaps_1_and_2_pixels).tif');
B = [0 1 0; 1 1 1; 0 1 0]; %指定结构元素由0和1组成的矩阵
A2 = imdilate(A, B); %二值图像
subplot(1,2,1), imshow(A);title('(a)包括断开文本的输入图像:');
subplot(1,2,2), imshow(A2);title('(b)膨胀后图像:');
2.4 实验结果
三、形态学:二值图像的开、闭操作 P410
3.1 实验内容
关于二值图像的 开操作 与 闭操作的实验 P410
3.2 文件目录结构
3.3 Matlab代码
% 关于二值图像的 开操作 与 闭操作的实验 P410
close all;clear all;clc;
% 读入图像
in = imread('Fig0911(a)(noisy_fingerprint).tif');
% 腐蚀操作
g = {in};
g{end+1} = imerode(in, strel('disk', 1));
% 开操作
g{end+1} = imopen(in,strel('disk', 1));
% 膨胀操作
g{end+1} = imdilate(g{length(g)},strel('disk', 1));
% 闭操作
g{end+1} = imclose(g{length(g)},strel('disk', 1));
% 显示图像
title_ = {'(a)噪声图像','(b)腐蚀后的图像','(c)A的开操作','(d)开操作的膨胀','(e)开操作的闭操作'};
figure;
for i = 1:length(g)
subplot(2,3,i);
imshow(g{i},[]);
title(title_{i})
end
3.4 实验结果
四、形态学:二值图像— 边界提取 P413
4.1 实验内容
二值图像的边界提取
4.2 文件目录结构
4.3 Matlab代码
% 二值图像的边界提取 P413
close all;clear all;clc;
% 读入图像
in = imread('Fig0914(a)(licoln from penny).tif');
% 使用原图减去 对原图腐蚀过后的结果
boundary = in - imerode(in,strel('disk', 1));
% 显示图像
figure;
subplot(1,2,1);
imshow(in,[]);
title('(a)原图');
subplot(1,2,2);
imshow(boundary,[]);
title('(b)获取其边界');
4.4 实验结果
五、形态学:二值图像 — 空洞填充 P414
5.1 实验内容
二值图像的空洞填充实验
5.2 文件目录结构
5.3 Matlab代码
% 二值图像的空洞填充实验 P414
close all;clear all;clc;
% 读入图像
in = imread('Fig0916(a)(region-filling-reflections).tif');
% 填充孔洞
out = imfill(in,'holes');
% 显示图像
figure;
subplot(1,2,1);
imshow(in,[]);
title('(a)二值图像');
subplot(1,2,2);
imshow(out,[]);
title('(b)填充该区域的结果');
5.4 实验结果
六、形态学:二值图像 — 重建开操作 P424
6.1 实验内容
对二值图像的重建开操作
6.2 文件目录结构
6.3 Matlab代码
% 对二值图像的重建开操作 P424
close all;clear all;clc;
% 读入图像
in = imread('Fig0929(a)(text_image).tif');
% 腐蚀
out = {in};
b = ones(51,1);
out{end+1} = imerode(in, b);
% 开操作
out{end+1} = imopen(in,b);
% 重建开操作
out{end+1}= imreconstruct(out{2},in);
% 显示图像
title_ = {'(a)大小为 918*2018 像素的文本图像','(b)使用大小为 51*1 像素的结构元对图(a)的腐蚀','(c)使用相同的结构元对图(a)的开操作,用作参考','(d)重建开操作的结果'};
figure;
for i = 1:length(out)
subplot(2,2,i);
imshow(out{i},[]);
title(title_{i});
end
6.4 实验结果
七、形态学:二值图像 — 空洞填充 P425
7.1 实验内容
对二值图像的填充孔洞
7.2 文件目录结构
7.3 Matlab代码
% 对二值图像的填充孔洞 P425
close all;clear all;clc;
% 读入图像
in = imread('Fig0929(a)(text_image).tif');
% 填充孔洞
out = imfill(in,'holes');
% 显示图像
figure;
subplot(1,2,1);
imshow(in,[]);
title('(a)二值图像');
subplot(1,2,2);
imshow(out,[]);
title('(b)填充该区域的结果');
7.4 实验结果
八、形态学:二值图像 — 边界清除 P426
8.1 实验内容
对二值图像的边界消除
8.2 文件目录结构
8.3 Matlab代码
% 对二值图像的边界消除 P425
close all;clear all;clc;
in = imread('Fig0929(a)(text_image).tif');
[row,column] = size(in);
% 膨胀重建获取与边界相连的部分
out = {};
f = in;
f(2:row - 1,2:column-1) = zeros(row - 2,column - 2);
out{end+1} = imreconstruct(f,in);
% 除去边界
out{end+1} = imclearborder(in,8);
%显示图像
title_ = {'(a)标记图像','(b)没有接触边界的物体的图像'};
figure;
for i = 1:length(out)
subplot(1,2,i);
imshow(out{i},[]);
title(title_{i});
end
8.4 实验结果
九、形态学:灰度图像 — 腐蚀与膨胀 P429
9.1 实验内容
灰度图像关于腐蚀和膨胀的实验
9.2 文件目录结构
9.3 Matlab代码
% 灰度图像关于腐蚀和膨胀的实验 P429
close all;clear all;clc;
in = imread('Fig0935(a)(ckt_board_section).tif');
% 腐蚀
out = {in};
out{end+1} = imerode(in, strel('sphere', 2));
% 膨胀
out{end+1} = imdilate(in,strel('sphere', 2));
% 显示图像
title_ = {'(a)大小为448*425像素的灰度级X射线图像','(b)使用半径为2个像素的圆盘形结构元对图像的腐蚀结果','(c)用相同结构元对图像的膨胀结果'};
figure;
for i = 1:length(out)
subplot(1,3,i);
imshow(out{i},[]);
title(title_{i});
end
9.4 实验结果
十、形态学:灰度图像 — 开、闭操作 P431
10.1 实验内容
灰度图像关于开操作与闭操作的实验
10.2 文件目录结构
10.3 Matlab代码
% 灰度图像关于开操作与闭操作的实验 P431
close all;clear all;clc;
% 读入图像
in = imread('Fig0937(a)(ckt_board_section).tif');
% 开操作
out = {in};
out{end+1} = imopen(in,strel('sphere', 3));
% 闭操作
out{end+1} = imclose(in,strel('sphere', 5));
% 显示图像
title_ = {'(a)一幅大小为448*425像素的灰度级X射线图像','(b)使用半径为3个像素的圆盘形结构元得到的开操作结果','(c)使用半径为5个像素的圆盘形结构元得到的闭操作结果'};
figure;
for i = 1:length(out)
subplot(1,3,i);
imshow(out{i},[]);
title(title_{i});
end
10.4 实验结果
十一、形态学:灰度图像 — 形态学平滑 P432
11.1 实验内容
灰度图像形态学平滑实验
11.2 文件目录结构
11.3 Matlab代码
% 灰度图像形态学平滑实验 P432
close all;clear all;clc;
% 读入图像
in = imread('Fig0938(a)(cygnusloop_Xray_original).tif');
% 不同尺寸的开闭操作
out = {in};
r = [1,3,5];
for i = 1:length(r)
% 开操作,去除小亮点
temp = imopen(out{i},strel('sphere', r(i)));
% 闭操作,填补小黑点
out{end+1} = imclose(temp,strel('sphere', r(i)));
end
% 显示图像
title_ = {'(a)原图','(b)使用半径为1的圆盘型结构元对原图像执行开操作和闭操作的结果','(c)使用半径为3的圆盘型结构元对原图像执行开操作和闭操作的结果','(d)使用半径为5的圆盘型结构元对原图像执行开操作和闭操作的结果'};
figure;
for i = 1:length(out)
subplot(1,4,i);
imshow(out{i},[]);
title(title_{i});
end
11.4 实验结果
十二、形态学:灰度图像 — 形态学梯度 P432
12.1 实验内容
灰度图像形态学梯度实验
12.2 文件目录结构
12.3 Matlab代码
% 灰度图像形态学梯度实验 P432
close all;clear all;clc;
% 读入图像
in = imread('Fig0939(a)(headCT-Vandy).tif');
% 膨胀
out = {in};
out{end+1} = imdilate(in,strel('disk', 1));
% 腐蚀
out{end+1} = imerode(in, strel('disk', 1));
% 梯度
out{end+1} = out{end-1} - out{end};
% 显示图像
title_ = {'(a)原图','(b)膨胀的结果','(c)腐蚀的结果','(d)形态学梯度'};
figure;
for i = 1:length(out)
subplot(1,4,i);
imshow(out{i},[]);
title(title_{i});
end
12.4 实验结果
十三、形态学:灰度图像 — 顶帽变换 P433
13.1 实验内容
灰度图像的顶帽变换实验
13.2 文件目录结构
13.3 Matlab代码
% 灰度图像的顶帽变换实验 P433
close all;clear all;clc;
% 读入图像
in = imread('Fig0940(a)(rice_image_with_intensity_gradient).tif');
% 阈值处理
out = {in};
out{end+1} = in>=(255*graythresh(in));
% 开操作
out{end+1} = imopen(out{1}, strel('disk', 40));
% 顶帽变换(得到开操作删除的物体图像)
out{end+1} = imsubtract(out{1},out{end});
% 顶帽变换图像的阈值处理
out{end+1} = out{end}>=(255*graythresh(out{end}));
% 显示图像
title_ = {'(a)大小为 600 * 600 的原图像','(b)阈值处理后的图像','(c)使用半径为40的圆盘型结构元对图(a)进行开操作','(d)顶帽变换(获取被开操作删除的物体图像)','(e) 顶帽变换的阈值处理图像'};
figure;
for i = 1:length(out)
subplot(2,3,i);
imshow(out{i});
title(title_{i});
end
13.4 实验结果
十四、形态学:灰度图像 — 纹理分割 P435
14.1 实验内容
灰度图像纹理分割实验
14.2 文件目录结构
14.3 Matlab代码
% 灰度图像纹理分割实验 P434
close all;clear all;clc;
% 读入图像
in = imread('Fig0943(a)(dark_blobs_on_light_background).tif');
% 闭操作去除小圆点
out = {in};
out{end+1} = imclose(out{1},strel('disk',30));
% 开操作连接大圆点的间隙
out{end+1} = imopen(out{end},strel('disk',60));
% 形态学梯度找出边界
boundary = imdilate(out{end},strel('disk', 1)) - imerode(out{end}, strel('disk', 1));
% 边界叠加到原图
out{end+1} = out{1} + boundary;
% 显示图像
title_ = {'(a)原图','(b)对图(a)执行闭操作后删除小斑点的图像','(c)对图(b)执行开操作后删除了打扮电建的亮间隔的图像','(d)将图(c)中两个区域的边界叠加到原图像上后的结果'};
figure;
for i = 1:length(out)
subplot(1,4,i);
imshow(out{i},[]);
title(title_{i});
end
14.4 实验结果
十五、形态学:灰度图像 — 形态学重建 P437
15.1 实验内容
灰度图进行形态学重建的实验
15.2 文件目录结构
15.3 Matlab代码
% 灰度图进行形态学重建的实验 P437
close all;clear all;clc;
% 读入图像
f = imread('Fig0944(a)(calculator).tif');
subplot(3,3,1),imshow(f);
title('(a)原图像');
f_obr=imreconstruct(imerode(f,ones(1,71)),f);
subplot(3,3,2),imshow(f_obr);
title('(b)重建的开操作');
f_o=imopen(f,ones(1,71));
subplot(3,3,3),imshow(f_o);
title('(c)开操作');
f_thr=imsubtract(f,f_obr); %顶帽重构
subplot(3,3,4),imshow(f_thr);
title('(d)重建的顶帽操作');
f_th = imsubtract(f,f_o); %标准顶帽运算,方便比较
subplot(3,3,5),imshow(f_th);
title('(e)顶帽操作');
g_obr=imreconstruct(imerode(f_thr,ones(1,11)),f_thr);
subplot(3,3,6),imshow(g_obr);
title('(f)用水平线对(b)经开运算后重建图');
g_obrd=imdilate(g_obr,ones(1,21));
subplot(3,3,7),imshow(g_obrd);
title('(g)使用水平线对(f)进行膨胀');
f2=min(g_obrd,f_thr);
subplot(3,3,8),imshow(f2);
title('(h)图(d)和图(g)的最小操作');
f3=imreconstruct(f2,f_thr);
subplot(3,3,9),imshow(f3);
title('(i)最后的重建结果');