目录
数学形态学是基于集合论的图像处理方法,最早出现于生物学的形态与结构中,图像处理中的形态学操作用于图像预处理操作(去噪、形状简化)、图像增强(骨架提取、细化、凸包及物体标记)、物体背景分割及物体形态量化等场景中。数学形态学利用点集的性质、积分几何集及拓扑学理论对物体像素集进行变换。
那么操作有如下:
-
腐蚀与膨胀操作
-
开闭运算操作及实现
-
形态学梯度操作
-
形态学TOP-Hat
0x01 腐蚀膨胀操作
膨胀操作时形态学的基本操作,实现了对目标像素点进行扩展的目的,其定义如下:

形态学膨胀操作的思路:

运算前A与B分别为两个区域,B区域的黑点表示B的中心点,非B表示B相对于自己中心对称变换后的图形,运算后相当于B对称,沿着区域A的边界遍历一圈,区域B的中心扫过区域加上A本身的区域就是区域A膨胀区域B的结果,其中(B)z表示将B平移,使其中心点位于z位置。
腐蚀操作也是形态学的基本操作,实现了对目标像素点进行缩小的目的,其定义:
腐蚀操作思路:

运算前A与B分别为两个区域,使用B对A进行腐蚀就是沿着区域A的内部边界遍历一圈,平移区域B形成的集合区。B的中心形成的轨迹即是腐蚀后Z的边界,(B)z表示的是B的平移,使其中心点位于z位置。
腐蚀与膨胀可以看作一种互逆运算,膨胀对原始区域扩大,腐蚀对原始区域缩小。在OpenCV中如何操作?erode()腐蚀,dilate()膨胀。
void erode(
InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor=Point(-1,-1),
int iterations=1,
int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultB-orderValue()
)
void dilate(
InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType=BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefault-BorderValue()
)
函数解释:
Erode()使用一个特定的结构化元素侵蚀一个图像,Dilate()使用图像结构化元素进行膨胀。
-
src:输入图像(二值化、灰度图像)
-
dst:输出图像(参数类型与输入图像一致)
-
kernel:表示定义的结构元素大小
-
anchor:结构元素的中心,如果默认参数(-1,-1),程序会自动将其设置为结构元素的中心。
-
iteration:迭代次数,可以选择对图像进行多次形态学运算。
-
borderType以及borderValue:可选择参数设置,针对边界设置。
那么腐蚀膨胀后的图像到底是什么样子?我们以下面这张图片做实验:

使用腐蚀:

使用膨胀:

代码:
int main()
{
cv::Mat srcImage = cv::imread("./image/CC.png");
if (!srcImage.data)
return 1;
cv::Mat srcGray;
cvtColor(srcImage, srcGray, CV_RGB2GRAY);
cv::Mat segDst, dilDst, eroDst;
// 分通道二值化
cv::inRange(srcGray, cv::Scalar(100),
cv::Scalar(255), segDst);
// 定义结构元素
cv::Mat element = cv::getStructuringElement(
cv::MORPH_ELLIPSE, cv::Size(5, 5));
// 腐蚀膨胀操作
cv::dilate(segDst, dilDst, element);
cv::erode(segDst, eroDst, element);
cv::imshow(" srcGray ", srcGray);
cv::imshow(" segDst ", segDst);
cv::imshow(" dilDst ", dilDst);
cv::imshow(" eroDst ", eroDst);
cv::waitKey();
return 0;
}
cv::inRange:将两个阈值内的像素值设置为白色,而不在阈值内的像素值设置为黑色。
cv::getStructuringElement:可用于构造一个特定大小和形状的结构元素,用于图像形态学处理。
cv::getStructuringElement(
int shape, //结构元素形状
Size ksize, //结构元素大小
Point anchor = Point(-1,-1) //锚点 默认值Point(-1,-1)表示锚点位于结构元素中心
)
对于结构元素的形状:

从上往下是:方形、交错形状、椭圆形元素,内切于Rect(0, 0, esize.width, 0.esize.height)定义的矩形。
那么再往下讲叭:
膨胀操作中队输入图像进行特定结构元素操作取决于滑动窗口图像相关邻域的最大值,同时该

本文介绍了数学形态学的基本操作,如腐蚀、膨胀、开闭运算和形态学梯度,以及它们在角点提取和车牌识别中的实际应用。通过实例演示了如何使用OpenCV进行形态学处理,展示了形态学在去除噪声、边缘检测和区域分割中的重要作用。
最低0.47元/天 解锁文章
3704

被折叠的 条评论
为什么被折叠?



