第9章 形态学处理

2024-06-17 01:18
文章标签 处理 形态学

本文主要是介绍第9章 形态学处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第9章 形态学处理

腐蚀操作 imerode

  • 通过腐蚀操作(imerode)去掉图像的某些部分:
%% 第9章 形态学处理
%% imerode 腐蚀操作
clc
clearA1=imread('./1.jpg');
subplot(221),imshow(A1);title('原始图像');
%strel函数的功能是运用各种形状和大小构造结构元素
se1=strel('disk',5);%这是创建一个半径为5的平坦圆盘结构元素
A2=imerode(A1,se1);
subplot(222),imshow(A2);title('使用disk(5,5)腐蚀后的图像');se2=strel('rectangle',[3,3]);
A3=imerode(A1,se2);
subplot(223),imshow(A3),title('使用rectangle[5,5]腐蚀操作后');se3=strel('disk',10);%这是创建一个半径为5的平坦圆盘结构元素
A3=imerode(A1,se3);
subplot(224),imshow(A3);title('使用disk(10,10)腐蚀后的图像');figure
se4=strel('line',10,0);
A4=imerode(A1,se4);
subplot(221),imshow(A4);title('使用line(10,0)腐蚀后的图像');se5=strel('line',10,45);
A5=imerode(A1,se5);
subplot(222),imshow(A5);title('使用line(10,45)腐蚀后的图像');se6=strel('line',10,90);
A6=imerode(A1,se6);
subplot(223),imshow(A6);title('使用line(10,90)腐蚀后的图像');

使用不同尺寸不同形状的结构元进行腐蚀
这里写图片描述

通过观察,发现结构元的尺寸越大,腐蚀的效果越明显;
当用45°的线进行操作时,留下了该方向的细线和竖直的较宽的细线;
当用90°的结构元进行操作时,对中间较粗的细线几乎没有进行任何腐蚀。
规律似乎是这样的:对图像中与结构元相似的形状进行腐蚀效果不明显,比结构元规格大的形状腐蚀完仍会有保留。

膨胀操作 imdilate

  • 膨胀操作用于桥接裂缝
%% 第9章 形态学处理
%% imdilate 膨胀处理
clc
clear
A1=imread('./2.jpg');
subplot(221);imshow(A1);title('原始图像');
info=imfinfo('./2.jpg');
%se1=strel('disk',1);
se1=strel('line',10,0);
A2=imdilate(A1,se1);
%subplot(222);imshow(A2);title('disk(1)-1次膨胀');
subplot(222);imshow(A2);title('line(10,0)-1次膨胀');A3=imdilate(A2,se1);
%subplot(223);imshow(A3);title('disk(1)-2次膨胀');
subplot(223);imshow(A3);title('line(10,0)-2次膨胀');
A4=imdilate(A3,se1);
%subplot(224);imshow(A4);title('disk(1)-13膨胀');
subplot(224);imshow(A4);title('line(10,0)-3次膨胀');

这里写图片描述这里写图片描述

使用disk(1)进行膨胀操作,多次操作,效果加深。
使用line(10,0)进行多次膨胀,随着膨胀次数的增多,对垂直方向的效果比水平方向的效果明显。
规律:膨胀操作时只要是有背景与结构元的反射有一点重叠,即为新集合的元素,因此用横向的结构元膨胀时,对横向目标不如对纵向的目标效果明显。

腐蚀是以结构元的中心遍历图像的每一个像素进行访问,如果结构元完全包含在图像中,则该中心位置为腐蚀后的新集合中的元素;

膨胀是以结构元的中心遍历图像的每一个像素进行访问,如果结构元与图像的交集不为空,则该结构元所占区域为新结合中的元素;

开运算 &闭操作

开运算一般会平滑物体的轮廓,断开较窄的狭颈并消除细的突出物。
闭操作同样也会平滑物体的轮廓,但是与开操作相反,它通常会弥合较窄的间断和细长的沟壑,消除小的空洞,填补轮廓线中的断裂。

%% 第9章 形态学处理
%% 开运算
clc
clear
%% 开运算
A1=imread('./5.jpg');
subplot(221),imshow(A1);title('原始图像');
se1=strel('disk',20);%这是创建一个半径为5的平坦圆盘结构元素
A2=imopen(A1,se1);
subplot(222),imshow(A2);title('开运算');
%%自带闭运算
A3=imclose(A1,se1);
subplot(223),imshow(A3);title('闭运算');
%% 第2副图像
A1=imread('./5.jpg');
%subplot(234),imshow(A1);title('原始图像');
se1=strel('disk',20);%这是创建一个半径为5的平坦圆盘结构元素
A2=imclose(A1,se1);
%subplot(235),imshow(A2);title('闭运算');
%%自带闭运算
A3=imopen(A1,se1);
%subplot(236),imshow(A3);title('开运算');

这里写图片描述

开运算:将较细的线断开,消除突出物
闭运算:弥合较窄的沟壑和细长的线段

这里写图片描述

对比上图中两幅原始图像(反相)的开运算和闭运算,可以发现,对背景(黑色区域)的开运算相当于对目标(白色区域)的闭运算;对目标(白色区域)的开运算相当于对背景(黑色区域)的闭运算。

击中或击不中变换

击中或击不中变换是形状检测的一个基本工具。假设集合B由B1和B2组合成,B1对图像A腐蚀,B2对图像的补集腐蚀,两者得到的结果相减即为B在图像A中的匹配。
可以参考知乎中的解释:https://www.zhihu.com/question/23669012


%% 击中击不中变换
clc
clear
A=im2bw(rgb2gray(imread('./AT9A3130.JPG')));
subplot(161);imshow(A);title('原始图像');
B=~A;
se1= strel('disk',3);
se2= strel('disk',5);
A11=imerode(A,se1);
A1=mat2gray(A11);
subplot(162);imshow(A1);title('se1腐蚀');
A22=imerode(B,se2);
A2=mat2gray(A22);
subplot(163);imshow(A2);title('se2腐蚀');
subplot(164);imshow(mat2gray(A-A1));title('原图减去腐蚀1的结果');
subplot(165);imshow(mat2gray(A1-A2));title('击中击不中结果');
subplot(166);imshow(mat2gray(~(abs(A1-A2))));title('上图结果取绝对值再取反');
这里写图片描述
上图中原图减去se1腐蚀结果的图像,可以用来做边界提取
空洞修复

%% 空洞修复
A=im2bw(imread('./AT9A3130.JPG'));
subplot(221);imshow(A);title('原始图像');
B=imfill(A,'holes');
subplot(222);imshow(B);title('填充后图像');
%% 注解
BW4 = im2bw(imread('kongdong.jpg'));
subplot(223);imshow(BW4);title('原始图像');
BW5 = imfill(BW4,'holes');
subplot(224);imshow(BW5);title('填充后');

这里写图片描述
如何控制空洞的大小呢???
- 未完待续…

这篇关于第9章 形态学处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1068085

相关文章

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

requests处理token鉴权接口和jsonpath使用方式

《requests处理token鉴权接口和jsonpath使用方式》文章介绍了如何使用requests库进行token鉴权接口的处理,包括登录提取token并保存,还详述了如何使用jsonpath表达... 目录requests处理token鉴权接口和jsonpath使用json数据提取工具总结reques

C# 空值处理运算符??、?. 及其它常用符号

《C#空值处理运算符??、?.及其它常用符号》本文主要介绍了C#空值处理运算符??、?.及其它常用符号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、核心运算符:直接解决空值问题1.??空合并运算符2.?.空条件运算符二、辅助运算符:扩展空值处理

浅析Python中如何处理Socket超时

《浅析Python中如何处理Socket超时》在网络编程中,Socket是实现网络通信的基础,本文将深入探讨Python中如何处理Socket超时,并提供完整的代码示例和最佳实践,希望对大家有所帮助... 目录开篇引言核心要点逐一深入讲解每个要点1. 设置Socket超时2. 处理超时异常3. 使用sele

SpringMVC配置、映射与参数处理​入门案例详解

《SpringMVC配置、映射与参数处理​入门案例详解》文章介绍了SpringMVC框架的基本概念和使用方法,包括如何配置和编写Controller、设置请求映射规则、使用RestFul风格、获取请求... 目录1.SpringMVC概述2.入门案例①导入相关依赖②配置web.XML③配置SpringMVC

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺