2012-01-29 5 views
3

원형 객체 (아이리스의 눈, 나는 비올라 존스 알고리즘의 Haar Cascase를 사용함)를 찾고 싶습니다. 그래서 난 원숭이 동그라미가 그것을 할 올바른 방법이 될 것이라고 발견했다. 아무도 자바에서 홍채 원을 구현하는 방법이나 Java로 홍채를 찾는 다른 쉬운 구현을 설명 할 수 있습니다.Java에서 Hough Circle을 구현하는 방법

감사합니다,

답변

1

홍채를 찾으려면이 문제에 대해 간단해야합니다. 홍채의 일부는 실제로 윤부라고 부릅니다. 윤곽선의 명암이 동공의 명암보다 훨씬 낮으므로 이미지 해상도가 동공을 허용하는 것이 더 좋은 표적이라는 점에 유의하십시오. Java는 프로그래밍 언어로서 좋은 선택이 아닙니다. 1. 처리 속도가 느리다. 2. 고전적인 Hough Circle은 3D accumulator를 필요로하고 Java는 휴대 전화를 사용한다는 것을 의미하기 때문에 메모리 요구 사항은 어려울 것입니다.

당신이 할 수있는 일은 아마도 이미지에 단일 (또는 소수의) Limb가 있다는 사실을 사용하는 것입니다. 우선 할 일은 지향적 인 가장자리를 사용하여 문제의 차원을 3에서 2로 줄이는 것입니다. 가장자리 방향을 나타내는 수평 및 수직 가장자리 추출 (가장자리 벡터의 수평 및 수직 구성 요소로 간주 될 수 있음). 간단한 아이디어는 가장자리 벡터의 주요 교차점이 윤곽선의 중심이라는 것입니다. 교차점을 찾으려면 원을 정의하는 세 점 대신 두 개의 방향이 지정된 모서리 만 필요합니다. 따라서 차원이 3에서 2로 줄어 듭니다.

거대한 어큐뮬레이터가있는 고전적인 Hough circle 변환과이 교차점을 찾기위한 많은 계산이 필요하지 않습니다. Randomized Hough는 훨씬 빨라질 것입니다. RANSAC에 대한 방법은 다음과 같습니다. 무작위로 방향 지정된 모서리 수를 선택하고 (사례 2) 교차점을 찾은 다음 거의 같은 위치에서 교차하는 모서리를 모두 찾습니다. 이들은 inliers입니다. 당신은 단지 10-30 번 반복하여 2 개의 모서리로 구성된 임의의 무작위 샘플을 선택하여 최대 inliers 수를 갖는 세트로 정하십시오. 바라 건데,이 inliers는 limbus에있다. Inlier ray 교차점의 중앙값은 원의 중심을 제공하고 중심에서의 inliers까지의 중앙값은 반지름입니다.

아래 그림에서 밝은 색상은 inliers에 해당하며 방향은 작은 선분으로 표시됩니다. 원본 가장자리 세트는 중간에 표시됩니다 (수평 만). 원래 가장자리가 타원을 따라 존재하는 동안 Hough 가장자리는 경계선에 속한 사람들을 원에 놓기 위해 Affine 변환에 의해 변형되었습니다. 또한 가장자리 방향이 꽤 시끄럽다는 것을 유의하십시오.

enter image description here

5

Duda and Hart (1971)는 호우의 아주 명확한 설명 변환하고 가공 한 예를 가지고있다. 이 논문에서 직접 구현을 만드는 것은 어렵지 않으므로 시작할 수있는 좋은 장소입니다.

2

ImageJ는 Hough Circle plugin을 제공합니다. 나는 과거에 여러 번 그걸 가지고 놀았습니다. 소스 코드를 원한다면 수정할 수도 있습니다.

관련 문제