【光电智造】这个大牛使用Opencv深究形态学处理

今日光电 2024-12-16 18:01

 今日光电 

     有人说,20世纪是电的世纪,21世纪是光的世纪;知光解电,再小的个体都可以被赋能。追光逐电,光赢未来...欢迎来到今日光电!




----追光逐电 光赢未来----

摘要:

形态学一般指生物学中研究动物和植物结构的一个分支。用数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具。

基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。

形态学图像处理的基本运算有:

  • 膨胀和腐蚀(膨胀区域填充,腐蚀分割区域)

  • 开运算和闭运算(开运算去除噪点,闭运算填充内部孔洞)

  • 击中与击不中

  • 顶帽变换,黑帽变换

形态学的应用:消除噪声、边界提取、区域填充、连通分量提取、凸壳、细化、粗化等;分割出独立的图像元素,或者图像中相邻的元素;求取图像中明显的极大值区域和极小值区域;求取图像梯度


🧡在讲各种形态学操作之前,先来看看结构元素:

膨胀和腐蚀操作的核心内容是结构元素。(后面的开闭运算等重要的也是结构元素的设计,一个合适的结构元素的设计可以带来很好的处理效果

OpenCV里面的API介绍:

Mat kernel = getStructuringElement(int shape,Size ksize,Point anchor);
shape
//结构元素的定义:形状 (MORPH_RECT \MORPH_CROSS(交叉形) \MORPH_ELLIPSE);
ksize //结构元素大小;
anchor //锚点 默认是Point(-1, -1)意思就是中心像素,也可以自己指定

一,腐蚀和膨胀

 腐蚀和膨胀是最基本的形态学操作,腐蚀和膨胀都是针对白色部分(高亮部分)而言的

  • 膨胀就是使图像中高亮部分扩张,效果图拥有比原图更大的高亮区域(是求局部最大值的操作)

  • 腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域(是求局部最小值的操作)

膨胀与腐蚀能实现多种多样的功能,主要如下:

1、消除噪声
2、腐蚀分割(isolate)出独立的图像元素,膨胀在图像中连接(join)相邻的元素。
3、寻找图像中的明显的极大值区域或极小值区域
4、求出图像的梯度

opencv中膨胀/腐蚀API:(两者相同)

void dilate/erode( const Mat& src,   //输入图像(任意通道的)
Mat& dst, //输出图像
const Mat& element, //结构元素
Point anchor=Point(-1,-1), //中心位置锚点
int iterations=1, //操作次数。省略时为默认值1。
int borderType=BORDER_CONSTANT, //边缘填充类型
const Scalar& borderValue //填充值(默认即可)
)

opencv实现:

    Mat src1 = imread("D:/opencv练习图片/腐蚀膨胀.png");
Mat src_erode, src_dilate;
imshow(
"原图", src1);
Mat kernel
= getStructuringElement(MORPH_RECT, Size(60, 60), Point(-1, -1));
erode(src1, src_erode, kernel, Point(
-1, -1),2);
dilate(src1, src_dilate, kernel, Point(
-1, -1),2);
imshow(
"腐蚀", src_erode);
imshow(
"膨胀", src_dilate);

膨胀:                                                                                腐蚀:                         

1️⃣腐蚀操作的原理就是求局部最小值的操作,并把这个最小值赋值给参考点指定的像素。这样就会使图像中的高亮区域逐渐减少。

2️⃣膨胀操作的原理就是求局部最大值的操作,并把这个最大值赋值给参考点指定的像素。这样就会使图像中的高亮区域逐渐增长。

二,高阶形态学变换

对于更加高级形态学变换就要用到morphologyEx()函数了,其函数原型如下:

void morphologyEx(
InputArray src,
//输入图像
OutputArray dst, //输出图像
int op, //形态学运算类型
InputArray kernel, //结构元素
Point anchor = Point(-1,-1), //锚点
int iterations = 1, //运算次数
int borderType = BORDER_CONSTANT,
)

✨对于输入参数op(形态学运算类型)有以下几种参数可以设置:

  • MORPH_ERODE(腐蚀)

  • MORPH_DILATE(膨胀)

  • MORPH_OPEN(开运算)

  • MORPH_CLOSE(闭运算)

  • MORPH_GRADIENT(形态学梯度,即膨胀图减腐蚀图)

  • MORPH_TOPHAT(顶帽运算)

  • MORPH_BLACKHAT(底帽运算)

  • MORPH_HITMISS(击中与击不中)

🧡开运算和顶帽运算

开运算就是先腐蚀膨胀。作用:用来消除图像中细小对象,在纤细点处分离物体和平滑较大物体的边界而有不明显改变其面积和形状。

请关注:机器视觉课堂

顶帽运算就是图与原图的开运算的差值图像。作用:

1️⃣:得到开运算消除的区域(检查开运算效果)

2️⃣:校正不均匀光照的影响(用于暗背景上的亮物体,去光差)

 opencv实现:

    Mat src1 = imread("D:/opencv练习图片/开运算.png");
Mat src_open, src_tophat;
imshow(
"原图", src1);
Mat kernel
= getStructuringElement(MORPH_RECT, Size(7, 7), Point(-1, -1));
morphologyEx(src1, src_open, MORPH_OPEN, kernel,Point(
-1, -1));//开运算
morphologyEx(src1, src_tophat, MORPH_TOPHAT, kernel, Point(-1, -1));//顶帽运算
imshow("开运算", src_open);
imshow(
"顶帽运算", src_tophat);

开运算:                                                                    

  顶帽运算:(可以用来观察开运算的效果)


 

 💛闭运算和底帽运算

闭运算就是先膨胀后腐蚀。作用:用来填充目标内部的细小孔洞(fill hole),将断开的邻近目标连接,在不明显改变物体面积和形状的情况下平滑其边界。

底帽运算就是图与原图的闭运算的差值图像。作用:

1️⃣:闭运算是去噪点的过程,所以黑帽操作实质上保留的是噪点的部分。

2️⃣:校正不均匀光照的影响(用于亮(白)背景上的暗物体)

  opencv实现:

    Mat src1 = imread("D:/opencv练习图片/闭运算.png");
Mat src_close, src_blackhat;
imshow(
"原图", src1);
Mat kernel
= getStructuringElement(MORPH_RECT, Size(7, 7), Point(-1, -1));
morphologyEx(src1, src_close, MORPH_CLOSE, kernel,Point(
-1, -1));//闭运算
morphologyEx(src1, src_blackhat, MORPH_BLACKHAT, kernel, Point(-1, -1));//底帽运算
imshow("闭运算", src_close);
imshow(
"底帽运算", src_blackhat);

 闭运算:                                                                    底帽运算:

 💚形态学梯度(求二值图边缘)

 图像形态学的梯度跟我们前面介绍的图像卷积计算出来的梯度有本质不同,形态学梯度可以帮助我们获得连通组件的边缘与轮廓,实现图像轮廓或者边缘提取。

根据使用的形态学操作不同,形态学梯度又分为:

  • 基本梯度(图像膨胀与腐蚀操作之间的差值)

  • 内梯度(输入图像与腐蚀之间的差值)

  • 外梯度(膨胀与输入图像之间的差值)

opencv实现:

    Mat src1 = imread("D:/opencv练习图片/腐蚀膨胀.png");
Mat src_giad1, src_exter,src_inter,src_dilate,src_erode;
imshow(
"原图", src1);
Mat kernel
= getStructuringElement(MORPH_RECT, Size(7, 7), Point(-1, -1));
//基本梯度
morphologyEx(src1, src_giad1, MORPH_GRADIENT, kernel,Point(-1, -1));
imshow(
"基本梯度", src_giad1);
//外梯度
morphologyEx(src1, src_dilate, MORPH_DILATE, kernel, Point(-1, -1));
subtract(src_dilate, src1, src_exter);
//求差值
imshow("外梯度", src_exter);
//内梯度
morphologyEx(src1, src_erode, MORPH_ERODE, kernel, Point(-1, -1));
subtract(src1, src_erode, src_inter);
imshow(
"内梯度", src_inter);

 外梯度:                                                                   

  内梯度:

 内外梯度区别不是很大。。。

💙击中与击不中

形态学的击中击不中操作, 击中击不中也是基础形态学操作组合,它可以实现对象的细化跟剪枝操作,根据结构元素不同,可以提取二值图像中的一些特殊区域,得到我们想要的结果。并且击中击不中操作在二值图像的模式匹配跟发现上也非常有用

Hit-miss算法步骤(两次腐蚀,求交集):

击中击不中变换是形态学中用来检测特定形状所处位置的一个基本工具。它的原理就是使用腐蚀;如果要在一幅图像A上找到B形状的目标,我们要做的是:

  • 首先,建立一个比B大的结构元素B1;使用B1对图像A进行腐蚀,得到图像假设为A_B1;

  • 其次,用B减去B1,从而得到结构元素B2(B2-B);使用B2对图像A的补集进行腐蚀,得到图像假设为A_B2;

  • 然后,A_B1与A_B2取交集;得到的结果就是B的位置。

opencv实战(利用击中与击不中,提取网绳的结点位置):

Mat src = imread("D:/opencv练习图片/击中与击不中.png");
imshow(
"原图", src);
// 二值图像
Mat gray, binary, hitImg;
cvtColor(src, gray, COLOR_BGR2GRAY);
//高斯滤波
Mat gauss;
GaussianBlur(gray, gauss, Size(
5, 5), 0, 0);
//二值化
threshold(gauss, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);
imshow(
"binary", binary);
// 定义结构元素
Mat se = getStructuringElement(MORPH_CROSS, Size(11, 11), Point(-1, -1));
// 击中击不中
morphologyEx(binary, hitImg, MORPH_HITMISS, se);
imshow(
"击中击不中", hitImg);
//膨胀一下
Mat openImg;
Mat kern2
= getStructuringElement(MORPH_RECT, Size(3, 3));
morphologyEx(hitImg, openImg, MORPH_OPEN, kern2, Point(
-1, -1), 2);
imshow(
"dilate", openImg);
//寻找轮廓
vector>contours;
vector
hie;
findContours(openImg, contours, hie, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
for (size_t i = 0; i < contours.size(); i++)
{
double area = contourArea(contours[i]);
if (area < 20.0)continue;
Rect rect
= boundingRect(contours[i]);
rectangle(src, rect, Scalar(
0, 0, 255), 1, 8);

}
// 显示
imshow("结果", src);

 

 

 https://www.cnblogs.com/xyf327/p/14801565.html


来源:机器视觉沙龙


申明:感谢原创作者的辛勤付出。本号转载的文章均会在文中注明,若遇到版权问题请联系我们处理。


 

----与智者为伍 为创新赋能----


【说明】欢迎企业和个人洽谈合作,投稿发文。欢迎联系我们
诚招运营合伙人 ,对新媒体感兴趣,对光电产业和行业感兴趣。非常有意者通过以下方式联我们!条件待遇面谈
投稿丨合作丨咨询

联系邮箱:uestcwxd@126.com

QQ:493826566




评论
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-14 20:56 62浏览
  • 在现代生活中,我们经常会遇到需要检测电线是否带电的情况。这时,一款好用的数显测电笔就显得尤为重要了。今天,我想跟大家分享一下DELIXI数显测电笔的使用方法,通过一个故事来讲述它如何帮助我们解决生活中的小麻烦。 在一个阳光明媚的周末,小明决定对他家的电路进行一次全面的检查。他知道,虽然自己不是专业的电工,但有了DELIXI数显测电笔的帮助,他也能轻松应对。 小明拿出了DELIXI数显测电笔,这款测电笔设计得非常人性化,操作起来也很简单。他首先注意到了测电笔上的两个按键:DIRECT(A键)和
    丙丁先生 2024-12-16 12:58 44浏览
  • 全球领先的光学解决方案供应商艾迈斯欧司朗(瑞士证券交易所股票代码:AMS)于10月23日在深圳益田威斯汀酒店举办了艾迈斯欧司朗中国发展中心(以下简称,CDC)圆桌论坛。本次论坛以“智能化时代,以多元应用场景和技术 助力中国市场加速发展”为核心议题,探讨在人工智能驱动的市场趋势下,CDC如何助力中国伙伴把握时代机遇,推动大中华地区业务稳健增长,展示了艾迈斯欧司朗对中国市场的信心。立足中国 贴近本土客户需求在全球经济增速放缓和国际形势复杂多变的背景下,中国市场依然保持了稳定的增长势态,并释放出强大的
    艾迈斯欧司朗 2024-12-16 18:00 56浏览
  • 霍尔传感器的原理        霍尔传感器是一种固体的传感器,其输出电压与磁场强度成比例。顾名思 义,这种器件是依赖于霍尔效应原理工作的。霍尔效应原理是在导体通电 和加有磁场的情况下,在导体的横向 上会产生电压。电子(在实践中多数载流子最常被使 用)在外部电场的驱动下会产生“漂移”,当暴露于磁场中时,这些运动 的带电粒子会受到一个垂直于电场和 磁场的力的作用。这个力会让导体的边缘充电,一边为正,一边为负。边
    锦正茂科技 2024-12-14 11:41 50浏览
  • 串口调试助手软件:XCOM 也是一款专为嵌入式开发和硬件调试设计的强大工具,如正点原子串口调试助手 XCOM V2.6。这款软件支持多种串口参数配置,满足不同开发需求,广泛应用于嵌入式系统开发、硬件调试以及电子爱好者的项目开发中。XCOM在嵌入式开发和硬件调试中的作用主要体现在以下几个方面: 1. 串口通信测试:XCOM作为一款强大的串口调试工具,允许用户通过计算机的串口进行数据的发送与接收,从而实现对串口通信的测试。这对于验证硬件设备的通信协议、确保数据传输的正确性至关重要。 2. 数据发
    丙丁先生 2024-12-15 11:56 63浏览
  • 一、引言在数字化时代,芯片作为现代科技的核心,其制造过程却常被视作神秘的黑箱。菊地正典的《大话芯片制造》为我们揭开了这层神秘的面纱,以通俗易懂的方式,全面系统地介绍了芯片制造的各个环节。作为一名电子信息技术专业的教育工作者,我深感这本书不仅为学生提供了宝贵的知识资源,也让我对芯片制造及其在现代社会中的作用有了更深刻的理解。二、生活中的芯片印记芯片的影响渗透到我们日常生活的每一个角落。从智能手机的闹钟唤醒,到交通卡的便捷支付,再到智能家居的智能化功能,芯片以其强大的运算和处理能力,为我们的现代生活
    月光 2024-12-16 11:52 50浏览
  • 光耦合器是一种重要的电子元件,其在电子信号隔离和传输中的作用不可替代。自20世纪60年代首次被研发以来,光耦合器经历了从基础隔离器件到高性能元件的不断演化,在现代电子设备中占据了重要地位。本文将深入探讨光耦合器的发展历程、技术特点以及在当今科技领域中的广泛应用。光耦合器的诞生背景光耦合器的诞生源于20世纪60年代,为了解决电子信号在不同电路之间传输时的隔离问题,科学家们设计了一种基于光信号传递的全新器件。光耦合器通过发光二极管(LED)将电信号转化为光信号,再由光敏器件接收并重新转换为电信号,从
    腾恩科技-彭工 2024-12-13 16:18 45浏览
  • 擎天柱,这个名字听起来就像是从科幻电影里走出来的英雄。但今天,我们要聊的不是那个变形金刚,而是一款同样令人兴奋的实验板——Ai8051U-LQFP48 转 89C52-DIP40 核心功能实验板。这款实验板就像是电子世界的“擎天柱”,它拥有强大的力量和无限的潜力,等待着我们去发掘和探索。 想象一下,你手中握着的不是一块普通的电路板,而是一张通往未来科技世界的门票。Ai8051U芯片,这颗强大的心脏,内置了硬件浮点运算单元(TFPU@120MHz),让你的计算速度飞起来,就像给机器人装上了翅膀。
    丙丁先生 2024-12-16 13:02 49浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-13 23:20 58浏览
  • 概述 Cyclone 10 GX器件的ALM结构与Cyclone V类似,所以在Cyclone 10 GX器件上实现TDC功能理论上是可以完全参考甚至移植自Cyclone V系列的成功案例。但是,现实却是更多的问题出现当在Cyclone 10 GX使用和Cyclone V同样策略实现TDC的时候。 本文主要记录在Cyclone 10 GX器件上实现TDC时的探索,并为后续TDC设计、测试等展开前期研究。Cyclone 10 GX ALM结构 如图1所示,Cyclone 10 GX器件的ALM结构
    coyoo 2024-12-14 17:15 62浏览
  •        霍尔传感器是一种基于霍尔效应的传感器。霍尔效应指的是当通过一个导体的电流受到外部磁场的影响时,导体内部将会产生一种电场,使得在导体两端的电势差发生变化,这种电势差变化称为霍尔电势差。利用这种现象,可以设计出一种可以测量磁场强度和方向的传感器,即霍尔传感器。  霍尔传感器分为线型霍尔传感器和开关型霍尔传感器两种。  (一)开关型霍尔传感器由稳压器、霍尔元件、差分放大器,斯密特触发器和输出级组成,它输出数字量。开关型霍尔传感器还有一种特
    锦正茂科技 2024-12-14 10:58 61浏览
  • 在现代软件开发领域,效率和可靠性是企业在竞争中取胜的关键。本文将深入探讨 ANA Systems 如何通过引入业界领先的 CI/CD 平台——CircleCI,克服传统开发流程的瓶颈,实现开发运营效率的全面提升。同时,本文还将详细解析 CircleCI 的核心优势,包括其强大的自动化功能、广泛的工具整合能力,以及为企业量身定制的支持服务,揭示其如何助力 ANA Systems 在「新一代国内旅客项目」中脱颖而出。这一案例将为企业优化开发流程、提升竞争力提供重要的实践参考。ANA Systems
    艾体宝IT 2024-12-16 16:44 62浏览
  • 家用国产固态继电器(SSR)已成为各行各业的基石,性能可靠、设计紧凑、效率高。这些先进的开关设备取代了传统的机电继电器,具有静音运行、使用寿命更长、可靠性更高等诸多优点。家用SSR专为从工业自动化到家用电器等各种应用而设计,展示了本地制造商的独创性和竞争力。国产固态继电器特点和优势家用SSR采用半导体技术制造,与传统继电器相比,具有很强的耐磨性。主要特点包括:静音无振动运行:SSR使用半导体元件进行开关,消除了机械噪音。响应时间快:是工业控制系统中高速开关的理想选择。耐用性:没有移动部件,即使在
    克里雅半导体科技 2024-12-13 16:49 45浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦