2011-09-16 169 views
1

首先,我甚至不確定我的問題是模式識別問題還是特徵識別問題。我不是圖像處理方面的專家,但否則這是我的問題。模式識別?

我正在製作一個應用程序,該程序必須識別一系列圖像中的閃電類型。我正在使用C++與OpenCV進行圖像處理。通過對圖像進行閾值處理,我可以獲得圖像的閃電部分。我下一步需要做的是找出雷擊是否向上分支如圖下面的鏈接

http://i.stack.imgur.com/OaWe1.png

還是其向下分支,如圖下面的鏈接

http://i.stack.imgur.com/6sYcd.png

這些是應用程序必須從一系列圖像中識別的分支的基本形狀。現在我的問題是,我不知道如何實現這個識別圖像分支方向的功能。我需要的只是朝着正確的方向前進,以便我可以採取什麼方法來實現這一目標。提前感謝你。

回答

1

因爲我使用了OpenCV,所以我只概述了我立即想到的方法。

  1. 查找所有線段。
  2. 對於每一條線段都會找到它的方向(它是向上還是向下?)。在決定哪個是開始和哪個是端點時,你可能必須很聰明,但我認爲它應該很容易。你可能會發現一些基於分支點的啓發式方法...
  3. 平均結果,以確定大多數細分是向下還是向上。
  4. 完成。

編輯:上點2 更新假設有線段的列表,其中每個片段是連續的線沒有分支。也就是說,你不能有一個Y形段,只有I形。

  1. 對於每個段,找到它的端點(p1,p2),其中pX =(x,y)。
  2. 對於x = [1,2]確定pX是否是分支點(與另一個線段共享的點)或實際端點。調用分支點pB和端點pE。
  3. 計算點之間的向量爲d = pE - pB。如果d的y值是正的,那麼你有一個向上指向的分支。如果需要,可以使用d來計算兩點之間的線的偏角,並將其用作測量值,而不僅僅是向上或向下的二元選項。

使用不同的形態操作,找到端點(和分支點!)應該非常容易。

+0

感謝指導kigurai。對於第2步,我將如何去尋找線段的方向? – user854576

+0

看我的編輯,看看它是否回答你的問題。 –

+0

再次感謝,但我如何進行形態學操作,你沒有任何好的鏈接呢? – user854576

1

我會用更直觀的方式去。

0)在看你的照片,我可以看到,在分支之間的銳角(角度< 90)可以與「向上」 /「向下」方向

1相關聯)爲'你可以先找到分支之間的所有銳角,看它們是否是1-180(取決於你,或者你可以將它改進爲0-180之間的任何值)

2)for the '下'的圖像,然後你可以找到所有的分支之間的銳角,看看他們是否是181-360。 (給你,或者你可以180-360之間提煉它可以將任何值)

HTH

+0

感謝您的指導,將回來告訴你我的進度 – user854576

0

你也應該考慮到有可能是閃電是水平(從雲到雲)。除非你確定知道這不會出現在你的數據集中。

如果是這樣,您可能想要使用kigurai答案中提到的偏角的閾值。

另一個更棘手的問題是,當您的照片集在白天有閃電照片時。曝光過度的圖像部分可能與閃電本身一樣明亮,然後您的初始閾值步驟會產生一些噪音。

1

一個易於實現的算法將獲得所有的分支點和終點(形態學)。現在,如果你刪除了分支點,假設你的圖像中沒有圓圈,你可以得到(拓撲)線 - 一端是端點,另一端是分支點。分割線段,然後放回分支點。現在您可以計算所有線段的分支點到終點矢量。帶(0,1)的點積將顯示給定的線段指向上或向下。

+0

感謝您的指導,但事情是新的OpenCV和我不知道如何做任何形態操作,你不知道任何好的教程的任何鏈接? – user854576