2013-09-30 2 views
2

나는 감지하고 다음 단계로 번호판을 읽으려고

수행 : 죄송합니다,

1) houghlines를 사용하여 사각형을 감지는 (이미이 단계에이 문제를 가지고)
2) 관점을 수정 사각형
3)이 사각형에
houghLines가 올바른 라인을 감지하지 못합니다. 이 문제를 해결하는 방법?

를 OCR을 수행하려면이 사각형의 당신은 내 코드 here의 시각적 문제/효과를 볼 수 있습니다.
코드 자체는 here입니다.

면책 조항 : 나는 이것을 위해 Emgu CV를 사용하지만, 누군가 나를 친절하게 대답 할 수 있다면,이 래퍼에 대한 답을 나에게 줄 것을 귀찮게하지 않을 것입니다.

public string loadImage() 
     { 
      OpenFileDialog ofd = new OpenFileDialog(); 
      ofd.ShowDialog(); 
      String s = ofd.FileName.Normalize(); 
      return s; 
     } 

public void processImage() 
     { 
      String s = loadImage(); 
      Image<Gray, Byte> img = new Image<Gray, byte>(s); 
      Console.WriteLine("read file @" + s); 

      Image<Gray, Byte> tinyGrayImg = img.Resize(0.25, INTER.CV_INTER_NN); 
      CvInvoke.cvShowImage("original gray", tinyGrayImg); 
      Console.WriteLine("converted " + s + " to grayscale"); 

      Image<Gray, Byte> canny = new Image<Gray, byte>(CvInvoke.cvGetSize(tinyGrayImg)); 
      CvInvoke.cvCanny(tinyGrayImg, canny, 97, 225, 3); 
      CvInvoke.cvShowImage("canny", canny); 
      Console.WriteLine("applied Canny to " + s); 

      try 
      { 
       MemStorage mem = new MemStorage(); 
       Image<Bgr, byte> linesImg = canny.Convert<Bgr, byte>(); 
       IntPtr lines = CvInvoke.cvHoughLines2(canny, mem.Ptr, HOUGH_TYPE.CV_HOUGH_PROBABILISTIC, 1, Math.PI/ 180, 70, 30, 10); 
       Seq<LineSegment2D> segments = new Seq<LineSegment2D>(lines, mem); 
       LineSegment2D[] segArray = segments.ToArray(); 

       for (int i = 0; i < segArray.Length; i++) 
       { 
        linesImg.Draw(segArray[i], new Bgr(Color.Red), 1); 
       } 
       CvInvoke.cvShowImage("lines", linesImg); 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show(e.Message); 
      } 

문제

당신은 내가 예상대로 HOUGH_PROBABILISTIC 필터가 작동하지 않습니다 (내가 직접 추가 이미지에 대한 충분한 카르마이없는) 첨부 된 이미지에서 볼 수있는 나는 아무 생각이 없기 때문에 왜 가장자리 번호판의 번호는 인식되지 않습니다. 내 목표를 달성하는 방법에 대한 아이디어는 언제나 환영합니다.

+0

당신은 여기에서 선분 검출기 코드를 시도 할 수 있습니다 : http://www.runmycode.org/CompanionSite/site.do?siteId=132 을 Hough 변환을위한 대안으로. – GilLevi

+0

솔직히 : C가 내 머리 위로 간다 –

+0

앞으로 외부 링크가 손실 될 수 있으므로 질문에 코드를 제공해주십시오. –

답변

4

해 변형은 완벽하지 않습니다. 그것은 매우 간단한 알고리즘을 따르는 라인을 탐지 할 것이고 나는 당신이 얻은 결과가 매우 좋다는 것을 확신 할 수 있습니다.

이제 결과를 필터링해야합니다. 예를 들어 줄이 항상 일정 각도에 있다는 것을 알고 있으면 나머지 부분을 제거하십시오. 그들이 약간의 길이가 될 것이라는 것을 안다면, 더 작은 것을 모두 제거하십시오.

충분하지 않은 경우 처음에는 할 수있는 멋진 변형이 충분하지 않을 수 있습니다. 컬러 (흰색 판)를 기반으로 관심 영역 (ROI)이 필요할 수 있습니다. 또는 얼룩 검출을 사용하여 흰색 물체를 찾을 수도 있습니다. 상수로 알고있는 모든 것을 컴퓨터 비전에 사용해야합니다. Hough 변환과 같은 단일 알고리즘을 사용하면 도움이되지만 모든 것을 자동으로 찾지는 못합니다. 도움이 필요합니다!

희망이 있습니다.

+0

내 문제는 실제로 번호판 주위에 줄이 없다는 것입니다. 위쪽과 아래쪽에 하나의 조각이 있지만 교차하는 선이 없기 때문에 필터로 사용할 수있는 "직사각형"(사변형 또는 평행 사변형은 원근감 때문에 더 낫습니다)을 형성합니다. –

+1

Hough Transform은 굵은 선과 긴 선을 탐지하도록 만들어졌습니다. 가능한 한 최선을 다합니다. 그래서 색상 및 얼룩 감지와 같은 더 나은 아이디어를 제안합니다. 실생활에서 (실제 사진), 허프 변환을 사용하여 아름다운 직사각형을 찾으려면 거의 불가능합니다. –