【问题标题】:How can i remove noise in this image -openCV我如何去除这张图片中的噪点-openCV
【发布时间】:2014-05-14 09:49:03
【问题描述】:

我正在尝试去除这张图片中的噪点:

旨在隔离三角形

实际上我有很多这样的图片(带有一些噪点的三角形),我不知道如何去除噪点。我想要一个没有噪音的大三角形来处理它(检测兴趣点)。

我尝试过侵蚀和所有这些东西,但没有成功。你知道我可以如何改进这个结果吗?

【问题讨论】:

  • 由于“想要”和“嘈杂”元素之间没有真正的区别,因此无论您尝试什么,通用处理步骤都不会成功。您将不得不实现一些特定的过滤器来检测元素是否是“三角形”,恐怕......
  • 谢谢,我其实是openCV的初学者。所以他们没有任何方法......我如何用这种图片检测三角形......在我看来有点难。
  • 这不是 opencv 的限制,它是一个普遍的问题:无论您使用什么图形工具包,使用通用算法都无法解决您提出的任务。对于没有图像处理经验的人来说,实施过滤器当然不是一件容易的事。
  • 好吧,我得想办法做到这一点...谢谢

标签: c++ opencv noise


【解决方案1】:

随后膨胀的侵蚀会扭曲三角形的形状。您可以使用connected components (CC) 甚至更好的floodFill 并根据面积删除(用零填充)(floodFill 输出它找到的每个 CC 的面积)。当然,如果您确定要保留的始终是三角形,则可以添加一个额外的步骤以在消除噪声之前验证三角形。下面的代码找到最大的段并用红色勾勒出它的轮廓。三角形形状的验证由绿色圆圈表示,可以通过查看 approx 向量中的多边形近似来进一步探索。

vector<vector<Point> > contours;
Mat hierarchy, I Icol; 
Icol = imread("triang.png");
cvtColor(Icol, I, CV_BGR2GRAY);

// Find connected components (CC)
findContours(I.clone(), contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);

// Select the largest CC 
int ncontours = contours.size();
int max_sz = 0, max_idx;
for (int i=0; i<ncontours; i++) {
    int sz = contours[i].size();
    if (max_sz<sz) {
        max_sz = sz;
        max_idx = i;
    }
}
for (int i=0; i<max_sz; i++) {
    Point pt = contours[max_idx][i];
    Icol.at<Vec3b>(pt.y, pt.x) = Vec3b(0, 0, 255);
}

// Verify triangle
vector<Point> approx;
approxPolyDP(contours[max_idx], approx, 10, true);
cout<<Mat(approx)<<endl;
for (int i=0; i<approx.size(); i++) {
    Point pt = approx[i];
    circle(Icol, pt, 3, Scalar(0, 255, 0), 2);
}
imshow("largest", Icol); imwrite("triangle.png", Icol);
waitKey(-1);

【讨论】:

  • 感谢您的解决方案!我不知道我可以这样做...为了知道我是否做得好,你试图在图片中找到轮廓并在这个轮廓上找到最大的线(为了消除“噪音)并在您验证它是否是三角形之后(我必须检查该方法,因为我不知道 AproxPolyDp 方法如何检测三角形..)
  • 是的,你明白了。 ApproxPolyDp 检测轮廓的简单多边形近似,但当然,当您看到这个多边形只有三个顶点时,它只能是一个三角形。所以你可以只计算返回向量中多边形的顶点。请注意,虽然您的轮廓不完全是三角形,但 ApproxPolyDp 使用容差参数将更简单的多边形拟合到此容差。如果您将容差设置得太低,您可能会得到比三角形更复杂的多边形。我通过实验发现,tolerance=10 对您的图像效果很好。当然,还有许多其他解决方案。
猜你喜欢
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
相关资源
最近更新 更多