Mathematical Morphology 数学形态学

来源:互联网 发布:csgo淘宝买激活码 编辑:程序博客网 时间:2024/05/21 17:28

首先是 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



0 0
原创粉丝点击