2012-02-12 21 views
0

我有一個圖像,諸如這樣的:計算用Java(圖像分析)形狀取向

enter image description here

和我需要計算的它的取向。在這種情況下,形狀指向屏幕的左上角。只要3或4次的計算平均在實際方向5度左右的範圍內(它會稍微移動),精度並不是非常重要。

任何人都可以指向一個算法來做到這一點?我不介意方向是以雙精度還是矢量方式返回。

+0

你總是知道形狀應該是什麼樣子?你知道旋轉中心在哪裏嗎?形狀總是一樣的大小? – 2012-02-12 13:00:22

+0

@PeterLang - 嚴重嗎?你必須鏈接圖像?我認爲這是一個成功的巨魔。 – Perception 2012-02-12 13:04:42

+0

沒有巨魔。這是一個T形,但我使用顏色閾值來恢復形狀。很明顯,使用這種方法邊緣不會很完美,所以它會返回一個像上面那樣的形狀。我們可以請嘗試並保持嚴肅? 旋轉的中心幾乎是形狀的質心,並且總是相同的大小(永遠不會超過百分之幾)。形狀應該是一樣的。唯一改變的時機是照明變化太快而相機難以應付,我們錯過了一些像素。上面的例子是一個「好」的例子。 – 2012-02-12 13:23:53

回答

0

最後的解決方案是使用一個Convex Hull Algorithm,它可以找到包含具有邊界的形狀所需的最少點數。

0

如果圖像始終爲T形,則可以簡單地得到最遠的一對像素,然後從 找到最遠的一對,這兩個對象(T的邊緣),找到哪一對距離另一對二,從那一條劃線到這兩條的中點。

您可以通過比較中線與底邊之間的距離,然後調整角度和偏移直到它實際上位於中間,從而找到T的底部,從而進一步細化它。

+0

但是,如果我發現那些距離它們最遠的那一對,它會再次發現它們自己?如果我們從搜索中排除這些點,那麼它只會發現它們旁邊的像素,因爲T不完美,所以它很可能是不對稱的。 – 2012-02-12 14:07:27

+0

這是我使用的方法,但當T由於光照而改變形狀時,確實會失敗。這超出了我原來的問題範圍,但是有什麼想法? – 2012-02-12 14:33:33

0

我猜想,確定性解決方案是不可能的,因爲需要圖像識別。我會將2D圖像投影到軸上,即獲取圖像的寬度和高度,並從這些值中獲取方向矢量,並將它們作爲組件。

+0

這聽起來正是我需要的,但我該如何「投射」它呢? – 2012-02-12 17:07:23

+0

你如何表現形象?通常它是在二維數組中。然後只需對每一行進行求和 - 您將得到一個總計列,並對每列進行求和 - 您將得到一個總計行。有這個行和列確定存在的範圍。取決於您對白色和彩色像素的價值。假設你有'x'範圍從'x1'到'x2','y'從'y1'到'y2'。那麼你的矢量是'{x2-x1,y2-y1}'。你也需要知道開始在哪裏,結束在哪裏。可能你可以通過「胖」部分的位置來確定這一點。 – 2012-02-12 18:06:25

0

首先,幾個假設的:

  1. 的中心和質心是「接近」
  2. 的T的下降杆比橫杆

第一較長,確定圖像的邊界矩形,並找出沿着這個矩形的圖像的點。對於沿着直線的點並且彼此之間有一定的距離(例如5個像素來選擇一個值),您只需要從該羣集中取1點。最後,你應該有3分,即三角形。三角形的最短邊應該是交叉條(從假設2開始),即找到彼此最接近的兩個點。垂直於穿過這兩點的直線的線就是你的定向線,即找到它與水平軸之間的角度。

0

我會嘗試morphological skeletonization來簡化圖像,然後通過一些簡單的算法來確定骨架較長的方向。

+0

這看起來太棒了。當然,我會有興趣嘗試。 – 2012-02-17 00:42:27