图像处理-二值形态学运算
个人博客:http://www.chenjianqu.com/
原文链接:http://www.chenjianqu.com/show-10.html
数学形态学
数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等。
数学形态学操作可以分为二值形态学和灰度形态学,灰度形态学由二值形态学扩展而来。数学形态学有2个基本的运算,即腐蚀和膨胀,而腐蚀和膨胀通过结合又形成了开运算和闭运算。 开运算就是先腐蚀再膨胀,闭运算就是先膨胀再腐蚀。本文介绍二值形态学变换。
二值形态学变换
二值形态学变换就是对二值图像进行数学形态学操作。常用操作有腐蚀、膨胀、开运算、闭运算等。腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。 膨胀就是图像中的高亮部分进行膨胀,“邻域扩张”,效果图拥有比原图更大的高亮区域。腐蚀就是原图中高亮部分被腐蚀,“邻域被蚕食”,效果图拥有比原图更小的高亮区域。
腐蚀
腐蚀操作会收缩(细化)图像中物体的轮廓,可以用来断开(分离)物体间的连接,消除离散点,代价是导致物体的面积比原来的面积要小。。
腐蚀的数学表达式为:
该式子表示用结构B腐蚀A,需要在B中定义一个参考点。B像在A上面移动(如图像卷积操作一般)。
1. 用结构元素,扫描图像的每一个像素
2. 用结构元素与其覆盖的二值图像做“与”操作
3. 如果都为1,结果图像的该像素为1。否则为0
也就是查找被处理图像中能不能找到和结构元素相同的矩阵。如果存在那么中心点所对应的点就为1,否则为0.下图为腐蚀操作的示意图:
代码实现:
Mat ErosionTransform(Mat &src,int kernelSize)
{Mat dst(src.rows, src.cols, src.type(), Scalar(0));Mat kernel = Mat::ones(kernelSize, kernelSize, CV_8UC1);if (src.channels() == 1) {int rowsSub = int(kernel.rows / 2);int colsSub = int(kernel.cols / 2);for (int i = rowsSub; i < src.rows-rowsSub; i++) {for (int j = colsSub; j < src.cols-colsSub; j++){int flag = 0;for (int ki = 0; ki < kernel.rows; ki++){for (int kj = 0; kj < kernel.cols; kj++){int i_ = i+ki - rowsSub;int j_ = j+kj - colsSub;if (src.at<uchar>(i_, j_) == 0 && kernel.at<uchar>(ki, kj) >0)flag = 1;}}if(!flag)dst.at<uchar>(i, j) = 255;elsedst.at<uchar>(i, j) = 0;}}}return dst;
}
说明:
当输入的核是一个3x3的全1矩阵时,运行效果图如下:
膨胀
膨胀操作会扩大(粗化)图像中物体的轮廓,可以用来弥补(填充)物体间的孔洞,强化离散点,代价是导致物体的面积比原来的面积要大。
膨胀的公式如下:
膨胀是和腐蚀运算相反的操作,膨胀的步骤如下:
1. 用结构元素,扫描图像的每一个像素
2. 用结构元素与其覆盖的二值图像做“与”操作
3. 如果都为0,结果图像的该像素为0。否则为1
也就是在结构元素覆盖范围下,只要有一个像素符和结构元素像素相同,那么中心点对应点就为1,否则为0.
代码实现如下:
Mat DialateTransform(Mat &src, int kernelSize)
{Mat dst(src.rows, src.cols, src.type(), Scalar(0));Mat kernel = Mat::ones(kernelSize, kernelSize, CV_8UC1);if (src.channels() == 1) {int rowsSub = int(kernel.rows / 2);int colsSub = int(kernel.cols / 2);for (int i = rowsSub; i < src.rows - rowsSub; i++) {for (int j = colsSub; j < src.cols - colsSub; j++){int flag = 0;for (int ki = 0; ki < kernel.rows; ki++){for (int kj = 0; kj < kernel.cols; kj++){int i_ = i + ki - rowsSub;int j_ = j + kj - colsSub;if (src.at<uchar>(i_, j_) >0 && kernel.at<uchar>(ki, kj) >0)flag = 1;}}if (!flag)dst.at<uchar>(i, j) =0;elsedst.at<uchar>(i, j) = 255;}}}return dst;
}
当kernelSize=3时,运行效果图如下:
闭运算
闭运算是使用同一结构元对图像进行先膨胀后腐蚀的操作,可以用来弥合较窄的间断和细长的沟壑,消除物体间小的孔洞,填补轮廓线中的断裂。
闭运算=先进行膨胀运算,在进行腐蚀运算,其运行示意图如下,
代码实现:
Mat ClosingTransform(Mat &src, int kernelSize)
{Mat dialateImg = DialateTransform(src, kernelSize);return ErosionTransform(dialateImg, kernelSize);
}
开运算
开运算是使用同一结构元对图像进行先腐蚀后膨胀的操作,可以用来平滑物体的轮廓,断开物体间较窄的连接,消除物体边沿尖锐的突出部分。
开运算 = 先腐蚀运算,再膨胀运算.示意图如下:
代码实现:
Mat OpeningTransform(Mat &src, int kernelSize)
{Mat erosionImg = ErosionTransform(src, kernelSize);return DialateTransform(erosionImg, kernelSize);
}kernelSize=5
参考文献
[1] 百度百科.数学形态学.https://baike.baidu.com/item/%E6%95%B0%E5%AD%A6%E5%BD%A2%E6%80%81%E5%AD%A6/2594174.
[2]CSDN博客:chaolei_9527. 数学形态学运算——腐蚀、膨胀、开运算、闭运算.https://blog.csdn.net/chaolei3/article/details/79618602.2018-03-20
[3]CSDN博客:青雲-吾道乐途. 膨胀与腐蚀的彻底击破.https://blog.csdn.net/qq_37059483/article/details/77878829.2017-09-07
[4]CSDN博客:HanShanBuLeng. 形态学应用——图像开运算与闭运算.https://blog.csdn.net/hanshanbuleng/article/details/80657148.2018-06-11
图像处理-二值形态学运算相关推荐
- 什么叫做形态学图像处理_数字图像处理在二值形态学及其灰度形态学方面的应用.ppt...
您所在位置:网站首页 > 海量文档  > 计算机 > 图形图像 数字图像处理在二值形态学及其灰度形态学方面的应用.pp ...
- 数字空间中的二值形态学
数字空间中的二值形态学 Binary Morphology in Digital Space Herry Herry 摘要:数学形态学作为图象处理与分析的基本理论和方法在视觉检测.生物医学图象分析.机 ...
- 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除
9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 文章目录 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 1 算法原理 2 代码 3 效果 1 ...
- 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充
9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 文章目录 9.2.3 Python图像处理之图像数学形态学-二值形态学应用-区域填充 1 算法原理 2 代码 3 效果 1 ...
- 9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀、膨胀、开启、闭合)
9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀.膨胀.开启.闭合) 文章目录 9.1 Python图像处理之图像数学形态学-二值形态学(腐蚀.膨胀.开启.闭合) 1 算法原理 1.1 ...
- 【医学图像处理】9 二值形态学
形态学及二值操作 1 形态学相关概念 2 二值形态学操作 2.1 二值膨胀 2.2 二值腐蚀 2.3 二值开操作 2.4 二值闭操作 2.5 二值形态学总结 3 二值形态学应用 1 形态学相关概念 ...
- 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测
9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 文章目录 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 1 算 ...
- 数字图像处理三 | 二值形态学操作(Distance Transform, 骨架提取,Conditional Dilation)的原理及Python实现
图像处理总结3 文末有代码链接. 二值形态学 形态学起源于法国巴黎高等矿业学院,因为人家是搞地质的. 可见一斑,形态学的精要就是在于将图像看作是等高线组成的地形图,他的基本操作就是动土,平高填低等等. ...
- 二值形态学操作、图像的边缘检测、图像编码
实验五 二值形态学操作 一.实验目的 了解二值形态学的基本运算 掌握基本形态学运算的Matlab实现 了解形态操作的应用 二.原理 收缩和膨胀是数学形态学最基本的变换,数学形态学的 ...
最新文章
- 直接上手!不容错过的Visual Studio Code十大扩展组件
- SAP WM初阶根据Group Number来查询与之有关的TO单
- IOS 打包证书签名 shell脚本
- 矩阵学习摘记,欢迎指正
- 修正TiAnlogDisplay显示的问题
- linux下用tcpdump抓包
- HTML:网页设计案例1
- 达摩达兰论估价pdf_故事与估值epub+azw3+mobi文字版pdf+txt多看word魔鸠搜雅书屋
- 百度SEO站群超简约实惠的个人简历模板源码
- BZOJ 3689 异或之
- 【程序人生】外包公司派遣到网易,上班地点网易大厦,转正后工资8k-10k,13薪,包三餐,值得去吗?
- OSChina 周二乱弹 —— 糟糕 是喵动的感觉
- Linux shell 用sed删除第一行、最后一行或增加删除某行
- 抓取图片拼接成全景图
- 华为设备配置Telnet与SSH服务实现运程连接网络设备
- Amazon EC2云计算体验
- 苹果开发者账号/AppleID如何更改绑定的手机号
- 创建TimesTen 数据库
- JAVA日记之SpringJdbcTemplate/声明式事务控制 ----喝最烈的酒.
- python抽荣耀水晶_王者荣耀:关于荣耀水晶免费抽的教程,会上当的一定是这3类人!...
热门文章
- java mbean获取堆信息_实时取得虚拟机类信息、内存信息、MXBean的使用方法
- java spi技术,Java SPI机制
- web前端之HTML
- https://www.npmjs.com/package/lifecycle-webpack-plugin
- thinkphp3.2笔记(1)目录,控制器及url模式,地址解析
- 【统计学习】随机梯度下降法求解感知机模型
- BZOJ 2565: 最长双回文串
- Html-Css标签lable中定义宽度需要其他的支持
- android 升级数据库 修改表结构
- 刷新SOTA ! 视频恢复的重中之重:时间对齐!