【问题标题】:How to implement Hough Circle in Java如何在 Java 中实现霍夫圆
【发布时间】:2012-02-21 17:58:51
【问题描述】:

我想找到一个圆形物体(眼睛的虹膜,我使用了 Haar Cascase 和 viola Jones 算法)。所以我发现霍夫圆是正确的方法。谁能解释我如何在 Java 中实现霍夫圆或任何其他简单的实现来用 Java 找到虹膜。

谢谢,

【问题讨论】:

    标签: java image-processing computer-vision hough-transform


    【解决方案1】:

    Duda and Hart (1971) 对霍夫变换和一个工作示例有非常清楚的解释。直接从那篇论文产生一个实现并不难,所以这是一个很好的起点。

    【讨论】:

      【解决方案2】:

      ImageJ 提供了一个Hough Circle plugin。过去我一直在玩它几次。 如果您想或需要修改它,可以查看源代码。

      【讨论】:

        【解决方案3】:

        如果您想找到虹膜,您应该直截了当。您所追求的虹膜部分实际上称为角膜缘。另请注意,角膜缘的对比度远低于瞳孔的对比度,因此如果图像分辨率允许,瞳孔是更好的目标。 Java 在这里作为编程语言不是一个好的选择,因为 1. 它很慢,但处理很激烈; 2. 由于经典的霍夫圆需要 3D 累加器,而 Java 可能意味着使用手机,内存要求会很严格。

        您可以做的是利用图像中可能只有一个(或只有几个)Limbuses 的事实。首先要做的是通过使用定向边将问题的维数从 3 降到 2:提取共同表示边方向的水平和垂直边(它们可以被认为是边向量的水平和垂直分量)。简单的想法是边缘向量的主要交点是边缘的中心。要找到交点,您只需要两个定向边而不是定义圆的三个点。因此降维从 3 降到 2。

        您也不需要使用带有巨大累加器和大量计算的经典霍夫圆变换来找到这个交点。随机霍夫会更快。这是它的工作原理(〜到RANSAC):您随机选择最小数量的定向边(在您的情况下为2),找到交点,然后找到在大致相同位置相交的所有边。这些是内线。您只需迭代 10-30 次,选择 2 条边的不同随机样本来解决具有最大内点数的集合。希望这些内点位于边缘。内点射线交点的中位数将为您提供圆的中心,从中心到内点的中位数距离是半径。

        在下图中,明亮的颜色对应于内点,方向以小线段显示。原始边缘集显示在中间(仅水平)。虽然原始边缘位于椭圆上,但霍夫边缘通过仿射变换进行变换,以使属于边缘的边缘位于一个圆上。另请注意,边缘方向非常嘈杂。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-24
          • 2014-05-12
          • 2013-10-23
          • 1970-01-01
          • 2012-10-09
          • 1970-01-01
          相关资源
          最近更新 更多