Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 利用OpenCV去除图像中的噪声_C++_Opencv_Image Processing - Fatal编程技术网

C++ 利用OpenCV去除图像中的噪声

C++ 利用OpenCV去除图像中的噪声,c++,opencv,image-processing,C++,Opencv,Image Processing,我用提供的代码对二值图像执行了细化操作。我使用的源图像就是这个 在对源图像进行细化操作后得到的结果图像就是这个 我面临的问题是如何去除图像中的噪声。在细白线周围可见 在这种特殊情况下,最简单和最安全的解决方案是标记连接的组件(联合查找算法),并删除表面低于一个或两个像素的组件。另一个简单但可能不太可靠的方法是使用轮廓区域删除小的连接区域,然后在应用细化过程之前使用腐蚀/扩张 但是,您可以通过使用cv::findContours(,)和面积较小的轮廓遮罩直接处理细化图像。这与FiReTiTi的

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

在对源图像进行细化操作后得到的结果图像就是这个


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

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

另一个简单但可能不太可靠的方法是使用轮廓区域删除小的连接区域,然后在应用细化过程之前使用腐蚀/扩张

但是,您可以通过使用cv::findContours(,)和面积较小的轮廓遮罩直接处理细化图像。这与FiReTiTi的回答类似

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


矢量轮廓中获得轮廓后可以迭代每个轮廓并使用查找每个区域的面积。使用预定义的阈值可以删除不需要的区域

FiReTiTi和kcc已经提供了很好的答案,但我想我应该提供另一个视角。在浏览了您以前的一些帖子之后,您似乎正在尝试构建一个软件,该软件使用手上的血管模式来识别人。因此,在某个时候,您需要构建某种分类算法

我之所以提出这一点,是因为许多这样的算法在存在这种噪声的情况下非常健壮。例如,如果您打算使用有监督的学习来训练卷积神经网络(假设您可以收集大量的训练样本,这是一种合理的方法),您可能会发现不需要进行此类广泛的预处理,甚至可能会降低性能


只是考虑一下。干杯

在我看来,为什么不在第一张图像上使用距离变换,然后从结果图像中使用大小过滤器对图像进行去斑点处理。

我修改了我的答案,并提供了一些可能对您有所帮助的示例链接。如果我能进一步提供帮助,请告诉我。我现在就试试,过一会儿再告诉你。非常感谢你的帮助,我使用了你在回答中提到的确切方法,它给了我正确的结果。还有一件事,我的导师告诉我在细化的图像上使用细节。你能帮我怎么做吗?对不起,我没听懂你的话。你能详细说明一下吗。