第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使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结