【发布时间】:2014-03-03 22:15:44
【问题描述】:
我已成功将方法 cv::approxPolyDP 应用于轮廓 (cv::findContours),以便用更简单的多边形表示轮廓并隐式进行一些去噪。
我想在从 RGBD 相机(通常非常嘈杂)获取的边缘图上做同样的事情,但到目前为止没有太大的成功,我在网上找不到相关的例子。我需要这个的原因是,通过边缘图,人们还可以使用手指之间的边缘、手指遮挡产生的边缘或手掌中产生的边缘。
此方法是否适用于除等高线以外的一般边缘图?
谁能给我举个例子?
附上一些图片:
等高线的成功例子:
边缘图的问题案例:
很可能我以错误的方式绘制东西,但仅绘制该方法返回的像素表明最终结果中可能没有表示大区域(根据 epsilon 参数,这并没有太大变化)。
我还附上了一个深度图像,类似于我在上面描述的实验管道中使用的那些。这个深度图不是深度相机获取的,而是通过OpenGL读取gpu的深度缓冲区综合生成的。
仅供参考,这也是直接从深度相机获取的深度图像的边缘图(使用原始图像,未应用平滑等)
(从深度相机看到的手,手掌朝上,手指向手掌“合拢”)
【问题讨论】:
-
我怀疑是
cv::findContours发现的边缘图有缝隙。您能发布一张来自 RGBD 相机的原始图像吗? (可能是深度图像)。如果需要去噪,则需要在轮廓/边缘查找之前应用。 -
嗨 rwong,在这种情况下,我不使用 cv::findContours,我在边缘图像上应用 Canny 边缘检测。目前我没有预先对边缘图像进行去噪,因为我首先想看看获取的真实数据的质量,但你是对的,在边缘检测之前也应该去噪一点。但是我必须注意,作为第一步,我使用综合生成的数据(OpenGL 的深度缓冲区),因此在我发布的示例中不需要去噪。我将编辑问题以添加合成深度图像。
-
对于 Canny 边缘检测,降低较低阈值(同时保持较高阈值相同)将导致更多边缘像素被标记,从而减少边缘链中出现间隙的机会。我之前没有使用过
approxPolyDP,所以我无法对此发表评论。教训是,如果某个步骤存在缺陷,通常很难在后续步骤中修复。 -
这是对的,但是图像显示canny边缘检测已经足够了,提供了有意义的边缘图(另外,降低阈值会产生更多的内边缘,对外边缘没有显着影响)。所以我想在这个阶段没有神器,要么是我以错误的方式使用了 approxPpolyDP,要么它无法处理非闭合轮廓图(我认为不是这种情况,也是基于方法的输入参数)。
标签: c++ opencv image-processing gesture-recognition