【问题标题】:How can I get rid of the unwanted noises using morphological operation?如何使用形态学操作去除不需要的噪音?
【发布时间】:2021-11-23 19:09:26
【问题描述】:

我有这张图片,我只想获得垂直线和对角线。我在 OpenCV 中使用morphologyEx。但是,我得到的结果不符合我的要求,因为我仍然有这些不需要的噪音。不幸的是,这些噪音与线条的强度相同,因此当我应用开孔来消除噪音时,线条也会消失。 谁能帮我解决这个问题?

int main() {

    Mat dst, dst1, dst2, dst3;
    Mat src = imread("cau3.png", IMREAD_GRAYSCALE);

    imshow("source", src);

    Mat kernel1 = getStructuringElement(MORPH_RECT, Size(45, 1), Point(-1, -1));
    Mat kernel2 = getStructuringElement(MORPH_ELLIPSE, Size(11, 11), Point(-1, -1));
    Mat kernel3 = getStructuringElement(MORPH_RECT, Size(21, 21), Point(-1, -1));

    // Apply opening operation

    morphologyEx(src, dst1, MORPH_OPEN, kernel1);
    morphologyEx(src, dst2, MORPH_OPEN, kernel2);
    morphologyEx(src, dst3, MORPH_OPEN, kernel3);

    dst = src - (dst1 + dst2 + dst3);
    imshow("Vertical and Diagonal lines with noise", dst);

    waitKey(0);
    return 0;
}

这是我的原图:

这是我的结果图片:

【问题讨论】:

  • stackoverflow.com/questions/45322630/… 我认为线路检测应该是适合您的方法。
  • 你所说的“噪音”是什么?是较短的线条和点吗?如果是这样,例如,您可以查看区域开口。
  • @CrisLuengo 噪音是点,很抱歉造成这种误解。我会试试开区的,谢谢你的推荐
  • @satvikchoudhary 线路检测确实很强大,但是我的讲师没有提前教过,所以我必须想出别的办法。
  • findcontours 或 connectedcomponentswithstats,然后擦除那些小的特征(按宽度和高度)

标签: c++ opencv image-processing mathematical-morphology


【解决方案1】:

如果您绝对想使用数学形态学运算去除噪声,则必须使用所谓的“区域开口”。它是基于形状表面而不是结构元素的开口。

如果你不拘泥于数学形态学,你可以做的是去除小模式:

  • 标记连接的组件,因此在您的情况下,每组像素都是非黑色的。
  • 移除所有表面小于给定阈值的组件。

【讨论】:

  • 您的两个要点是实现二值图像区域打开的极好(并且非常常见)的方法。
  • 谢谢。黑白图像很容易,但对于灰度图像则不然,您必须使用其他算法。
猜你喜欢
  • 2014-05-18
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
相关资源
最近更新 更多