3

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

谢谢,

4

3 回答 3

5

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

于 2012-01-29T18:16:07.880 回答
2

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

于 2012-10-17T18:52:49.110 回答
1

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

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

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

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

在此处输入图像描述

于 2015-02-21T00:24:49.210 回答