2016年3月26日 星期六

Morphological Dilation and Erosion using OpenCV

Morphological Dilation and Erosion using OpenCV

型態學常用的4個運算:

  • 膨脹(Dilation)
  • 侵蝕(Erosion)
  • 斷開(Opening)
  • 閉合(Closing)

運用層面:

  • 消除影像中的雜訊時 (Removing noise)
  • 計算影像中的連通物件時 (Isolation of individual elements and joining disparate elements in an image.)
  • 尋找影像中最大物件或最小區域時 (Finding of intensity bumps or holes in an image)

膨脹(Dilation)

A是目標影像,B是結構元素,膨脹就是A⊕B

Dilation

侵蝕(Erosion)

A是目標影像,B是結構元素,侵蝕就是AΘB

Erosion

斷開(Opening)

先侵蝕再膨脹,斷開就是(AΘB)⊕B

Opening

閉合(Closing)

先膨脹再侵蝕,閉合就是(A⊕B)ΘB

Closing

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 輸入影像 (CV_8U、CV_16U、CV_16S、CV_32F或CV_64F)
  • dst 輸出影像
  • kernel 膨脹結構元素
  • anchor 結構元素的原點
  • iterations 膨脹次數
  • borderType
  • borderValue
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
cv::Mat dilateImg;
cv::dilate(srcImg, dilateImg, element, cv::Point(-1,-1), 1);

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 輸入影像 (CV_8U、CV_16U、CV_16S、CV_32F或CV_64F)
  • dst 輸出影像
  • kernel 侵蝕結構元素
  • anchor 結構元素的原點
  • iterations 侵蝕次數
  • borderType
  • borderValue
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
cv::Mat erodeImg;
cv::erode(srcImg, erodeImg, element, cv::Point(-1,-1), 1);

cv::Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1))

  • shape MORPH_RECT、MORPH_CROSS、MORPH_ELLIPSE
  • ksize 結構元素的大小
  • anchor 結構元素的原點

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() )

  • src 輸入影像 (CV_8U、CV_16U、CV_16S、CV_32F或CV_64F)
  • dst 輸出影像
  • kernel 侵蝕結構元素
  • op 型態學的類別
    1. MORPH_OPEN
    2. MORPH_CLOSE
    3. MORPH_GRADIENT
    4. MORPH_TOPHAT
    5. MORPH_BLACKHAT
    6. MORPH_HITMISS
  • iterations 膨脹或侵蝕次數
  • borderType
  • borderValue
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
cv::Mat closeImg;
cv::morphologyEx( srcImg, closeImg, cv::MORPH_CLOSE, element);

cv::Mat openImg;
cv::morphologyEx( srcImg, openImg, cv::MORPH_OPEN, element);

各種方法的結果

詳細Sample Code請參考GitHub

更多OpenCV文章請參考:OpenCV Tutorial (學習筆記)

0 意見:

張貼留言