2014-05-25 2 views
4

다음 사진이 있습니다. 실제로 감지하고 싶은 것은 각 상자의 왼쪽 상단에있는 글자가있는 상자 위의 원입니다. 그러나 그 결과 다른 일부 서클도 감지합니다. 나는 이유를 모른다. I가 감지 할HoughCircles에서 잘못된 서클을 찾습니다 (opencv)

이미지 :

http://imgur.com/8oKmhGp

이 결과는 모습입니다 같은 :

http://imgur.com/qBw6YhK

당신이 그것을 원으로 편지를 종종 찾을 수 있습니다 볼 수 있듯이 및 또한 레고의 서클들. 여기 내 코드는 다음과 같습니다.

Mat source = Highgui.imread("testar.jpg", Highgui.CV_LOAD_IMAGE_COLOR); 
      Mat destination = new Mat(source.rows(), source.cols(), source.type()); 

      Imgproc.cvtColor(source, destination, Imgproc.COLOR_RGB2GRAY); 

      Imgproc.GaussianBlur(destination, destination, new Size(3,3),0,0); 


      Mat circles = new Mat(); 
      Imgproc.HoughCircles(destination, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 20, 10, 20, 7, 13); 

      int radius; 
      Point pt; 
      for (int x = 0; x < circles.cols(); x++) { 
      double vCircle[] = circles.get(0,x); 

      if (vCircle == null) 
       break; 

      pt = new Point(Math.round(vCircle[0]), Math.round(vCircle[1])); 
      radius = (int)Math.round(vCircle[2]); 

      // draw the found circle 
      Core.circle(destination, pt, radius, new Scalar(0,255,255), 3); 
      Core.circle(destination, pt, 3, new Scalar(255,255,255), 3); 
      } 

      Highgui.imwrite("foundCircles.jpg", destination); 
+0

테스트 이미지에서 발견되는 모든 것이 원이기 때문에 의도적으로 허위 원 기능이 작동하는 것 같습니다. 찾을 서클의 종류에 대해 더 높은 지식을 갖고 있다면 서클 안에 다른 문자가 있는지 여부와 관계없이 서클 내에서 어떤 색상이 있는지 테스트 해보십시오. – Micka

+0

죄송합니다, 저에게 매우 정확하게 보입니다. –

답변

3

글쎄, IMHO, Hough Circle Detection 알고리즘은 정확히 예상대로 작동합니다. 서클을 감지합니다.

그러나 휴대 전화 화면 외부에있는 원을 감지하고 싶지 않은 것처럼 보입니다.

어떻게 든 휴대 전화 (또는 모바일 화면)의 네 구석의 정확한 좌표에 손을 대면 간단한 솔루션을 구현할 수 있습니다. 단지 원하는 영역을 포함하는

Rect cropRect = new Rect(topLeft_X, topLeft_Y, widthOfRectangle, heightOfRectangle); 

하고 (원래부터) 새로운 이미지 행렬 재현이 직사각형 객체를 사용 :

하면 직사각형 블록을 정의하는 사각형 클래스를 사용

Mat croppedImage = new Mat(inputImg, cropRect); 

이제 새롭게 자른 이미지를 사용하여 Paul Hough의 알고리즘으로 원하는 모든 즐거움을 누릴 수 있습니다. 어떤 이유로 경우


이제, 당신이 (즉, 전화 이동 주위 변덕), 또는 당신 '휴대 전화의 네 모서리의 좌표를 얻는 방법에 대한 단서가없는 것으로 나타났다 O와 S를 서클로보고하는 Hough circle detection에 짜증이 나서, 고통을 덜어주기 위해 OCR 구현을 도와 줄 수 있습니다.

자바를 사용하고 있으므로 Tess4J을 사용할 수 있습니다. 또는 this project을 조정하여 모바일 화면의 문자 위치를 제한 할 수 있습니다. (도움이 될만한 다른 많은 OCR이 있습니다.

문자의 정확한 위치를 찾으면 문자의 왼쪽 상단 부근에서 Hough Circle 탐지 블록을 실행 해보십시오.

한마디로 말하자면 OCR은 자바에서 다루기 힘들고 다루기 힘든 경향이 있습니다.


여전히 결과에 만족하지 경우 (OCRs 당신과 함께 신진 대사를 방해하는 것 경우 또는), 당신은 .... 호우 라인 감지를 시도 할 수 마지막 방법이있다.

회선의 극좌표에서 회선을 감지하고 전화의 키패드를 구성하는 그리드를 추정 한 다음 그리드의 왼쪽 상단 모서리에있는 원을 감지하여 이동합니다.