《opencv实用探索·六》简单理解图像膨胀

1、图像膨胀原理简单理解

膨胀是形态学最基本的操作,都是针对白色部分(高亮部分)而言的。膨胀就是使图像中高亮部分扩张,效果图拥有比原图更大的高亮区域。

2、图像膨胀的作用
注意一般情况下图像膨胀和腐蚀是联合使用的。
(1)物体连接: 膨胀可以用于连接图像中间隔的物体部分。当图像中的物体有一些小的断裂或缝隙时,膨胀操作有助于将它们连接成一个整体;
(2)填充小孔: 膨胀可以填充物体内的小孔或空洞。在一些二值图像中,物体内部可能存在一些较小的空白区域,膨胀操作可以帮助填充这些小孔,使物体更加连续;
(3)增加物体大小: 膨胀操作会扩大图像中的物体。这在需要增加物体大小或加强物体边缘时很有用;
(4)去除小物体: 膨胀可以用于去除图像中一些小的噪声或不相关的物体。通过膨胀操作,较小的物体可能会被合并到周围较大的物体中,从而减小图像中不必要的小结构;
边缘检测,膨胀和腐蚀可以提取二值图像中的边缘信息,通过先膨胀在腐蚀可以是边缘更加明显;
(5)去除噪声,二值图像中可能存在一些噪声点,或者孤立的像素点,通过一定次数的腐蚀操作可以消除孤立的像素点,通过一定次数的膨胀操作可以填充小的噪声点;
(6)提取信息,通过膨胀和腐蚀操作可以提取文本区域。

3、膨胀的过程
膨胀与腐蚀相反,上一章提到腐蚀的过程:
用一个结构元素的中心覆盖原图像(二值图像只有0和1)的每个像素,看结构元素覆盖的原图像部分,取原图像中被覆盖部分像素的最小值替换被结构元素中心覆盖的原图像像素值。

而膨胀的过程:
用一个结构元素的中心覆盖原图像(二值图像只有0和1)的每个像素,看结构元素覆盖的原图像部分,取原图像中被覆盖部分像素的最大值替换被结构元素中心覆盖的原图像像素值。

下面演示下膨胀过程:
(1)先定义一个结构元素(核元素),通常是正方形、十字或圆。以十字为例,如下图。
在这里插入图片描述

定义一个原图像如下图(灰色区域像素值都为1,白色区域像素值都为0):
在这里插入图片描述
现在把核中心放在第一个像素,如下图:
由于第一行第一列,第一行第二列和第二行第一列都被核元素覆盖,并且这三个位置原图像像素值最大都为0,那么把0替换核中心覆盖的位置,即把原图像第一行第一列像素值置为0。
在这里插入图片描述

继续把核中心放在第二个像素,如下图:
原图像第一行第一列,第一行第二列,第一行第三列和第二行第二列都被核元素覆盖,且原图像像素值最大都是0,核中心在第一行第二列,那么把原图像该位置置为0
在这里插入图片描述

用上面方法在原图像第一行被膨胀后变为如下图样:
在这里插入图片描述

第二行就以第二行第二列位置的像素为例,把核元素覆盖上去,如下图:
这时候可以看到原图像被核元素覆盖的部分,在第三行第二列原图像像素值最大是1,那么把核元素中心位置即第二行第二列原图像像素值置为1
在这里插入图片描述

最后通过上面的方法膨胀原图像最终的效果如下:
在这里插入图片描述

4、opencv接口使用:

该函数用于生成常用的结构元素图像。

Mat cv::getStructuringElement(int  shape,
                              Size  ksize,
                              Point  anchor = Point(-1,-1) 
                              )

shape:结构元素的种类,如下图
在这里插入图片描述
下图从左到右依次是矩形结构元素(膨胀后的图像细节为矩形)、十字结构元素(膨胀后的图像细节为十字)和椭圆结构元素(膨胀后的图像细节为椭圆形):
在这里插入图片描述
矩形核使用场景:适用于大多数情况,特别是当你希望简单地扩大物体、连接物体或填充小孔时;
十字核使用场景:适用于连接断开的物体部分,例如去除小的断裂或连接一些窄的部分,有助于保留物体的纵向结构;
椭圆核使用场景:适用于处理具有方向性的物体,或者在需要更平滑地扩展物体边缘时或在处理一些非常小的或弯曲的物体时可能更有效。

ksize:结构元素的尺寸大小,一般情况下,结构元素的种类相同时,结构元素的尺寸越大膨胀效果越明显。
anchor:中心点的位置,默认参数为结构元素的几何中心点。

该函数用于生成膨胀后的图像。

CV_EXPORTS_W void dilate( InputArray src, OutputArray dst, InputArray kernel,
                          Point anchor=Point(-1,-1), int iterations=1,
                          int borderType=BORDER_CONSTANT,
                          const Scalar& borderValue=morphologyDefaultBorderValue() );

src:输入的待膨胀图像,图像的通道数可以是任意的,但是图像的数据类型必须是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。
dst:膨胀后的输出图像,与输入图像src具有相同的尺寸和数据类型。
kernel:用于膨胀操作的结构元素,可以自己定义,也可以用getStructuringElement()函数生成。
anchor:中心点在结构元素中的位置,默认参数为结构元素的几何中心点
iterations:膨胀的次数,默认值为1。膨胀次数越多效果越明显。
borderType:用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_CONSTANT。
borderValue:使用边界不变外推法时的边界值。

最后两个参数对图像中主要部分的膨胀操作没有影响,因此在多数情况下使用默认值即可。
需要注意的是该函数的膨胀过程只针对图像中的非0像素,如果图像注意以0像素为背景(背景基本黑色),那么膨胀操作后会看到图像中的内容变得更粗更大;如果图像是以255像素为背景(背景基本白色),那么膨胀操作后会看到图像中的内容变得更细更小。

案例使用:

int main() {
	//载入原图  
	Mat srcImage = imread("1.jpg");
	//显示原图
	imshow("【原图】膨胀操作", srcImage);
	//进行膨胀操作 
	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstImage;
	dilate(srcImage, dstImage, element);
	//显示效果图 
	imshow("【效果图】膨胀操作", dstImage);
	waitKey(0);
    return 0;
}

效果如下:
原图像:
在这里插入图片描述

膨胀后的图像:
在这里插入图片描述

5、有关形态学的应用
图像形态学腐蚀可以将细小的噪声区域去除,但是会将图像主要区域的面积缩小,造成主要区域的形状发生改变。图像形态学膨胀可以扩充每一个区域的面积,填充较小的空洞,但是会增加噪声的面积。根据两者的特性,将图像腐蚀和膨胀适当结合,便可以既去除图像中的噪声,又不缩小图像中主要区域的面积;既填充较小的空洞,又不增加噪声的面积

(1)开运算
图像开运算可以去除图像中的噪声,消除较小连通域,保留较大连通域,同时能够在两个物体纤细的连接处将两个物体分离,并且在不明显改变较大连通区域面积的同时能够平滑连通域的边界。

开运算:先腐蚀,消除图像中的噪声和较小的连通域;后膨胀,弥补较大的连通域因腐蚀而造成的面积减小。

(2)闭运算
图像闭运算可以去除连通域内的小型空洞,平滑物体轮廓,连接两个临近的连通域。闭运算,先膨胀,填充连通域内小型空洞,扩大连通域边界,将临近的两个连通域连接;后腐蚀,减少由膨胀运算引起的连通域边界的扩大以及面积的增加。

开运算和闭运算可以通过分别调用dilate函数和erode函数进行实现,也可以使用morphologyEx函数实现。函数原型:

CV_EXPORTS_W void morphologyEx( InputArray src, OutputArray dst,
                                int op, InputArray kernel,
                                Point anchor=Point(-1,-1), int iterations=1,
                                int borderType=BORDER_CONSTANT,
                                const Scalar& borderValue=morphologyDefaultBorderValue() );

src 输入图像,图像位深应该为以下五种之一:CV_8U, CV_16U,CV_16S, CV_32F 或CV_64F;
dst 输出图像,需和源图片保持一样的尺寸和类型;
op 表示形态学运算的类型;
kernel 表示结构元素,配合getStructuringElement函数使用。
anchor:中心点在结构元素中的位置,默认参数为结构元素的几何中心点
iterations:处理次数,默认值为1。
borderType:用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_CONSTANT。
borderValue:使用边界不变外推法时的边界值。

注意,第三个参数是形态学操作类型的标志:

//! type of morphological operation
enum MorphTypes{
    MORPH_ERODE    = 0, //腐蚀
    MORPH_DILATE   = 1, //膨胀
    MORPH_OPEN     = 2, //开运算
    MORPH_CLOSE    = 3, //闭运算
    MORPH_GRADIENT = 4, //形态学梯度
    MORPH_TOPHAT   = 5, //顶帽运算
    MORPH_BLACKHAT = 6, //黑帽运算
    MORPH_HITMISS  = 7  //击中击不中bian
};

在这里插入图片描述

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

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

相关文章

SpringBoot3.x + mp代码生成器(更新系列)

小伙伴们,有没有这样一个体验,每次开始写一个项目时,搭建项目环境,建entity,mapper,service,controller层文件的感到繁琐,这属实体力活呀!然而,自从有了Mybat…

STM32F407-14.3.9-01输出比较模式

输出比较模式 此功能用于控制输出波形,或指示已经过某一时间段。 当捕获/比较寄存器与计数器之间相匹配时,输出比较功能: ● 将为相应的输出引脚分配一个可编程值,该值由输出比较模式(TIMx_CCMRx 寄存器中的 OCxM⑦…

基于WebSocket实现客户聊天室

目录 一、实现聊天室原理 二、聊天室前端代码 三、聊天室后端代码(重点) 四、聊天室实现效果展示 一、实现聊天室原理 1.1 介绍websocket协议 websocket是一种通信协议,再通过websocket实现弹幕聊天室时候,实现原理是客户端首…

《功能磁共振多变量模式分析中空间分辨率对解码精度的影响》论文阅读

《The effect of spatial resolution on decoding accuracy in fMRI multivariate pattern analysis》 文章目录 一、简介论文的基本信息摘要 二、论文主要内容语音刺激的解码任务多变量模式分析(MVPA)K空间 空间分辨率和平滑对MVPA的影响平滑的具体过程…

刷题笔记12.01 贪心策略

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 说最大不超过.不用高精度,好说 #include <bits/stdc.h> using namespace std; int n,n2,a; long long a1[10004],a2[10004],sum; int main() {ios::sync_…

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷14

单选题 1、下列现象中有化学变化发生的是 A、蜡烛融化 B、冰块融化 C、电磁炉烧开水 D、铁生锈 答案&#xff1a;D 2、把左边的图形用剪刀剪开&#xff0c;拼成右边的正方形&#xff0c;至少剪几刀 A、1 B、2 C、3 D、4 答案&#xff1a;B 3、能够检验土壤中有沙和粘…

SCT2432QSTER,可替代LMR14030-Q1;3.8V-40V输入、3.5A、高效率同步降压型DCDC转换器、具有内部补偿功能

描述&#xff1a; SCT2432Q是3.5A的同步降压转换器&#xff0c;具有宽输入电压&#xff0c;范围从3.8V到40V&#xff0c;它集成了一个80mΩ的高压侧MOSFET和一个50mQ的低压侧MOSFET&#xff0c;SCT2432Q采用峰值电流模式控制&#xff0c;支持脉冲跳过调制(PSM)&#xff0c;具有…

kafka 集群 ZooKeeper 模式搭建

Apache Kafka是一个开源分布式事件流平台&#xff0c;被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序 Kafka 官网&#xff1a;Apache Kafka 关于ZooKeeper的弃用 根据 Kafka官网信息&#xff0c;随着Apache Kafka 3.5版本的发布&#xff0c;Zookeeper现…

TCP_握手+挥手过程状态变化分析

TCP状态解读 握手挥手过程状态变化 同时握手 双发同时发起syn请求&#xff0c;状态变化过程如下&#xff1a; 图片来源&#xff1a;http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentProcessTheThreeWayHandsh-4.htm 同时挥手 4次挥手&#xff0c;可以理解为2…

基于相关性的四种机器学习聚类方法

在这篇文章中&#xff0c;基于20家公司的股票价格时间序列数据。根据股票价格之间的相关性&#xff0c;看一下对这些公司进行分类的四种不同方式。 苹果&#xff08;AAPL&#xff09;&#xff0c;亚马逊&#xff08;AMZN&#xff09;&#xff0c;Facebook&#xff08;META&…

Public Keys为constant size的accountable multi-signature

1. 引言 见Dan Boneh等人2023年论文《Accountable Multi-Signatures with Constant Size Public Keys》。 多签方案用于&#xff0c;将多方对同一消息 m m m的多个签名&#xff0c;聚合为对 m m m的单个短签名。 多签方案应用广泛&#xff0c;尤其是在proof-of-stake共识协议…

高并发下缓存失效问题-缓存穿透、缓存击穿、缓存雪崩、Redis分布式锁简单实现、Redisson实现分布式锁

文章目录 缓存基本使用范式暴露的几个问题缓存失效问题---缓存穿透缓存失效问题---缓存击穿一、单机锁正确的锁粒度不正确的锁粒度无法保证查询数据库次数是唯一 二、分布式锁getCatalogJsonData()分布式锁演进---基本原理分布式锁(加锁)演进一&#xff1a;删锁失败导致死锁分布…

zookeeper心跳检测 (实操课程)

本系列是zookeeper相关的实操课程&#xff0c;课程测试环环相扣&#xff0c;请按照顺序阅读来学习和测试zookeeper。 阅读本文之前&#xff0c;请先阅读----​​​​​​zookeeper 单机伪集群搭建简单记录&#xff08;实操课程系列&#xff09;zookeeper 客户端常用命令简单记录…

nodejs微信小程序+python+PHP学科建设管理信息系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

11.28~11.29基本二叉树的性质、定义、复习;排序算法;堆

完全二叉树&#xff08;Complete Binary Tree&#xff09;是一种特殊的二叉树结构&#xff0c;它具有以下特点&#xff1a; 所有的叶子节点都集中在树的最后两层&#xff1b;最后一层的叶子节点都靠左排列&#xff1b;除了最后一层&#xff0c;其他层的节点数都达到最大值。 …

如何快速看懂市场行情?

一、看大盘指数 咱们平时所说的大盘其实指的就是上证指数&#xff0c;它是整个市场的晴雨表。大盘涨了&#xff0c;个股跟着上涨的概率就大&#xff0c;大盘跌了&#xff0c;个股被拖累下跌的概率也大。所以&#xff0c;要想在股市中尝到甜头&#xff0c;大盘分析是少不了滴&am…

Django HMAC 请求签名校验与 Vue.js 实现安全通信

概要 在 Web 应用的开发过程中&#xff0c;确保数据传输的安全性和完整性是一个不容忽视的问题。使用 HMAC&#xff08;Hash-based Message Authentication Code&#xff09;算法对请求内容进行签名校验&#xff0c;是一种常见且有效的安全策略。本文将详细介绍如何在 Django …

[1] AR Tag 在ros中的使用

1.定义 AR Tag 是一种用于增强现实&#xff08;AR&#xff09;应用中的视觉标记&#xff0c;用于跟踪和定位虚拟物体在现实世界中的位置。 AR Tag由黑白正方形图像表示&#xff0c;图像内部有黑色边框中的某些图案。它与我们经常用到的二维码长得类似&#xff0c;原理其实也一…

STM32内部温度传感器使用方法详解

STM32内部温度传感器使用方法详解 前言 STM32内部集成了一个片上温度传感器&#xff0c;可以用来测量MCU及周围的温度。测量范围&#xff1a;-40~125&#xff0c;精度1.5℃。虽然精度不高&#xff0c;但在某些应用场景下是够了的&#xff0c;相比于外部接入传感器&#xff0c…

nodejs微信小程序+python+PHP金融产品销售系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…