2013-09-30 64 views
2

工作做

我嘗試檢測,並與這些步驟讀取車牌:

1)通過使用houghlines檢測四邊形(已經拿到了這個問題,這一步,對不起)
2)修正角度這個四邊形爲矩形
3)在這個矩形執行OCR
houghLines沒有檢測到正確的線條。如何糾正?

,你可以看到我的代碼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

我的問題是車牌周圍沒有真正的線條。只是一個頂部和底部的一塊,但沒有相交線形成一個「矩形」(四邊形或paralellogram更好,因爲它的角度),我可以使用它作爲一個過濾器。 –

+1

霍夫變換是爲了檢測粗線和長線。它儘可能提供最好的服務。這就是爲什麼我建議更好的想法,如顏色和斑點檢測。在現實生活中(真實圖片),希望通過hough變換找到一個美麗的矩形幾乎是不可能的。 –