本文主要是介绍Mathematical Morphology 数学形态学,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
首先是 structuring element.
A structuring element can be simply defined as a configuration of
pixels on which an origin is defined (also called an anchor point).
---------------opencv cookbook
定义一个structuring element.
Mat getStructuringElement( int shape, Size ksize, Point anchor=Point(-1,-1) )
其中StructuringElement的形状
– MORPH_RECT - a rectangular structuring element
– MORPH_ELLIPSE - an elliptic structuring element, that is, a filled ellipse inscribed
into the rectangle Rect(0, 0, esize.width, 0.esize.height)
– MORPH_CROSS - a cross-shaped structuring element
– CV_SHAPE_CUSTOM - custom structuring element (OpenCV 1.x API)
当然, 定义StructuringElement可以直接定义Mat, 但不如getStructuringElement方便
而且会造成形态学变换的不稳定, 要将Mat内的元素赋值才可以, 初始化一块Mat后不一定会是什么值
如:
使用了cv::Mat(cv::Size(22,7),CV_8U)作为结构元素,每运行一次都产生不同的结果
而原本的cv::Matelement=cv::getStructuringElement(cv::MORPH_RECT,cv::Size(22,7));一直是这样
究其原因可能是未对Mat像素进行初始化.
形态学最基本的操作就是腐蚀和膨胀, 将他们二者结合
腐蚀用伪代码描述就是
for(all pixels in the element){
sum = A1 + A2 + .... +An; //A0,A1,...An 代表原 结构元素上的像素 , 0 代表中心
if (sum < somevalue)
B0 = 0; //B0代表新图像像素, 0 代表中心
else B0 =1;
}
膨胀
for(all pixels in the element){
sum = A1 + A2 + .... +An;
if (sum > somevalue)
B0 = 1;
else B0 =0;
}
也就是说 , 在一个 structuring element内, 除了中央点( anchor point)不计, 求其余像素之和,看是否大于或小于某个值, 若符合条件, 相应的将中央像素置为1 或 0
腐蚀可以去掉pepper噪声, 膨胀可以去掉salt噪声
以这两个操作组合构成了形态学的基本操作
opencv内对应的函数是
void morphologyEx( InputArray src, OutputArray dst, int op, InputArray kernel, Point anchor=Point(-1,-1),
int iterations=1, int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultBorderValue() )
其中op 代表操作方式
– MORPH_OPEN - an opening operation 先腐蚀后膨胀
– MORPH_CLOSE - a closing operation 先膨胀后腐蚀
– MORPH_GRADIENT - a morphological gradient 分别做腐蚀和膨胀, 然后用 膨胀后的 - 腐蚀后的
– MORPH_TOPHAT - “top hat” 原图像 - 原图像的开运算
– MORPH_BLACKHAT - “black hat” 原图像的闭运算 - 原图像
– MORPH_HITMISS - “hit and miss” http://homepages.inf.ed.ac.uk/rbf/HIPR2/hitmiss.htm
这篇关于Mathematical Morphology 数学形态学的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!