十、数字图像处理Matlab实验 第九章 形态学图像处理

文章目录
-
一、形态学:二值图像的腐蚀 P405
- 1.1 实验任务
- 1.2 文件组织架构
- 1.3 Matlab程序
- 1.4 运行结果
-
二、Mathematical morphology: Binary image dilation P407
-
实验内容与步骤
实验数据文件目录结构
Matlab代码实现
实验结果展示与分析
-
第三章 形态学运算:基于二值图像的开运算与闭运算(参考文献:P410)
- 实验流程描述了该算法的具体实现步骤
- 文件组织架构设计遵循模块化原则以确保数据处理效率
- 软件实现部分采用了Matlab平台进行开发以保证功能完整性
- 运行结果展示通过可视化分析验证了算法的有效性
-
四、Morphology: Binary Images - Boundary Extraction (P413)
- 4.1 Experimental Protocol
- 4.2 File Organization Structure
- 4.3 Matlab Scripts
- 4.4 Experimental Outcomes
-
第五章 形态学:二值图像 —— 填充孔隙 P414
- 5.1 实验内容概述
- 5.2 文件目录组织形式
- 5.3 Matlab程序实现方案
- 5.4 实验结果展示与分析
-
六、形态学:二值图像 - 利用开操作进行重建(见第424页)
- 6.1 实验任务描述
- 6.2 文件组织架构
- 6.3 基于Matlab的程序实现
- 6.4 实验运行结果分析
- 6.1 实验任务描述
-
第七章、数学形态学:黑白图像 --- 孔洞填充(第425页)
- 7.1 实验项目
- 7.2 文件系统架构
- 7.3 Matlab源代码
- 7.4 运行结果
第八章 形态学:二值图像---边界清除(第426页)
其中
7.1 实验的具体内容
7.2 基于Matlab的代码实现
7.3 数据文件的组织结构
7.4 实验结果分析
第九章形态学研究:灰度图像---腐蚀与膨胀(第429页)
-
十章 形态学分析:灰度级数及其开闭运算(见P431)
- 第十章实验任务描述
- 第十章文件组织架构
- 第十章 Matlab编程实现
- 第十章实验结果展示
-
十一、形态学:基于灰度图像进行形态学处理 P432
- 第十一章 实验任务描述
- 第十一章 文件存储结构安排
- 第十一章 Matlab程序代码实现
- 第十一章 实验运行结果记录
-
十二、形态学分析:灰度级图像 --- 形态学梯度 P_{432}
- 第十二章第一节 实验任务描述
- 第十二章第二节 文件组织架构
- 第十二章第三节 Matlab程序实现
- 第十二章第四节 实验输出分析
- 第十二章第三节 Matlab程序实现
- 第十二章第二节 文件组织架构
- 第十二章第一节 实验任务描述
-
十三、数学形态学:灰度级数 --- 开闭运算 P433
- 13.1 实验方案设计
- 13.2 数据文件组织架构
- 13.3 程序源代码编写
- 13.4 运行结果记录
-
十四、形态学分析:基于灰度级数的纹理分割(P435)
- 第十四章 实验设计
- 第一节 数据组织结构
- 第二节 软件实现方案
- 第三节 结果展示与分析
- 第十四章 实验设计
-
十五、数学形态学:灰度图像(Morphological Reconstruction) P437
- 第15章 实验任务描述
- 第一节 数据文件组织架构设计说明
- 第二节 基于Matlab的算法实现方案
- 第三节 实验结果分析与评估指标体系构建步骤说明
- 第15章 实验任务描述
实验使用的教材配套图片资源:数字图像处理-冈萨雷斯-第三版(教材配图)
实验中涉及的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)最后的重建结果');
代码解读
15.4 实验结果

