从图像中提取时钟指针

Extracting clock hands from an image

我目前正在开发一个从模拟时钟图像中提取时间的应用程序。我在从图像中提取手时遇到问题。

我目前正在使用 Hough Circle 提取钟面,然后执行 canny 边缘检测和拨号图像。然后最后一个霍夫线变换来提取手。然而,霍夫线变换也检测到时钟边缘的一些错误线条和数字等以及时钟指针。

为了解决这个问题,我尝试了获取时钟的中心并检查该点是否位于检测到的线上,因为时钟的指针总是穿过中心。然而,霍夫线并不总是 100% 准确,中心点也不是,所以并非所有霍夫线都通过中心。反正有没有看一条线是否靠近一个点?

这是一个示例图片:

可以看出,霍夫变换最初确实检测到了直线,但它们并没有完美地通过原点。所以他们被丢弃了。

您可以使用此处给出的公式计算点与线之间的距离:https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line

公式本身有点复杂(这就是为什么我只发布了link),但是如果你有你的线的坐标,你应该可以使用它。

如果你称A为中心点,这个距离的准确定义是the distance between A and the point of the line that is the closest to A。我猜你可以使用一个阈值来过滤掉离中心太远的线。但是请注意,如果您的线是与中心对齐但不穿过它的线段(例如,如果它是远离中心的数字),则阈值方法仍会产生它。