基本形态学算法

基本形态学算法
为什么要做基本形态学算法的研究和实现?是因为形态学是一个非常有力,应用 广泛的工具,但同时也是研究不是很清楚的工具。往往一个恰到好处的变换,就能够省下许多的劳动。对此的分类和研究就显得非常有必要,而相关代码的积累,也很有价值。
零、基本概念:
膨胀:白->黑;    dilate
腐蚀:黑->白;  erode
开    : 腐蚀->膨胀 平滑物体轮廓,断开较窄的地方,清除细突;
闭   :膨胀->腐蚀 弥合较窄的间断,填补细长的沟壑;
顶帽 :src-(开运算(src))
底帽 :闭运算(src)-src
一、边界提取
先腐蚀,然后相减。
作为生成算法可能价值不是很大,但是在生成镂空字符的时候,价值就会比较大。
变成以及
//-------------------生成验证码--------------//
void creatCode()
{
    Mat edge;
    Mat code = imread("abcd123.bmp",0);
    threshold(code,code,0,255,THRESH_OTSU);
    threshold(code,code,0,255,THRESH_BINARY_INV);
    dilate(code,code,Mat(1,5,CV_8U));
    erode(code,edge,Mat());
    edge = code - edge;
    imshow("验证码生成",code);
}
//-------------------边界提取----------------//
void getEdge(Mat src)
{
    Mat edge ;
    erode(src,edge,Mat());
    edge = src - edge;
    imshow("边界提取",edge);
}
二、孔洞填充(注意,floodfill是没有教程的)
一个孔洞可以被定义为由前景像素相连接的边界所包围的一个背景区域。关键是标注出区域中的点来。
原文的翻译实在无法理解。我这里做出自己收集到的实现。
opencv中提供了floodfill的例子,应该说功能强大
对于本例,问题在于如何自动化这个过程?
我实现了一个效果,主要是通过反过来找中间的黑点,然后相加。这里属于反过来使用floodfill,效果还是不错的.
NICE!体现形态学的强大能力。如果你用轮廓来找的话,会很麻烦,而且不稳定。但是用形态学,确非常稳定,只有在很特殊的情况下,才可能出现失败的青年高考。
三、联通分量提取
从二值图像中提取联通分量是许多自动图形啊分析应用的核心。除了在对应A中每个连通分量中的一个点的已指的每一个位置我们置为1,其他为0
对于8连通,目前采用的算法是find contours。虽然有一些文档中也提出了一些算法,但是根据我目前的知识结构,还是直接contour的方法最好。
 
四、【关于细化和骨廓,届时看不懂】
五、顶帽变换和底帽变换
顶帽变换的一个作用是去除光照不均匀
用于连铸的效果非常明显,我相信这样可以把代码质量进一步提高
黑帽
去除背景还是要这样来做
从这点可以看出,它的确是效果要更好一点的。
小结:
形态学变换应该说是很强的,因为它更接近于原始的情况,是不同于轮廓分析的基础工具。在我之前的过程中确实缺乏这方面的使用,这方面的书还要多读多用。
P.S.
在OPENCV中,提供了一揽子的解决方法
int main()
{
    Mat src = imread("./image/chars_identify.jpg",0);
     
    Mat srcClone = src.clone();
    Mat element = getStructuringElement(MORPH_ELLIPSE,Size(7,3));
    morphologyEx(src,srcClone,CV_MOP_TOPHAT,element);
    imshow("src",src);
    imshow("srcClone",srcClone);
    waitKey();
}
分为两个部分,首先生成一个element,然后根据参数的不同,进行形态学变换
/* Morphological operations */
enum
{
    CV_MOP_ERODE        =0,
    CV_MOP_DILATE       =1,
    CV_MOP_OPEN         =2,
    CV_MOP_CLOSE        =3,
    CV_MOP_GRADIENT     =4,
    CV_MOP_TOPHAT       =5,
    CV_MOP_BLACKHAT     =6
};



来自为知笔记(Wiz)



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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【51单片机快速入门指南】4.4:I2C 读取HMC5883L / QMC5883L 磁力计

目录硬知识简介操作模式HMC5883L连续测量模式单次测量模式闲置模式QMC5883L连续测量模式待命模式主要差异寄存器寄存器列表HMC5883LQMC5883L配置寄存器HMC5883L配置寄存器 A配置寄存器 B模式寄存器QMC5883L控制寄存器1控制寄存器2SET/RESET Period Register数据输出寄存器HMC58…

leaflet加载离线OSM(OpenStreetMap)

转载: https://www.cnblogs.com/RainyBear/p/6011832.html leaflet作为广为应用的开源地图操作的API,是非常受欢迎,轻量级的代码让使用者更容易操作。 废话不多说,下面直接给出范例。 首先在这个网站下载leaflet的压缩包,其中包括…

Nginx 实战(一) 集群环境搭建

Nginx是什么? Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。一直纳闷这个X是怎么来的在网上查了查原来X代表很牛逼的样子,Nginx就是代表一个非常牛逼的引擎服务器系统&#xf…

【51单片机快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合

目录硬知识Python代码使用方法串口收集数据椭球拟合验证STC15F2K60S2 16.384MHz Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 Python 3.8.11 (default, Aug 6 2021, 09:57:55) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 参考资料&…

MATLAB之基本语法之常用命令

1. whos(或者who) 可以查看command window的变量 当调试MATLAB程序时,该条命令经常用到!!! 2. clc 清除命令窗口内容但是不清除变量 3. clear 清除命令窗口内容并且清除变量 4. …

手动构建磁贴服务器(16.04.2 LTS)

转载: https://switch2osm.org/manually-building-a-tile-server-16-04-2-lts/本页介绍如何安装,设置和配置操作您自己的磁贴服务器所需的所有软件。逐步说明是为Ubuntu Linux16.04.2 LTS(Xenial Xerus)编写的。 软件安装 OSM切片…

C[泊车管理系统]

// // main.c // 泊车管理系统 // // Created by 丁小未 on 13-7-14. // Copyright (c) 2013年 dingxiaowei. All rights reserved. // //题目:泊车管理系统 //(1)管理人员根据口令进入系统 //(2)管理车位信息&…

使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表

原文:使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表我们知道目标平台是32位的程序运行在64位的系统上,去访问部分注册表的时候系统自动重定向到win32node节点对应的项去了。但是做过安装程序开发人员可能遇到过“需要去掉重定向”的问题&#xff0c…

【51单片机快速入门指南】4.4.2:Mahony AHRS 九轴姿态融合获取四元数、欧拉角

目录传感器的方向源码Mahony_9.cMahony_9.h使用方法测试main.c效果STC15F2K60S2 22.1184MHz Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 上位机:Vofa 1.3.10 移植自MPU6050 获取角度理论推导(三)—9轴融合算法 —— shao15232_1 传感器…

BZOJ 2160 拉拉队排练

2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了。拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛。所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多么的重要…

React Native获取设备信息组件

转载 https://www.jianshu.com/p/907b003835dc本文原创首发于公众号:ReactNative开发圈,转载需注明出处。这次介绍的获取移动设备信息的组件名叫:react-native-device-info,兼容IOS和安卓双平台,可以获取设备ID、设备品…

UNIX网络编程——套接字选项(SO_RCVBUF和SO_SNDBUF)

有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项。int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen) int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)level指定…

【51单片机快速入门指南】4.4.3:Madgwick AHRS 九轴姿态融合获取四元数、欧拉角

目录传感器的方向源码Madgwick_9.cMadgwick_9.h使用方法测试main.c效果STC15F2K60S2 22.1184MHz Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 上位机:Vofa 1.3.10 移植自AHRS —— LOXO,算法作者:SOH Madgwick 传…

室内定位 - 资料收集

微信小程序API——获取定位 微信小程序定位权限开启或关闭怎么控制 小蜜引路:室内定位导航微信小程序 自己动手 IBeacon 室内定位 完整体验(超详细过程) 10种室内定位技术原理深度解析

关于json格式字符串解析并用mybatis存入数据库

园子里面找了很多关于json解析后存入数据库的方法,不是太乱,就是没有写完,我下面的主题代码多是受下面两位的启发,请按顺序查看 http://www.cnblogs.com/tian830937/p/6364622.html,我沿用了这个例子中的json数据格式,…

网络软件的组成

在计算机网络系统中,除了各种网络硬件设备外,还必须具有网络软件 1、网络操作系统 网络操作系统是网络软件中最主要的软件,用于实现不同主机之间的用户通信,以及全网硬件和软件资源的共享,并向用户提供统一的、方便的网络接口,便于…

【Hibernate3.3复习知识点二】 - 配置hibernate环境(annotations)

配置文件hibernate.cfg.xml中引入&#xff1a;<mapping class"com.bjsxt.hibernate.Teacher"/> <hibernate-configuration><session-factory><!-- Database connection settings --><property name"connection.driver_class"&g…

室内定位 -- 资料收集

室内定位系列&#xff08;一&#xff09;——WiFi位置指纹&#xff08;译&#xff09;

【51单片机快速入门指南】4.5:I2C 与 TCA6416实现双向 IO 扩展

目录硬知识IO 扩展芯片 TCA6416ATAC6416A 的寄存器IO 输入寄存器IO 输出寄存器IO 反相寄存器IO 方向寄存器TCA6416A 的操作TCA6416A 写数据TCA6416A 读数据TCA6416A 的 IO 输入寄存器硬件布局示例程序TCA6416A.cTCA6416A.h测试程序main.c实验现象普中51-单核-A2 STC89C52 MSP43…

linux/window 下 solr5.1 tomcat7.x 环境搭建即简单功能测试

2019独角兽企业重金招聘Python工程师标准>>> 之所以想使用solr来进行学习&#xff0c;很大一部分原因就是&#xff0c;solr能够在某种程度上提供RESTFUL相关的URL请求连接&#xff0c;可以把它理解为 以搜索引擎为基础的存储服务系统 &#xff0c;由于他的搜索可以是…