实验6 形态学图像处理

news2024/10/5 17:16:51

1. 实验目的

①掌握数字图像处理中,形态学方法的基本思想;
②掌握膨胀、腐蚀、开运算、闭运算等形态学基本运算方法;
③能够利用形态学基本运算方法,编程实现图像去噪,边界提取等功能。

2. 实验内容

①调用Matlab / Python+OpenCV中的相关函数,实现图像的膨胀、腐蚀、
开、闭运算。
②调用Matlab / Python+OpenCV中的相关函数,使用形态学基本算法,实
现图像去噪,并改变结构元素的尺寸和形状,观察去噪效果。
③调用Matlab / Python+OpenCV中的相关函数,实现对二值图像的边界提
取。
④自行编写代码,实现图像细化。

3. 实验过程

3.1 形态学基本运算

调用Matlab / Python+OpenCV库中的函数,实现图像的膨胀、腐蚀、开、闭运算。

3.1.1 图像的膨胀与腐蚀

选择或设计合适的二值图像,使用相同的结构元素对图像分别进行3次膨胀和3次腐蚀操作,记录图像的变化过程与结果。
⑴ 主要调用的函数、功能及参数说明

函数名函数功能参数说明
imread(A)读取图片A:图片在文件夹的位置
imdilate(A,B)膨胀函数A:图片 B:膨胀的结构元素
imerode(A,B)腐蚀函数A:图片 B:腐蚀的结构元素
stel(A,n)构建结构元素A:结构类型 n:结构元素大小
**⑵ 源代码及实验结果(添加必要注释)**
image=imread('lena.png');
A1=im2bw(image);
%imdilate膨胀
B=[0 1 0
   1 1 1
   0 1 0];
A2=imdilate(A1,B);%图像A1被结构元素B膨胀
A3=imdilate(A2,B);
A4=imdilate(A3,B);
%imerode腐蚀
%strel函数的功能是运用各种形状和大小构造结构元素
se1=strel('disk',1);%这里是创建一个半径为1的平坦型圆盘结构元素
B2=imerode(A1,se1);
B3=imerode(B2,se1);
B4=imerode(B3,se1);

figure;
subplot(221),imshow(A1);title('imdilate膨胀原始图像');
subplot(222),imshow(A2);title('使用B后1次膨胀后的图像');
subplot(223),imshow(A3);title('使用B后2次膨胀后的图像');
subplot(224),imshow(A4);title('使用B后3次膨胀后的图像');

figure;
subplot(221),imshow(A1);title('imerode腐蚀原始图像');
subplot(222),imshow(B2);title('使用结构原始disk(1)后1次腐蚀后的图像');
subplot(223),imshow(B3);title('使用结构原始disk(1)后2次腐蚀后的图像');
subplot(224),imshow(B4);title('使用结构原始disk(1)后3次腐蚀后的图像');

在这里插入图片描述
⑶ 总结

膨胀:将模板与以每个像素为中心的33矩阵做点乘,并求和结果矩阵,如果结果大于0,则表示矩阵范围内有1值,可膨胀。腐蚀:将模板与以每个像素为中心的33矩阵做点乘,并求和结果矩阵,则表示模板中所有的像素都为1值,不可腐蚀。

3.1.2 图像的开运算与闭运算

选择或设计合适的二值图像,分别对图像进行开操作、闭操作、先开后闭操作和先闭后开操作,并记录图像的变化过程与结果。
⑴ 主要调用的函数、功能及参数说明

函数名函数功能参数说明
imread(A)读取图片A:图片在文件夹的位置
imdilate(A,B)膨胀函数A:图片 B:膨胀的结构元素
imerode(A,B)腐蚀函数A:图片 B:腐蚀的结构元素
stel(A,n)构建结构元素A:结构类型 n:结构元素大小
imopen(A,B)开运算函数A:图片 B:开运算的结构元素
imclose(A,B)闭运算函数A:图片 B:闭运算的结构元素
im2bw(A)二值转化A:图片

⑵ 源代码及实验结果(添加必要注释)

image=imread('lena.png');
A1=im2bw(image);
se=strel('disk',2);%圆盘型结构元素

B1=imdilate(A1,se);%膨胀
C1=imerode(B1,se);%先膨胀再腐蚀 闭运算
B2=imerode(A1,se);%腐蚀
C2=imdilate(B2,se);%先腐蚀后膨胀 开运算

B3=imerode(C1,se);%腐蚀闭运算后图像
C3=imdilate(B3,se);%先腐蚀后膨胀 先闭后开
B4=imdilate(C2,se);%膨胀开运算后图像
C4=imerode(B4,se);%先膨胀再腐蚀 先开后闭

figure,
subplot(231),imshow(A1);title('原始图像');
subplot(232),imshow(C2);title('开运算');
subplot(233),imshow(C1);title('闭运算');
subplot(235),imshow(C4);title('先开后闭运算');
subplot(236),imshow(C3);title('先闭后开运算');

在这里插入图片描述
⑶ 总结
开运算消除图像毛刺以及椒盐噪声;闭运算可以填平轮廓内部缺失部分。

3.2 形态学图像去噪

选择或设计合适的二值图像,在Matlab / Python+OpenCV中,调用相关函数,综合使用形态学算法,实现图像去噪;尝试改变结构元素的大小和形状,观察去噪效果;使用不同的图像,观察去噪效果。
⑴ 主要调用的函数、功能及参数说明

函数名函数功能参数说明
imread(A)读取图片A:图片在文件夹的位置
imdilate(A,B)膨胀函数A:图片 B:膨胀的结构元素
imerode(A,B)腐蚀函数A:图片 B:腐蚀的结构元素
stel(A,n)构建结构元素A:结构类型 n:结构元素大小
im2bw(A)二值转化A:图片

⑵ 源代码及实验结果(添加必要注释)

image=imread('lena.png');
Y1=imnoise(image,'salt & pepper',0.02);%椒盐
A1=im2bw(Y1);

se=strel('disk',1);%创建一个半径为1的平坦型圆盘结构元素
se1=strel('disk',2);%创建一个半径为2的平坦型圆盘结构元素
se2=strel('square',2);%创建2*2的正方形结构元素
se3=strel('square',3);%创建3*3的正方形结构元素

B1=imerode(A1,se);%腐蚀
C1=imdilate(B1,se);%先腐蚀后膨胀 开运算
B2=imerode(A1,se1);%腐蚀
C2=imdilate(B2,se1);%先腐蚀后膨胀 开运算
B3=imerode(A1,se2);%腐蚀
C3=imdilate(B3,se2);%先腐蚀后膨胀 开运算
B4=imerode(A1,se3);%腐蚀
C4=imdilate(B4,se3);%先腐蚀后膨胀 开运算

figure,
subplot(231),imshow(A1);title('二值化噪音原图');
subplot(232),imshow(C1);title('半径为1圆盘结构元素');
subplot(233),imshow(C2);title('半径为2圆盘结构元素');
subplot(235),imshow(C3);title('2*2的正方形结构元素');
subplot(236),imshow(C4);title('3*3的正方形结构元素');

在这里插入图片描述

3.3 形态学边界提取

选择或设计合适的二值图像,在Matlab / Python+OpenCV中,调用相关函数,综合使用形态学算法,实现对图像的边界提取。
⑴ 主要调用的函数、功能及参数说明

函数名函数功能参数说明
imread(A)读取图片A:图片在文件夹的位置
rgb2gray(A)灰度转化A:图片
graythresh(A)最大类间方差法找阈值A:灰度图片
bwperim (A)查找二值图像的边缘A:图片
entropyfilt (A)创建纹理图像A:图片
mat2gray((A)矩阵转灰度图像A:图片
im2bw(A)二值转化A:图片
bwareaopen(A)提取区域纹理A:提取条件
rangefilt(A,B)rangefilt滤波A:图片 B:矩阵

⑵ 源代码及实验结果(添加必要注释)

%边缘代码一:
image=imread('lena.png');

A=rgb2gray(image);
B=graythresh(A);%使用最大类间方差法找到图片的一个合适的阈值
B1=im2bw(A,B);%将输入图像中亮度大于B的所有像素替换为值1(白色),将所有其他像素替换为值0(黑色)
C=bwperim(B1);%查找二值图像的边缘

subplot(1,2,1),imshow(A),title('原图像');
subplot(1,2,2),imshow(C),title('边缘提取后的图像');

%边缘代码二:
% image=imread('D:\picture\1.jpg');
% img=rgb2gray(image);
% 
% img_1 = entropyfilt(img);  %创建纹理图像
% img_2 = mat2gray(img_1);  %转化为灰度图像
% img_3 = im2bw(img_2,0.7);  %转化为二值图像
% img_4 = bwareaopen((1-img_3),3000,8); %提取区域纹理
% img_5= rangefilt (img,ones(7));  %rangefilt滤波
% 
% subplot(2,3,1),imshow(img),title('原图像');
% subplot(2,3,2),imshow(img_2),title('纹理图像');
% subplot(2,3,3),imshow(img_3),title('二值图像');
% subplot(2,3,4),imshow(img_4),title('不同区域纹理图像');
% subplot(2,3,5),imshow(img_5),title('滤波后图像');

在这里插入图片描述
⑶ 总结
MATLAB工具中提供了用于边缘提取的bwperim( )函数,由bwperim( )函数可以实现各算子对图像边缘的提取。

4. 实验小结

①为了更好的观察和对比不同形态学运算的效果,应如何设计或选择实验图像?
答:颜色特征、形状特征、纹理特征、空间关系特征,描述了图像或图像区域所对应的景物的表面性质。由于颜色对图像或图像区域的方向、大小等变化不敏感,所以颜色特征不能很好的捕捉图像中对象的局部特征。形状特征是统计特征,纹理特征常具有旋转不变性,并且对于噪声有较强的抵抗能力。

②使用同样的结构元素对同一副图像先膨胀后腐蚀,和先腐蚀后膨胀,得到的结果一样吗?增加膨胀和腐蚀的次数,会得到怎样的效果?
答:不同。
膨胀操作会扩大(粗化)图像中物体的轮廓,可以用来弥补(填充)物体间的孔洞,强化离散点,代价是导致物体的面积比原来的面积要大。腐蚀操作会收缩(细化)图像中物体的轮廓,可以用来断开(分离)物体间的连接,消除离散点,代价是导致物体的面积比原来的面积要小。

③应用形态学方法对图像去噪时,结构元素的形状和大小会怎样影响去噪结果?
答:结构元素在形态学中的作用类似于信号处理时的“滤波窗口”其形状和大小将直接影响形态滤波的输出结果

④查阅资料,并结合实验结果,简述形态学方法的主要应用,并思考其具备哪些优点、不足和局限性。
答:消除噪声、边界提取、区域填充、连通分量提取、凸壳、细化、粗化等;分割出独立的图像元素,或者图像中相邻的元素;求取图像中明显的极大值区域和极小值区域;求取图像梯度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1880075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据资产铸就市场竞争优势:运用先进的数据分析技术,精准把握市场脉搏,构建独特的竞争优势,助力企业实现市场领先地位,赢得持续成功

目录 一、引言 二、数据资产的重要性 三、先进数据分析技术的应用 1、大数据分析技术 2、人工智能与机器学习 3、数据可视化技术 四、精准把握市场脉搏 1、深入了解客户需求 2、预测市场趋势 3、优化资源配置 五、构建独特的竞争优势 1、定制化产品和服务 2、精准营…

计算机网络原理及应用

第一章 计算机网络概述 【1】局域网 局域网是指在某一区域内由多台计算机互联而成的计算机通信网络。 【1】互通 两个网络之间可以交换数据。 第二章 计算机网络的体系结构 【1】语义 何时发出何种控制信息,完成何种动作以及做出何种响应。 【2】简述网络协…

1Panel运维利器:功能详解与实操指南

官网地址:https://1panel.cn/ 1Panel简介 1Panel是杭州飞致云信息科技有限公司旗下产品,是一款现代化、开源的Linux服务器运维管理面板,于2023年3月推出。 名称:1Panel开源Linux面板 所属公司:杭州飞致云信息科技有限公司 编写语…

【C++】————string基础用法及部分函数底层实现

作者主页: 作者主页 本篇博客专栏:C 创作时间 :2024年6月30日 前言: 本文主要介绍STL容器之一 ---- string,在学习C的过程中,我们要将C视为一个语言联邦(摘录于Effective C 条款一&#x…

智能旅行规划的未来:大模型与形式化验证的融合

我们在做旅行规划时面对众多的目的地选择、复杂的交通连接、预算限制以及个人偏好等多重因素,即使是最有经验的旅行者也可能会陷入选择困境。传统的旅行规划方法往往依赖于人工操作,这不仅耗时耗力,而且难以保证计划的最优性和可执行性。 本…

Linux——/etc/passwd文件含义,grep,cut

/etc/passwd文件含义 作用 - 记录用户账户信息:共分为7段,使用冒号分割 含义 - 文件内容意义:账户名:密码代号x:UID:GID:注释:家目录:SHELL - 第7列/sbin/nologin&#x…

sheng的学习笔记-AI-聚类(Clustering)

ai目录 sheng的学习笔记-AI目录-CSDN博客 基础知识 什么是聚类 在“无监督学习”(unsupervised learning)中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。此类学…

WAIC2024 | 华院计算邀您共赴2024年世界人工智能大会,见证未来科技革新

在智能时代的浪潮汹涌澎湃之际,算法已成为推动社会进步的核心力量。作为中国认知智能技术的领军企业,华院计算在人工智能的广阔天地中,不断探索、创新,致力于将算法的潜力发挥到极致。在过去的时日里,华院计算不断探索…

昇思25天学习打卡营第7天|模型训练

模型训练 模型训练一般分为四个步骤: 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 前面几天依次学习了前面几个步骤的操作,今天继续学习模型训练。 数据集和神经网络模型这个前面已经有详细的介绍。准确…

力扣SQL50 连续出现的数字 distinct

Problem: 180. 连续出现的数字 👨‍🏫 力扣官解 Code SELECT DISTINCTl1.Num AS ConsecutiveNums FROMLogs l1,Logs l2,Logs l3 WHEREl1.Id l2.Id - 1AND l2.Id l3.Id - 1AND l1.Num l2.NumAND l2.Num l3.Num ;

线程安全问题(二)——死锁

死锁 前言可重入锁逻辑 两个线程两把锁(死锁)死锁的特点多个线程多把锁(哲学家就餐问题)总结 前言 在前面的文章中,介绍了锁的基本使用方式——锁 在上一篇文章中,通过synchronized关键字进行加锁操作&am…

只需10分钟1条,全是原创精美视频,拆分8个步骤详细讲解!

不少朋友在问如何快速学习剪辑视频,网上还有很多在收几百到几千学费。其实所有的付费,都是认知与信息差。 这篇文章我直接讲干货,内容不多,大概3分钟可以看完。所有步骤都是富哥亲测的内容,每条视频长达1分钟以上&…

检索增强生成RAG系列4--RAG优化之问题优化

在系列2的章节中罗列了对RAG准确度的几个重要关键点,主要包括2方面,这一章就针对其中问题优化来做详细的讲解以及其解决方案。 从系列2中,我们知道初始的问题可能对于查询结果不是很好,可能是因为问题表达模糊、语义与文档不一致等…

职场必备:三大神器助你完美驾驭工作与生活;从 GTD 到SMART再到OKR:提升效率的终极指南;告别拖延,高效工作的秘密武器!

在现代职场和个人生活中,有效的时间管理和目标设定是成功的关键。我们每天都面临着无数的任务和目标。如何在纷繁复杂的日常中保持专注,高效地完成工作? GTD(Getting Things Done) GTD(Getting Things Don…

容器技术-docker4

一、docker资源限制 在使用 docker 运行容器时,一台主机上可能会运行几百个容器,这些容器虽然互相隔离,但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制,那么容器之间会互相影响,小的来说…

Qt:5.QWidget属性介绍(isEnabled和geometry)

目录 一、 QWidget属性的介绍: 二、Enabled属性: 2.1Enabled属性的介绍: 2.2获取控件当前可用状态的api——isEnabled(): 2.3设置控件当前的可用状态的api—— setEnabled() : 2.4 实例:通过一个按钮&…

Gin框架基础

1、一个简单的Gin示例 下载并安装Gin: go get -u github.com/gin-gonic/gin1.1 一个简单的例子 package mainimport ("net/http""github.com/gin-gonic/gin" )func main() {// 创建一个默认的路由引擎r : gin.Default()// 当客户端以GET方式访问 /hello…

企业化运维(6)_redis数据库

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 redis是一个key-value存储系统。和Memcached类似&#xff0…

优化模型验证30:多车场车辆路径问题模型及Gurobipy验证

目录 1 数学模型 1.1 用到的符号集合 1.2 模型公式 2 模型验证代码 2.1 Gurobipy代码 2.2 结果可视化 多车场车辆路径问题的定义:大型的物流公司拥有多个车场,而每个车场都有若干车辆用于配送,决策者需要根据客户的所在位置,将客户分配到合适的车场和车辆中。 1 数学模…

深度学习基准模型Transformer

深度学习基准模型Transformer 深度学习基准模型Transformer,最初由Vaswani等人在2017年的论文《Attention is All You Need》中提出,是自然语言处理(NLP)领域的一个里程碑式模型。它在许多序列到序列(seq2seq&#xf…