2015-05-01 17 views
1

我需要檢測方的大小在這樣一個網格(所有的廣場都應該是平等的): http://imgur.com/VZAimWS在網格上檢測見方大小

我能想到的許多不同的策略,找出一個正方形邊的長度是多少,但我預計可能會有一種特定的技術在提供更準確的答案方面更強大或更好。有小費嗎?我正在探索的一件事是確定每條平行線並找出線條之間的平均距離(或者中間距離)。

如果它是相關的,我打算使用MatLab或OpenCV來做到這一點。

謝謝

+0

試着問這個在http:// DSP .stackexchange.com /可能會得到更多回復。 – rounak

回答

4

我看你想這樣做在Matlab,但你可以從我的ImageMagick的,這是安裝在大多數Linux發行版攻擊它得到一些啓示,以及可用於OS X和Windows從here免費。

下面是我如何進行的骨頭 - 這是在終端只是一個命令 - 沒有編譯器,沒有OpenCV的,沒有Matlab的:

convert grid.jpg         \ 
    -threshold 80% -negate       \ 
    -morphology Thinning:-1 Skeleton    \ 
    \(+clone          \ 
     -background none       \ 
     -fill red -stroke red -strokewidth 2  \ 
     -hough-lines 9x9+150 -write lines.mvg  \ 
    \)            \ 
    -composite hough.png 

那個可愛的命令,做下列步驟操作:

  • 閾值的圖像爲黑色和白色,在80%
  • 反轉它
  • 它變薄到骨骼

  • 拷貝整幅和在副本上執行霍夫線檢測所檢測到的線着色線在紅色

  • 疊加層。返回到原始圖像

輸出的圖像是這樣的:

enter image description here

和文件lines.mvg包含行座標上的數學是需要...

# Hough line transform: 9x9+150 
viewbox 0 0 1777 1449 
line 177.944,0 102.005,1449 # 191 <-- shown in yellow below 
line 171.848,0 121.248,1449 # 332 
line 0,118.401 1777,149.419 # 453 
line 0,143 1777,143 # 181 
line 0,283.426 1777,314.444 # 431 
line 504.586,0 479.293,1449 # 252 
line 0,454.452 1777,485.47 # 403 
line 0,481 1777,481 # 164 
line 0,627.479 1777,658.496 # 309 
line 0,649 1777,649 # 233 
line 842.637,0 817.345,1449 # 299 
line 0,801.505 1777,832.523 # 558 
line 0,844.525 1777,813.507 # 167 
line 0,973.531 1777,1004.55 # 291 
line 0,1013.55 1777,982.533 # 158 
line 1180.69,0 1155.4,1449 # 495 
line 0,1146.56 1777,1177.58 # 396 
line 0,1182.58 1777,1151.56 # 350 
line 0,1331 1777,1331 # 320 
line 1510.74,0 1485.45,1449 # 539 
line 0,1352.6 1777,1321.58 # 277 
line 1504,0 1504,1449 # 201 

我將從上面的列表中的第一行以黃色顯示圖像,以便您可以看到座標是如何工作的。

convert hough.png -stroke yellow -draw "line 177.944,0 102.005,1449" out.jpg 

enter image description here

現在,關於數學......這將是很難準確地測量失真的圖像,因爲它是......嗯,扭曲。我會考慮2個策略。或者取頂線並求出它與最左邊線的交點,然後在其他3個角中求相同的結果,然後可以計算出圖像的兩個對角線並估計失真並將其攤平在很多可能很好的方塊上。或者你可以解決所有線的交點,並應用某種類型的聚類來消除多重定義的角點......或者更簡單一些。

讓我們來看看剛剛在垂直線...

grep -v "line 0" lines.mvg 

line 177.944,0 102.005,1449 # 191 
line 171.848,0 121.248,1449 # 332 
line 504.586,0 479.293,1449 # 252 
line 842.637,0 817.345,1449 # 299 
line 1180.69,0 1155.4,1449 # 495 
line 1510.74,0 1485.45,1449 # 539 
line 1504,0 1504,1449 # 201 

前兩個是同一條線,讓我們平均177和171給174最後兩個也是相同的線,因此,如果我們平均1510和1504,我們得到1507所以,現在的柵格間距是

330px = 504-174 
338px = 842-504 
338px = 1180-842 
357px = 1507-1180 

所以,我要爲338px ... ISH :-)

+0

非常感謝,非常有幫助。我想我會遵循這些方針。也許計算所有的方塊,忽略異常值,然後選擇一個平均值。再次感謝! – user1803115

1

那麼我會嘗試是:

  1. 傳遞一個門檻,你會得到平方的更好的邊緣。
  2. 然後通過HoughLines algorithm
  3. 您將獲得行,請調整配置以獲得最佳性能以查看所有行。
  4. 計算每條線與另一條線交叉的點,並且您將擁有每條線的頂點。
  5. 使用一點數學! :)
+0

是的,我已經在做1-3,並且不知道剩下的最好是什麼。謝謝! – user1803115

+0

如果你得到它的工作接受它作爲答案。否則不:) :) –