数字图像处理实验记录九(数字形态学实验)

一、基础知识

1.形态学,用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为有本质的形状特征,如边界连通区域等。
2.膨胀运算:膨胀会使目标区域范围“变大”,将于目标区域接触的背景点合并到该目标物中,使目标边界向外部扩张。作用就是可以用来填补目标区域中某些空洞以及消除包含在目标区域中的小颗粒噪声。
在这里插入图片描述

3.腐蚀运算:腐蚀可以使目标区域范围“变小”,其实质造成图像的边界收缩,可以用来消除小且无意义的目标物。
在这里插入图片描述

4.开运算就是先腐蚀再膨胀,闭运算就是先膨胀再腐蚀。

二、实验要求

在这里插入图片描述
在这里插入图片描述
1.读入图像1和2,并进行二值化处理(im2bw)。
2.分别选择方形、圆形和菱形结构对图1和图2进行腐蚀(imerode)处理、膨胀(imdilate)处理、开运算(bwmorph)和闭运算(bwmorph)。显示观察处理结果。
体会形态学各个处理操作的作用。
3.针对指纹图像3,设计基于形态学的处理程序,得到你所能达到的最佳处理效果的指纹图像。

三、实验记录

任务1:

读入图像1和2,并进行二值化处理(im2bw)。

p1 = imread('p1.png');
p2 = imread('p2.png');
hand = imread('hand.png');

p1 = rgb2gray(p1);
p2 = rgb2gray(p2);
hand = rgb2gray(hand);

figure('NumberTitle','off','Name','原图展示');
subplot(1,3,1);imshow(p1);title('图片1');
subplot(1,3,2);imshow(p2);title('图片2');
subplot(1,3,3);imshow(hand);title('指纹图片');

figure('NumberTitle','off','Name','任务一');
I1 = im2bw(p1);
I2 = im2bw(p2);
subplot(1,2,1);imshow(I1);title('二值化后图片1');
subplot(1,2,2);imshow(I2);title('二值化后图片2');
% 生成方形,圆形,菱形结构:
rectangle = strel('rectangle',[5 10]);   % 生成5x10大小的矩形
circle = strel('disk',5);           % 生成半径为5的圆形
square = strel('square',5);         % 生成5x5大小的正方形(也就是菱形)

任务2:

分别选择方形、圆形和菱形结构对图1和图2进行腐蚀(imerode)处理、膨胀(imdilate)处理、开运算(bwmorph)和闭运算(bwmorph)。显示观察处理结果。
体会形态学各个处理操作的作用。

figure('NumberTitle','off','Name','任务2.1.1 图片1腐蚀');
I1_imerode_retangle = imerode(I1,rectangle);
I1_imerode_circle = imerode(I1,circle);
I1_imerode_square = imerode(I1,square);
subplot(1,3,1);imshow(I1_imerode_retangle);title('图片1方形腐蚀');
subplot(1,3,2);imshow(I1_imerode_circle);title('图片1圆形腐蚀');
subplot(1,3,3);imshow(I1_imerode_square);title('图片1菱形腐蚀');

figure('NumberTitle','off','Name','任务2.1.2 图片1膨胀');
I1_imdilate_retangle = imdilate(I1,rectangle);
I1_imdilate_circle = imdilate(I1,circle);
I1_imdilate_square = imdilate(I1,square);
subplot(1,3,1);imshow(I1_imdilate_retangle);title('图片1方形膨胀');
subplot(1,3,2);imshow(I1_imdilate_circle);title('图片1圆形膨胀');
subplot(1,3,3);imshow(I1_imdilate_square);title('图片1菱形膨胀');

figure('NumberTitle','off','Name','任务2.1.3 图片1开运算');
I1_open_retangle = imopen(I1,rectangle);
I1_open_circle = imopen(I1,circle);
I1_open_square = imopen(I1,square);
subplot(1,3,1);imshow(I1_open_retangle);title('图片1方形开运算');
subplot(1,3,2);imshow(I1_open_circle);title('图片1圆形开运算');
subplot(1,3,3);imshow(I1_open_square);title('图片1菱形开运算');

figure('NumberTitle','off','Name','任务2.1.4 图片1闭运算');
I1_close_retangle = imclose(I1,rectangle);
I1_close_circle = imclose(I1,circle);
I1_close_square = imclose(I1,square);
subplot(1,3,1);imshow(I1_close_retangle);title('图片1方形闭运算');
subplot(1,3,2);imshow(I1_close_circle);title('图片1圆形闭运算');
subplot(1,3,3);imshow(I1_close_square);title('图片1菱形闭运算');



figure('NumberTitle','off','Name','任务2.2.1 图片2腐蚀');
I2_imerode_retangle = imerode(I2,rectangle);
I2_imerode_circle = imerode(I2,circle);
I2_imerode_square = imerode(I2,square);
subplot(1,3,1);imshow(I2_imerode_retangle);title('图片2方形腐蚀');
subplot(1,3,2);imshow(I2_imerode_circle);title('图片2圆形腐蚀');
subplot(1,3,3);imshow(I2_imerode_square);title('图片2菱形腐蚀');

figure('NumberTitle','off','Name','任务2.2.2 图片2膨胀');
I2_imdilate_retangle = imdilate(I2,rectangle);
I2_imdilate_circle = imdilate(I2,circle);
I2_imdilate_square = imdilate(I2,square);
subplot(1,3,1);imshow(I2_imdilate_retangle);title('图片2方形膨胀');
subplot(1,3,2);imshow(I2_imdilate_circle);title('图片2圆形膨胀');
subplot(1,3,3);imshow(I2_imdilate_square);title('图片2菱形膨胀');

figure('NumberTitle','off','Name','任务2.2.3 图片2开运算');
I2_open_retangle = imopen(I2,rectangle);
I2_open_circle = imopen(I2,circle);
I2_open_square = imopen(I2,square);
subplot(1,3,1);imshow(I2_open_retangle);title('图片2方形开运算');
subplot(1,3,2);imshow(I2_open_circle);title('图片2圆形开运算');
subplot(1,3,3);imshow(I2_open_square);title('图片2菱形开运算');

figure('NumberTitle','off','Name','任务2.2.4 图片2闭运算');
I2_close_retangle = imclose(I2,rectangle);
I2_close_circle = imclose(I2,circle);
I2_close_square = imclose(I2,square);
subplot(1,3,1);imshow(I2_close_retangle);title('图片2方形闭运算');
subplot(1,3,2);imshow(I2_close_circle);title('图片2圆形闭运算');
subplot(1,3,3);imshow(I2_close_square);title('图片2菱形闭运算');

任务3:

针对指纹图像3,设计基于形态学的处理程序,得到你所能达到的最佳处理效果的指纹图像。

% 还没找到合适的结果
figure('NumberTitle','off','Name','任务3.1 原图');
hand1 = hand;
imshow(hand1);
figure('NumberTitle','off','Name','任务3.2 处理后');
square = strel('square',9);
circle = strel('disk',2); 

hand = imerode(hand,circle);
hand = imerode(hand,circle);

circle1 = strel('disk',1); 
hand = imerode(hand,circle1);
circle3 = strel('disk',3); 
circle2 = strel('disk',2);
square1 = strel('square',1);
square2 = strel('square',2);
square4 = strel('square',4);
rectangle1_5 = strel('rectangle',[1 5]);
rectangle2_5 = strel('rectangle',[2 5]);
rectangle5_1 = strel('rectangle',[5 1]);
rectangle1_10 = strel('rectangle',[1 12]);
rectangle2_10 = strel('rectangle',[2 15]);
rectangle2_3 = strel('rectangle',[2 1]);
% hand = imdilate(hand,circle3);
hand = imdilate(hand,rectangle1_10);
hand = imdilate(hand,rectangle2_3);
hand = imdilate(hand,circle1);
% hand = imdilate(hand,square2);
% hand = imdilate(hand,circle2);
% rectangle3_1 = strel('rectangle',[3 1]);
% hand = imdilate(hand,rectangle3_1);
% hand = imdilate(hand,square1);
% hand = imdilate(hand,square1);
% hand = bwmorph(hand,'open');
% hand2 = imopen(hand,circle);
% hand3 = bwmorph(hand,'open');
% hand2 = imopen(hand,circle);
% circle = strel('disk',2); 
% hand3 = imclose(hand2,circle);
% hand2 = bwmorph(hand2,'remove');

imshow(hand)

四、实验结果

任务1:

读入图像1和2,并进行二值化处理(im2bw)。
在这里插入图片描述
在这里插入图片描述

任务2:

分别选择方形、圆形和菱形结构对图1和图2进行腐蚀(imerode)处理、膨胀(imdilate)处理、开运算(bwmorph)和闭运算(bwmorph)。显示观察处理结果。
体会形态学各个处理操作的作用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

任务3:

针对指纹图像3,设计基于形态学的处理程序,得到你所能达到的最佳处理效果的指纹图像。
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TCP和UDP相关问题(重点)——8.TCP的拥塞控制怎么实现的?

在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就会变坏,比如在高速公路上行驶的车辆,如果一时期内涌入了太多的车辆,道路将变得拥堵,交通状况变差。网络中也是一样&#…

STM32之USART

概述 串口通信,通用异步收发传输器(Universal Asynchronous Receiver/Transmitter ),简称UART;而USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步收发传输器。 USAR…

vue3+vite+ts 配置commit强制码提交规范配置 commitlint

配置 git 提交时的 commit 信息,统一提交 git 提交规范 安装命令: npm install -g commitizen npm i cz-customizable npm i commitlint/config-conventional commitlint/cli -D 文件配置 根路径创建文件 commitlint.config.js module.exports {// 继承的规…

ubuntu原始套接字多线程负载均衡

原始套接字多线程负载均衡是一种在网络编程中常见的技术,特别是在高性能网络应用或网络安全工具中。这种技术允许应用程序在多个线程之间有效地分配和处理网络流量,提高系统的并发性能。以下是关于原始套接字多线程负载均衡技术的一些介绍: …

MySQL之体系结构

华子目录 MySQL简介MySQL的特性MySQL版本MySQL常见版本 数据库排名网站MySQL结构体系查看最大连接数查询缓存配置情况 一条SQL语句执行流程 MySQL简介 MySQL是一个小型关系数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被sun公司10亿美金收购。2009年…

CTFshow web(php命令执行 45-49)

基础知识&#xff1a; 1.绕过cat使用&#xff1a; tac more less head tac tail nl od(二进制查看) vi vim sort uniq rev 2.绕过空格用&#xff1a; %09 <> ${IFS} $IFS$ {cat,fl*} %20 注&#xff1a; %09 ##&#xff08;Tab&#xff09; %20 ##&#xff08;spa…

负载均衡(3)

文章目录 一、HAProxy介绍企业版社区版版本对比HAProxy功能支持功能不具备的功能 二、编译安装HAProxy解决lua环境Centos 基础环境 编译安装HAProxy验证HAProxy版本HAProxy启动脚本配置文件启动haproxy验证haproxy状态查看haproxy的状态页面 三、HAProxy基础配置详解global配置…

基金是什么

一、基金是什么&#xff1f; 买基金就是委托别人帮我们投资&#xff0c;替我们买卖股票债券。 二、为什么委托别人&#xff1f; 因为我们不懂投资方面的知识&#xff0c;或者我们没有时间来做投资&#xff0c;那么就可以找专业人士帮我们投资。就像家长帮小孩报辅导班&#…

蓝桥杯(Web大学组)2022国赛真题:水果消消乐

思路&#xff1a; 记录点击次数&#xff0c;点击次数为1时&#xff0c;记录点击下标&#xff08;用于隐藏or消除&#xff09;、点击种类&#xff0c;点击次数为2时&#xff0c;判断该下标所对应种类与第一次是否相同 相同&#xff1a;两个都visibility:hidden &#xff08;占…

PV、UV、IP

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. PV1.1 PV 计算1.2 PV 的影响因素 2. UV2.1 UV 计算2.2UV 的影响因素 3. IP3.1 IP和UV①UV大于IP②UV小于IP 三者的关系PV 和 UV 前言 PV、UV、IP是我们在运…

网络学习:数据链路层VLAN原理和配置

一、简介&#xff1a; VLAN又称为虚拟局域网&#xff0c;它是用来将使用路由器的网络分割成多个虚拟局域网&#xff0c;起到隔离广播域的作用&#xff0c;一个VLAN通常对应一个IP网段&#xff0c;不同VLAN通常规划到不同IP网段。划分VLAN可以提高网络的通讯质量和安全性。 二、…

专业140+总分420+华中科技大学824信号与系统考研经验电子信息与通信工程,真题,大纲,参考书。

今年考研分数自己感觉还是比较满意&#xff0c;专业824信号与系统考的最好140&#xff0c;总分420&#xff0c;如愿上岸华科&#xff0c;回顾自己的这一年的复习&#xff0c;总结一些自己的经验&#xff0c;希望对报考华科的同学有帮助。 专业课&#xff1a; 824信号与系统在…

【高阶数据结构】位图布隆过滤器

文章目录 1. 位图1.1什么是位图1.2为什么会有位图1.3 实现位图1.4 位图的应用 2. 布隆过滤器2.1 什么是布隆过滤器2.2 为什么会有布隆过滤器2.3 布隆过滤器的插入2.4 布隆过滤器的查找2.5 布隆过滤器的模拟实现2.6 布隆过滤器的优点2.7 布隆过滤器缺陷 3. 海量数据面试题3.1 哈…

【C++11】右值引用 | 移动构造赋值 | 万能引用 | 完美转发

文章目录 一、引言二、左值和右值什么是左值什么是右值 三、左值引用和右值引用左值引用右值引用左值引用与右值引用的比较 四、右值引用的使用场景和意义左值引用的使用场景左值引用的短板用右值引用和移动语义解决上述问题移动构造移动赋值 右值引用引用左值 - std::move()ST…

spring boot学习第十二篇:mybatis框架中调用存储过程控制事务性

1、MySQL方面&#xff0c;已经准备好了存储过程&#xff0c;参考&#xff1a;MYSQL存储过程&#xff08;含入参、出参&#xff09;-CSDN博客 2、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"…

3.4-媒资管理之视频处理+xx-job分布式任务

文章目录 媒资管理6 视频处理6.1 需求6.1.1 总体需求6.7.3 FFmpeg 的基本使用6.7.4 视频处理工具类 6.2 分布式任务处理6.2.1 什么是分布式任务调度6.2.2 XXL-JOB介绍6.2.3 搭建XXL-JOB6.2.3.1 调度中心6.2.3.2 执行器6.2.3.3 执行任务 6.2.4 分片广播 6.3 技术方案6.3.1 作业分…

Optimism为 CQT提供价值 20 万美元的生态系统资助,以表彰其支持

Covalent Network&#xff08;CQT&#xff09; 是 Web3 生态系统中关键的“数据可用性”层&#xff0c;在与 Optimism Collective 多年的合作中取得了骄人的成果。Covalent Network&#xff08;CQT&#xff09;对于 Optimism 跨链数据的增长产生了直接的影响&#xff0c;而这一…

Java并发基础:Deque接口和Queue接口的区别?

核心概念 Deque&#xff08;double ended queue&#xff0c;双端队列&#xff09;和Queue&#xff08;队列&#xff09;都是Java集合框架中的接口&#xff0c;它们用于处理元素的排队和出队&#xff0c;但是它们之间存在一些重要的区别&#xff0c;如下&#xff1a; 1、Queue…

C语言——oj刷题——调整数组使奇数全部都位于偶数前面

题目&#xff1a; 输入一个整数数组&#xff0c;实现一个函数&#xff0c;来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c;所有偶数位于数组的后半部分。 一、实现方法&#xff1a; 当我们需要对一个整数数组进行调整&#xff0c;使得奇数位于数…

Git详细讲解

文章目录 一、Git相关概念二、本地分支中文件的添加 、提交2.1 文件状态2.2 创建Git仓库2.2.1 git init2.2.2 git clone 2.3 添加操作(git add)2.4 提交操作&#xff08;git commit&#xff09;2.5 撤销操作2.5.1 撤销 add操作2.5.2 撤销 commit操作2.5.3 覆盖上一次的commit操…
最新文章