您现在的位置是:主页 > news > 提供网站建设工具的公司/专业推广图片
提供网站建设工具的公司/专业推广图片
admin2025/4/24 4:15:18【news】
简介提供网站建设工具的公司,专业推广图片,wordpress 手机模版,简单的网页一、前言 图像形态学操作(morphology operators)——基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学常用的形态学处理方法包括︰腐蚀、膨胀、开运算、闭运算等其中膨胀与腐蚀是图像处理中最常用的形态学操作手段,腐蚀和膨胀 &…
一、前言
- 图像形态学操作(morphology operators)——基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学
- 常用的形态学处理方法包括︰腐蚀、膨胀、开运算、闭运算等
- 其中膨胀与腐蚀是图像处理中最常用的形态学操作手段,腐蚀和膨胀 (Erosion/Dilation),用白话说,就是让图像亮的区域收缩和扩张
二、膨胀
1、膨胀跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状。
图像的膨胀操作与中值平滑操作很像,取每一个位置的矩形领域内值的最大值作为该位置的输出灰度值。不同的是,膨胀的范围不再是单纯矩形结构,也可以是椭圆形、十字交叉形结构等
所以膨胀后输出图像的总体亮度的平均值比起原图会有所升高,图像中比较亮的区域的面积会变大,而较暗物体的尺寸会减小甚至消失。
2、API:dilate
c++函数原型
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:表示输入矩阵(图片)
- dst: 表示输出矩阵(图片)
- element:表示结构元,即 函数getStructuringElement( )的返回值
- anchor:结构元的锚点,即参考点
- iterations:膨胀操作的次数,默认为一次
- borderType:边界扩充类型
- borderValue:边界扩充值
三、腐蚀
1、腐蚀在形态学操作家族里是膨胀操作的孪生姐妹。跟膨胀操的过程类似,唯—不同的是以最小值替换锚点重叠下图像的像素值(提取的是内核覆盖下的相素最小值。)
将内核 B 划过图像,将内核 B 覆盖区域的最小相素值提取,并代替锚点位置的相素。以与膨胀相同的图像作为样本,我们使用腐蚀操作。
从下面的实现效果中我们看到白色明亮部分变细变小,而黑色部分则变大变粗了。
2、API:erode
c++函数原型
CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );
参数说明:(与膨胀基本类似)
- src:输入矩阵(图片)
- dst:输出矩阵
- element:表示结构元(同上)
- anchor:结构元的锚点,即参考点
- iterations:腐蚀操作的次数,默认为一次
- borderType:边界扩充类型
- borderValue:边界扩充值
四、结构元形状构造
1、API :getStructuringElement
c++函数原型
CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
参数说明:
1、 shape:
- MORPH_RECT 表示产生矩形的结构元
- MORPH_ELLIPSEM 表示产生椭圆形的结构元
- MORPH_CROSS 表示产生十字交叉形的结构元
2、ksize:表示结构元的尺寸,即(宽,高),必须是奇数
3、 anchor:表示结构元的锚点,即参考点。默认值Point(-1, -1)代表中心像素为锚点
五、实现效果
膨胀:
腐蚀:
六、代码
Mat src, dst; // 全局变量
int element_size = 1; //全局变量
int max_size = 21; // 全局变量void call_back(int, void*);
int main(int argc, char *argv[])
{src = imread("D:/ChaunYi/Qt/images/ice.png");if (src.empty()){printf("could not load the image...\n");return -1;}namedWindow("input", CV_WINDOW_AUTOSIZE);imshow("input", src);namedWindow("after dilate", CV_WINDOW_AUTOSIZE);createTrackbar("structure size:", "after dilate", &element_size, max_size, call_back);call_back(element_size, 0);waitKey(0);destroyAllWindows();//销毁前面创建的窗口return 0;
}void call_back(int, void*)
{int s = element_size * 2 + 1;
//创建结构元Mat structure_element = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
//调用膨胀APIdilate(src, dst, structure_element, Point(-1, -1), 1); imshow("after dilate", dst);
// erode
}
注意:
经过膨胀后的图片能不能用腐蚀的方法进行完全的还原
当使用的内核很小(int element_size = 1; )时,膨胀过的图片可以使用腐蚀进行大部分还原。但是内核较大的时候,还原的图片跟原图相比在细节上丢失很多信息,大家可以通过动手试试