hou*_*oft 1 c opencv computer-vision edge-detection feature-detection
这是我的源图像(忽略点,稍后手动添加):

我的目标是获得两只手的粗略多边形近似.像这样的东西:

我对如何做到这一点有一个大概的想法; 我想用来cvCanny找到边缘,cvFindContours找到轮廓,然后cvApproxPoly.
我面临的问题是我不知道如何正确使用cvCanny,特别是我应该使用什么来处理最后3个参数(threshold1&2,apertureSize)?我试过做:
cvCanny(source, cannyProcessedImage, 20, 40, 3);
Run Code Online (Sandbox Code Playgroud)
但结果并不理想.左手看起来相对较好,但右手检测得很少:

一般来说,它不像我想的那么可靠.有没有办法猜测Canny的"最佳"参数,或者至少是一个详细的解释(初学者可以理解)他们做了什么,所以我可以做出有根据的猜测?或者也许有更好的方法来完成这项工作?
看来你必须降低你的门槛.
Canny算法处理滞后阈值:如果至少一个像素与最大阈值一样亮,则选择轮廓,如果它们高于下阈值,则选择所有连接的轮廓像素.
论文建议采用2:1 oe 3:1(例如10和30,或20和60等)的两个阈值.对于某些应用程序,手动和硬编码确定的阈值就足够了.也可能是你的情况.我怀疑如果你降低你的门槛,你会得到很好的结果,因为图像并不复杂.
已经提出了许多自动确定最佳阈值阈值的方法.他们中的大多数依靠梯度幅度来估计最佳阈值.
脚步:
注意: Matlab中实现了一种出色的阈值检测算法.它基于上面的想法,但有点复杂.
注2:如果图像区域之间的轮廓和照明变化不大,则此方法将起作用.如果轮廓在图像的一部分上更清晰,那么您需要局部自适应阈值,这是另一个故事.但看着你的照片,情况应该不是这样.
| 归档时间: |
|
| 查看次数: |
3598 次 |
| 最近记录: |