使用OpenCV从图像中去除噪声

时间:2016-04-07 16:10:42

标签: c++ opencv image-processing

我已使用提供的代码here对二进制图像执行细化操作。我使用的源图像就是这个。

Source Image

在源图像上应用细化操作后得到的结果图像是这个

Result Image

我面临的问题是如何消除图像中的噪点。在细化的白线周围可见。

3 个答案:

答案 0 :(得分:0)

在这种特殊情况下,最简单和最安全的解决方案是标记连接的组件(联合查找算法),并删除表面低于一或两个像素的组件。

答案 1 :(得分:0)

另一个简单但可能不那么强大的是使用轮廓区域去除小的连接区域,然后在应用细化过程之前使用侵蚀/扩张。

但是,您可以通过使用cv :: findContours(,)直接处理稀疏图像,并屏蔽小面积的轮廓。这类似于FiReTiTi的回答。

您可以使用OpenCV中的findContour示例使用边缘检测器(例如Canny)构建轮廓检测。该示例可以作为您的要求的一部分直接移植。

vector<vector<Point> > contours;中得到轮廓后,您可以迭代每个轮廓并使用cv::contourArea查找每个区域的区域。使用预定义的阈值,您可以删除不需要的区域。

答案 2 :(得分:0)

FiReTiTi和kcc__已经提供了很好的答案,但我想我会提供另一种观点。看了之前的一些帖子后,您似乎正在尝试构建使用血管模式识别人员的软件。所以在某些时候,你需要构建某种分类算法。

我提出这个问题是因为许多这样的算法在存在这种噪声的情况下非常强大。例如,如果您打算使用有监督的学习来训练卷积神经网络(假设您可以收集相当数量的训练样本,这将是一种合理的方法),您可能会发现此类的大量预处理是不必要的,并且甚至可能会降低性能。

只需考虑一些想法。干杯!