数学形态学概述:建立在格伦和拓扑学基础之上的图像分析科学
基本运算:二值腐蚀和膨胀
二值开闭运算
骨架抽取
极限腐蚀
击中击不中变换
形态学梯度
Top-hat变换
颗粒分析
流域变换
灰值腐蚀和膨胀
灰值开闭运算
灰值形态学梯度
...
膨胀/腐蚀数学本质:图像A与核B的卷积操作
膨胀/腐蚀的功能:消除噪声
分割出独立的图像元素,
在图像中连接相邻元素
寻找图像中极大值/极小值区域
求出图像梯度
膨胀:求局部最大值的操作,锚点为核中元素最大值
腐蚀:求局部最小值的操作,锚点为核中元素最小值
构造kernel函数:getStructuringElement
Mat getStructuringElement(int shape,
Size ksize,
Point anchor=Point(-1,-1));
参数1 shape:可以用如下的枚举类型
参数2 ksize:核的大小
参数3 anchor:锚点,默认为中心点
//! shape of the structuring element
enum {
MORPH_RECT=0, //矩形
MORPH_CROSS=1, //十字形
MORPH_ELLIPSE=2 //椭圆形
};
例:
int tempsize = 5;
Mat element = getStructuringElement(MORPH_ELLIPSE,
Size(2 * tempsize + 1, 2 * tempsize + 1),
Point(tempsize, tempsize));
void erode(InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue())
{
//调用morphOP函数,MORPH_ERODE模式
morphOP(MORPH_ERODE,
src,
dst,
kernel,
anchor,
iterations,
borderType,
borderVlaue)
}
膨胀函数dilate
void dilate(InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue())
{
//调用morphOP函数,MORPH_DILATE模式
morphOP(MORPH_DILATE,
src,
dst,
kernel,
anchor,
iterations = 1,
borderType,
borderVlaue)
}
常用参数说明:
参数3 kernel:核,如果=NULL,则表示使用参考点位于中心的3*3的核,可用getStructuringElement函数构造
参数4 anchor:锚点,默认为中心点
参数5 iterations:迭代调用该函数的次数,默认值为1
例:
Mat image = imread("1.jpg");
Mat element = getStructuringElement(MORPH_RECT,Size(15,15));
Mat out;
dilate(image, out, element);
erode(image, out, element);
基本运算:二值腐蚀和膨胀
二值开闭运算
骨架抽取
极限腐蚀
击中击不中变换
形态学梯度
Top-hat变换
颗粒分析
流域变换
灰值腐蚀和膨胀
灰值开闭运算
灰值形态学梯度
...
膨胀/腐蚀数学本质:图像A与核B的卷积操作
膨胀/腐蚀的功能:消除噪声
分割出独立的图像元素,
在图像中连接相邻元素
寻找图像中极大值/极小值区域
求出图像梯度
膨胀:求局部最大值的操作,锚点为核中元素最大值
腐蚀:求局部最小值的操作,锚点为核中元素最小值
构造kernel函数:getStructuringElement
Mat getStructuringElement(int shape,
Size ksize,
Point anchor=Point(-1,-1));
参数1 shape:可以用如下的枚举类型
参数2 ksize:核的大小
参数3 anchor:锚点,默认为中心点
//! shape of the structuring element
enum {
MORPH_RECT=0, //矩形
MORPH_CROSS=1, //十字形
MORPH_ELLIPSE=2 //椭圆形
};
例:
int tempsize = 5;
Mat element = getStructuringElement(MORPH_ELLIPSE,
Size(2 * tempsize + 1, 2 * tempsize + 1),
Point(tempsize, tempsize));
MORPH_RECT
MORPH_CROSS
MORPH_ELLIPSE
void erode(InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue())
{
//调用morphOP函数,MORPH_ERODE模式
morphOP(MORPH_ERODE,
src,
dst,
kernel,
anchor,
iterations,
borderType,
borderVlaue)
}
膨胀函数dilate
void dilate(InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue())
{
//调用morphOP函数,MORPH_DILATE模式
morphOP(MORPH_DILATE,
src,
dst,
kernel,
anchor,
iterations = 1,
borderType,
borderVlaue)
}
常用参数说明:
参数3 kernel:核,如果=NULL,则表示使用参考点位于中心的3*3的核,可用getStructuringElement函数构造
参数4 anchor:锚点,默认为中心点
参数5 iterations:迭代调用该函数的次数,默认值为1
例:
Mat image = imread("1.jpg");
Mat element = getStructuringElement(MORPH_RECT,Size(15,15));
Mat out;
dilate(image, out, element);
erode(image, out, element);
MORPH_RECT