发布于 2016-04-08 00:57:55
在这种特殊情况下,最简单和最安全的解决方案是标记连接的分量(并集查找算法),并删除表面低于一个或两个像素的分量。
发布于 2016-04-08 01:13:01
另一个简单但可能不那么健壮的方法是使用轮廓面积来删除小的连通区域,然后在应用细化过程之前使用腐蚀/膨胀。
但是,您可以使用cv::findContours(,)直接处理细化后的图像,并对面积较小的轮廓进行掩码。这与FiReTiTi的回答类似。
您可以使用OpenCV中的findContour示例,使用Canny等边缘检测器构建轮廓检测。该示例可以作为您的需求的一部分直接移植。
一旦你在vector<vector<Point> > contours;中得到了等高线,你就可以遍历每个等高线,并使用cv::contourArea找到每个区域的面积。使用预定义的阈值,您可以删除不需要的区域。
发布于 2016-04-08 01:29:40
FiReTiTi和kcc__已经提供了很好的答案,但我想我应该提供另一种观点。看过你之前的一些帖子后,你似乎正在尝试构建一个软件,使用手上的血管模式来识别人。因此,在某些情况下,您将需要构建某种分类算法。
我提出这一点是因为许多这样的算法在这种噪声存在的情况下是相当健壮的。例如,如果您打算使用监督学习来训练卷积神经网络(假设您可以收集大量的训练样本,这将是一种合理的方法),您可能会发现这种类型的大量预处理是不必要的,甚至可能会降低性能。
只是一些需要考虑的想法。干杯!
https://stackoverflow.com/questions/36481695
复制相似问题