实验6 形态学图像处理

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 01 1 10 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.mzph.cn/pingmian/38205.shtml

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

相关文章

C语言 统计字符类型个数

这个程序读取用户输入的一行字符&#xff0c;并统计其中的英文字母、空格、数字和其他字符的个数。 #include <stdio.h> #include <ctype.h>int main() {char ch;int letters 0, spaces 0, digits 0, others 0;printf("输入一行字符: ");// 逐字符读…

PMBOK® 第六版 结束项目或阶段

目录 读后感—PMBOK第六版 目录 不论是阶段的收尾还是项目整体的收尾&#xff0c;都应是令人振奋的事。然而&#xff0c;在实际生活中&#xff0c;收尾工作却相当艰难。会遭遇负责人调离、换任&#xff0c;导致不再需要已购产品&#xff1b;项目收尾时对照招标文件或合同&…

51-61 CVPR 2024 最佳论文 | Rich Human Feedback for Text-to-Image Generation

23年12月&#xff0c;加州大学圣地亚哥、谷歌研究院、南加州大学、剑桥大学联合发布Rich Human Feedback for Text-to-Image Generation论文。 作者受大模型中RLHF技术的启发&#xff0c;用人类反馈来改进Stable Diffusion等文生图模型&#xff0c;提出了先进的RichHF-18K数据…

足球虚拟越位线技术FIFA OT(一)

此系列文章用于记录和回顾开发越位线系统的过程&#xff0c;平时工作较忙&#xff0c;有空时更新。 越位线技术 越位技术已被用于图形化分析足球中潜在的越位情况。 自 2018 年将视频助理裁判 &#xff08;VAR&#xff09; 引入比赛规则以来&#xff0c;人们越来越关注准确确…

完美世界|单机版合集(共22个版本)

前言 我是研究单机的老罗&#xff0c;今天给大家带来的是完美世界的单机版合集&#xff0c;一共22个版本。本人亲自测试了一个版本&#xff0c;运行视频如下&#xff1a; 完美世界|单机版合集 先看所有的版本的文件&#xff0c;文件比较大&#xff0c;准备好空间&#xff0c;差…

C#高级语法之特性

自定义特性和使用 什么是特性 特性&#xff08;attribute&#xff09;是一种允许我们向程序的程序集增加元数据的语言结构&#xff0c;它是用于保存程序结构信息的某种特殊类型的类。 将应用了特性的程序结构叫做目标设计用来获取和使用元数据的程序&#xff08;对象浏览器&a…

Transformer详解encoder

目录 1. Input Embedding 2. Positional Encoding 3. Multi-Head Attention 4. Add & Norm 5. Feedforward Add & Norm 6.代码展示 &#xff08;1&#xff09;layer_norm &#xff08;2&#xff09;encoder_layer1 最近刚好梳理了下transformer&#xff0c;今…

【VScode】常用配置

1.indenticator 增加白色竖条&#xff0c;显示方法范围 2.Git Graph 给git变换分支增添颜色区分 3.Vue 系列 vue 系列&#xff1a;给纯白色代码添加 颜色区分 3.eslint eslint警告&#xff0c;比如{ } 只写了半个会标红提示错误 等错误信息提示 需要配置js等页面 非下…

1.linux操作系统CPU负载

目录 概述CPU平均负载查看平均负载结束 概述 CPU 使用率 和CPU 平均使用率。 CPU平均负载 单位时间内系统处于 [可运行状态] 和 [不可中断状态] 的平均进程数&#xff0c;就是平均活跃进程数&#xff0c;和CPU使用率并没有直接关系 可运行状态 正在使用CPU或者正等待CPU的进…

【Elasticsearch】linux使用supervisor常驻Elasticsearch,centos6.10安装 supervisor

背景&#xff1a; linux服务器&#xff0c;CentOS 6操作系统&#xff0c;默认版本python2.6.6&#xff0c;避免安装过多的依赖不升级python 在网上查的资料python2.6.6兼容supervisor版本 3.1.3 安装supervisor 手动在python官网下载supervisor&#xff0c;并上传到服务器 下…

量化交易心法——如何建立自己的算法交易事业

量化交易,也称算法交易,是严格按照将计算机算法程序给出的买卖决策进行的证券交易。 一、 什么人适合成为量化交易员 做量化交易并不一定需要特别高的学历,只要具备一定的金融学以及统计学知识,有一定的经济基础,不需要用交易的收益来维持日常生活,因为并不是很快就能找…

Linux_动、静态库

目录 一、静态库 1、静态库的概念 2、制作静态库的指令 3、制作静态库 4、链接静态库 二、动态库 1、动态库的概念 2、制作动态库的指令 3、制作动态库 4、链接动态库 5、动态库的加载 三、静态库与动态库的区别 结语 前言&#xff1a; 在Linux下大部分程序进…

第2章 数据存储篇

目录 2.1 MongoDB&#xff1a;面向文档的灵活存储 2.1.1 MongoDB基础与架构 2.1.1.1基本概念 2.1.1.2MongoDB安装与配置 1&#xff09;安装MongoDB-Linux安装示例&#xff08;以Ubuntu为例&#xff09; 2&#xff09;更新包列表并安装MongoDB 3&#xff09;启动MongoDB服…

利用OPT算法解决最短访问次数问题

一、题目 数据库缓存&#xff0c;模拟访问规则如下&#xff1a; 当查询值在缓存中&#xff0c;直接访问缓存&#xff0c;不访问数据库。否则&#xff0c;访问数据库&#xff0c;并将值放入缓存。 若缓存已满&#xff0c;则必须删除一个缓存。 给定缓存大小和训练数据&#xff…

对代理模式和动态代理以及AOP的一些理解

代理模式&#xff1a; 代理模式&#xff0c;也叫做静态代理&#xff0c;是一种结构型设计模式&#xff0c;它为其他对象提供了一种代理&#xff0c;以控制对这个对象的访问。 代理模式可以在不修改原有类的情况下&#xff0c;对其功能进行扩展&#xff0c;编译时就确定了代理…

【JavaEE】多线程代码案例(1)

&#x1f38f;&#x1f38f;&#x1f38f;个人主页&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;JavaEE专栏&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;上一篇文章&#xff1a;多线程&#xff08;2…

leetcode每日一练:顺序表OJ题

第一题&#xff1a;移除元素 题目要求&#xff1a;给一个数组nums和一个值val&#xff0c;你需要 原地 移除所有所有数值等于val的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用0(1)的额外空间并 原地 修改输入数组。 元素的顺序…

【Tools】AIGC:人工智能生成内容的新时代

那年夏天我和你躲在 这一大片宁静的海 直到后来我们都还在 对这个世界充满期待 今年冬天你已经不在 我的心空出了一块 很高兴遇见你 让我终究明白 回忆比真实精彩 &#x1f3b5; 王心凌《那年夏天宁静的海》 随着人工智能&#xff08;AI&#xff09;技术的…

三生随记——午夜咖啡馆

在城市的边缘&#xff0c;隐藏着一间古老的咖啡馆——“午夜咖啡馆”。它的外观不起眼&#xff0c;却总能在夜晚吸引那些寻找安宁或寻求刺激的顾客。据说&#xff0c;咖啡馆的老板是一位年长的绅士&#xff0c;他的脸上总是挂着神秘莫测的微笑。 艾米是一名作家&#xff0c;常常…

基于weixin小程序智慧物业系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;员工管理&#xff0c;房屋管理&#xff0c;缴费管理&#xff0c;车位管理&#xff0c;报修管理 工作人员账号功能包括&#xff1a;系统首页&#xff0c;维…