MATLAB数字图像处理 实验五:形态学图像处理

简介: MATLAB数字图像处理 实验五:形态学图像处理

一、实验目的

1、了解形态学的基本理论和方法。

2、掌握对图像进行开、闭、膨胀、腐蚀的方法。

二、实验环境

Matlab 2020B

三、实验内容

题目

任选一种结构算子实现对图像或目标的开、闭、腐蚀和膨胀运算。

2、采用形态学处理方法实现图像去噪。

3、对图像分割实验(实验四)得到的分割结果进行形态学处理,对肺部区域的空洞进行填充。

*4、请用形态学算法生成只包含边界接触的圆形。(选做题)

相关知识

图像的形态学描述与处理都基于填放结构元素的概念。结构元素的选择与从图像中抽取何种信息有密切关系。图像的形态学基本操作有腐蚀(Erosion)、膨胀(Dilation)、开(Opening)、闭(Closing)四种。利用这几种形态学操作,可以完成图像分割、特征抽取、边缘检测、图像增强等工作。

腐蚀操作是形态学最基本的操作之一。宏观上看,腐蚀运算可以使被处理的图像缩小,消除图像的边界,消除图像中小于结构元素大小的部分。如果图像中两部分存在细小的连通“桥”,则腐蚀运算可以将这一连通消除。腐蚀运算的算法如下:用结构元素,扫描图像中的每一个像素。用结构元素与其覆盖的二值图像做与运算。若结构元素的与元素都为1,则图像的该像素值置为1,否则值置为0。

膨胀操作与腐蚀操作相反,是腐蚀操作的逆运算。膨胀操作可以使被处理的图像增大,扩充图像边界的凹陷部分,填充图像中比结构元素小的空洞。对于多个不同的连通域,若存在缝隙,则填满该缝隙。膨胀运算的算法如下:用结构元素扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”运算。如果都为0,结果图像该像素为0,否则为1。

形态学的开操作是先用结构元素进行腐蚀操作,而后再用腐蚀的结果再次进行膨胀操作。开操作能使得对象的轮廓变得光滑,断开狭窄的间断、消除细的突出物。

形态学的闭操作就是用结构元素对原图像先进行膨胀操作,后进行腐蚀操作,使得轮廓变得光华,但与开操作相反,用于消除狭窄的间断和鸿沟,消除小的空洞,填补轮廓线中的断裂。

对于灰度图像,也可以进行形态学操作。灰度图像的形态学操作对应了本次实验课的第二题。

设形态学操作的结构元素为b(s,t),原图像为f(x,y)

在腐蚀操作中,对于腐蚀后图像的每个像素点,其灰度值被更新为fb重合区域的最小灰度值。即:

image.png

在膨胀操作中,对于膨胀后图像的每个像素点,其灰度值被更新为fb的补集的重合区域的最大灰度值。即:

image.png

本次实验的第四题是利用形态学操作进行一些简单的应用。

为了识别出图像各个圆形的边界,需要进行边界提取。由结构元素对原图像先进行腐蚀,再用原图像减去腐蚀后的图像,就能得到图像的边界。根据图像的边界,可以根据图像边界的周长判断哪些圆是独立的,哪些圆是与另外的圆互相连通的。利用这一种办法,提取出了图像中所有的连通分量。

在提取完连通分量,分离出与其他圆互相连通的圆后,就需要进行区域填充。为了自动地区分出哪些黑色像素点是圆内部的空洞、哪些黑色像素点是圆外部的背景,可以迭代的利用膨胀操作进行填充,直到图像不再发生任何变化。

核心代码

I=imread("lab5_1.tif");
se = strel('line',10,10);
subplot(1,2,1);imshow(I);
I=imerode(I,se);
subplot(1,2,2);imshow(I);

随意地选取了一个线性的结构元素,对图像进行腐蚀操作。

I=imread("lab5_1.tif");
se = strel('line',5,5);
subplot(1,2,1);imshow(I);
I=imdilate(I,se);
subplot(1,2,2);imshow(I);

随意选取了一个线性结构元素,对图像进行膨胀操作。

I=imread("lab5_1.tif");
se = strel('line',10,10);
subplot(1,2,1);imshow(I);
I=imopen(I,se);
subplot(1,2,2);imshow(I);

随意选取了一个线性结构元素,对图像进行开操作。

I=imread("lab5_1.tif");
se = strel('disk',6,6);
subplot(1,2,1);imshow(I);
I=imclose(I,se);
subplot(1,2,2);imshow(I);

随意选取了一个线性结构元素,对图像进行闭操作。

I=imread("lab5_2.bmp");
%subplot(2,3,1);imshow(I);
J1=imerode(I,strel('disk',3));
%subplot(2,3,2);imshow(J1);
J2=imdilate(J1,strel('disk',1));
%subplot(2,3,3);imshow(J2);
J3=imcomplement(J2);
%subplot(2,3,4);imshow(J3);
J4=imclose(J3,strel('square',2));
%subplot(2,3,5);imshow(J4);
J5=imcomplement(J4);
%subplot(2,3,6);imshow(J5);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J5);

对于题目2中的图像,首先去除黑噪点。灰度图像的形态学处理已在上文介绍。首先,利用腐蚀操作与膨胀操作,先去除黑噪点。为了去除白噪点,还需要将图像的灰度级翻转,并再次利用相反的方法处理白噪点。利用闭操作,即先膨胀,再腐蚀,将白噪点消除。最后,将图像的灰度级再次翻转。最后输出的图像就是处理掉了黑色噪点与白色噪点的图像。

I=imread("lab4_out.jpg");
se = strel('disk',3);
J=imclose(I,se);
subplot(2,2,1);imshow(I);title('原图');
subplot(2,2,2);imshow(J);title('disk半径3');
J=imclose(I,strel('disk',10));
subplot(2,2,3);imshow(J);title('disk半径10');
J=imclose(I,strel('disk',7));
subplot(2,2,4);imshow(J);title('disk半径7');

对于实验4中的肺部图像,需要经过多次试验找到最合适disk圆盘形状的结构元素。在结果展示章节,会体现:结构元素半径过小不合适,结构元素半径过大也不合适。

I=imread("lab5_3.tif");
%subplot(2,2,1);imshow(I);
[h,w]=size(I);
A=I;
B=imerode(I,strel('disk',1));
C=A-B;
%subplot(2,2,2);imshow(C);
L=bwlabel(C,8);
s=regionprops(L,'Perimeter');
J2=ismember(L,find([s.Perimeter]>=200));
%subplot(2,2,3);imshow(J2);
Jc=imcomplement(J2);
marker=zeros(h,w);
marker(1,:)=1;
marker(h,:)=1;
marker(:,1)=1;
marker(:,w)=1;
while 1
    marker_pre=marker;
    dilation=imdilate(marker,strel('disk',1));
    marker=dilation.*Jc;
    if marker_pre==marker
        J3=marker;
        break;
    end
end
J3=imcomplement(J3);
%subplot(2,2,4);imshow(J3)
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J3)

对于题目4,首先需要像进行图像的边界提取。在边界提取的过程中也进行了腐蚀操作,腐蚀操作能够将肉眼看上去互相接触但实际上却没有接触的不同圆形也分离。之后,根据图像边界的周长,判断哪些圆是互相接触的,哪些圆没有互相接触。在本实验中,可以认为周长大于等于200的连通域是有互相接触的圆,而周长小于等于200的连通域没有互相接触的圆。在判断圆是否互相接触后,对这些圆内部的空洞进行填充,即边界提取的反向操作。最后,利用形态学操作得到了只包含边界接触的圆形。

实验结果

利用线性结构元素对图像进行腐蚀操作,可以看到连接线被明显地消除了。图像中心的圆角矩形边界也减小了一圈,图像周围的各个连通域也缩小了一圈。

利用线性结构元素对图像进行膨胀操作,可以看到连接线被明显地加粗了。图像中心的圆角矩形边界也扩大了一圈,图像周围的各个连通域也扩大了一圈。

利用线性结构元素对图像进行开操作,可以看到细小的连接线被消除了。但图像中心的圆角矩形边界保持不变,没有扩大没有缩小。图像周围的各个连通域也没有扩大没有缩小。

利用线性结构元素对图像进行闭操作,可以看到输出图像与原图像并无较大区别。但是,在图像中心的圆角矩形和直线间存在一部分狭小的空隙,这一部分空隙却被填充了。图像周围的部分与直线之间也存在空隙,而这些空隙也被填充了。

首先,使用腐蚀和膨胀操作消除图像黑色背景区域中的灰黑色噪声像素点。将图像的灰度值翻转,利用闭操作再消除图像出现的白色噪声像素点。最后,将消除了噪声的图像再次翻转,得到了背景为黑色且消除了噪声点的输出图像。输出图像与原图的对比如图9所示。可以看到,在去噪的同时也丢失了部分细节。但背景区域的大量噪点都被去除了。

为了对肺部图像进行填充,需要尝试不同的半径的结构元素作为参数。当半径过小时(半径为3),肺部仍然有一些部分不能得到填充。当半径过大时(半径为10),两个肺部区域被错误地连通了。只有当半径为7时,不仅能够正确地填充肺部内部区域,而且不同的肺部区域不会被连通。

利用形态学算法提取出只包含边界接触的圆时,先提取出这些圆的边界信息,利用边界的周长信息判断哪些连通域属于不同的圆连通在了一起,并认为周长大于等于200的连通域属于不同的圆连通在了一起。如图11.3所示,只保留这些周长大于等于200的连通域。最后,对这些连通域边界,对其内部的空洞重新进行填充,如图11.4所示。如图12,为实验题目4的整体效果。

四、实验小结


目录
相关文章
|
6月前
|
计算机视觉
图像处理基础篇-形态学处理-边缘检测(matlab仿真与图像处理系列第4期)
图像处理基础篇-形态学处理-边缘检测(matlab仿真与图像处理系列第4期)
|
3月前
|
计算机视觉
【图像处理】基于灰度矩的亚像素边缘检测方法理论及MATLAB实现
基于灰度矩的亚像素边缘检测方法,包括理论基础和MATLAB实现,通过计算图像的灰度矩来精确定位边缘位置,并提供了详细的MATLAB代码和实验结果图。
87 6
|
3月前
|
计算机视觉
【图像处理】基于Zernike矩的亚像素边缘检测理论及MATLAB实现
基于Zernike矩的亚像素边缘检测理论,并提供了相应的MATLAB代码实现,包括定义7x7的Zernike模板、图像处理、边缘检测和连通域分析等步骤。
103 1
|
5月前
|
机器学习/深度学习 数据可视化 算法
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
49 0
|
6月前
|
机器学习/深度学习 算法 计算机视觉
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)
|
6月前
|
编解码 并行计算 算法
如何在 MATLAB 中进行图像分割(matlab仿真与图像处理系列第7期)
如何在 MATLAB 中进行图像分割(matlab仿真与图像处理系列第7期)
|
6月前
|
计算机视觉
数字图像处理笔记(一)Matlab实现直方图均衡化
数字图像处理笔记(一)Matlab实现直方图均衡化
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
169 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
3月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
120 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
3月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
86 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码