當前位置: 狂熱小說 玄幻奇幻 重生學神有系統 第328章 小孔成像和PNP問題

《重生學神有系統》 第328章 小孔成像和PNP問題

要想利用「人工神經網路」理圖像識別問題,需要事先收集到大量的數據。

可是倉促之間,上哪去弄數據?

倒是可以給「戰神一號」拍一些「寫真」,來充當訓練集,反正所有的參賽機人,外形都差不多。

這樣做倒也不是不行,但時間太倉促了,數據的量級達不到要求,訓練效果應該不會太好。

而且,就算拼著一夜不睡,東拼西湊出一點訓練數據,也很可能來不及訓練了。

訓練「人工神經網路」,畢竟是一件比較消耗時間的事

而現在最大的問題,就是缺時間,明天就要正式上場了的說……

何況,「人工神經網路」的優勢在於通用和準確率,在特定問題上的識別速度,還真不見得能比得上心優化過的「笨辦法」。

所以江寒仔細思考了一番之後,還是決定採用「幾何形狀匹配」的思路來做圖像識別。

這種辦法的優點是識別速度比較快,更容易獲得高幀率。

編程的複雜度可能稍微高了一點,但這對江寒來說,並不是什麼太大的問題。

他先新建一個.CPP文件,以及對應的.h頭文件,然後創建一個新的類,用於容納自己的圖像識別演算法。

接下來就可以正式編碼了。

江寒一邊思考,一邊編寫代碼,靳雪雯在一邊安靜地看著。

兩人偶爾也流一兩句,討論一下編程思路、函數的功能之類的問題。

「江寒哥哥,這幾個語句是做什麼用的啊?」

「這個是圖像預理,按照自定義的閾值,將每個像素二值化……」

「那江寒哥哥,這個函數呢?我有點看不懂……」

「哦,這個膨脹理,可以讓圖像的廓更加明顯……」

……

二十多分鐘后,江寒搞定了圖像預理的相關代碼。

Advertisement

這部分要做的事很簡單,就是將攝像頭拍到的圖像,先灰度圖,然後二值化,只留下LED燈部分。

接下來,要在圖像中遍歷像素、尋找LED燈的廓。

這是整個演算法中計算量最大的部分。

好在江寒對圖片的預理,做得相當到位,將這一步所消耗的時間,基本上到了極限。

找到LED燈后,下面的事就簡單了,遍歷廓、提取LED燈,再匹配篩選、找到機廓,然後就可以鎖定目標攻擊了。

在做機廓分析時,江寒考慮了一下,使用了模板匹配技

這樣一來,就進一步減了運算量,節省了時間。

到了這裡,目標識別就基本完了。

接下來,就可以測算目標的方位和距離了。

這一步涉及到圖片坐標系與大地坐標系之間的換算,演算法複雜度相當高。

但江寒豈是欺的人呢?

只要捨得腦力全開,肯定是搞得定的。

然而,這樣又有一個新問題,可別不等完編碼,大腦的能量就消耗殆盡了。

那種空虛乏味的覺,可是相當難的……

所以江寒想了想,就笑瞇瞇地說:「小蚊子,可以拜託你一件事嗎?」

靳雪雯神一振,掌地說:「江寒哥哥,快說、快說,是什麼事?」

自己閑了這麼久,總算可以派上點兒用場了……

江寒微微一笑,說:「幫我打個電話給前臺,要點宵夜。」

「沒問題!」靳雪雯脆生生地答應了一聲。

然後拿出手機,喜滋滋地問:「江寒哥哥,你想吃什麼呀?」

「冰島紅極參,問問哪裡有,然後讓前臺幫忙訂做兩盤,送到大廳來。」

「好的。」靳雪雯立即撥號。

江寒想了想,又補充說:「口味隨便,紅燒、清蒸無所謂……哦,對了,讓他們把點餐的錢加到我賬單里。」

Advertisement

靳雪雯一擺手:「不用,你教我改程序,我還不知道怎麼謝呢!

再說咱們戰隊剛剛立,本隊長請吃個宵夜,也是應該的吧?」

江寒呵呵一笑:「小蚊子啊,你可能不太清楚,這種地方,一條紅極參只怕得7、8百塊。」

靳雪雯嘻嘻一笑:「沒事,讓爸爸買單就行了,他賺錢就是給我和媽媽花的嘛。」

江寒:「……」

有點無言以對的覺。

眼前這一隻,莫非就是傳說中的富蘿莉?

畢竟有句話說得好,十個蘿莉九個富,還有一個……

靳雪雯很快安排完宵夜,然後繼續看江寒編程。

江寒接下來就開始編寫目標測算模塊。

靳雪雯原本使用的辦法,是直接用像素坐標來計算旋轉角度。

這樣做倒也不是一定不行,但比較麻煩,而且效果也不會太好。

這是因為像素坐標差與角度之間,並不是線關係,必須據像素的坐標,隨時矯正換算比例,才能得到一個不很確的近似值。

江寒思考了一下,據「小孔像」的原理,設計了一個簡單而又巧妙的演算法,通過像素坐標算出了正確的轉角。

想要從圖像數據中得到理世界的坐標,需要先標定攝像頭,從而得到攝像頭的參。

這一步可以使用OpenCV中的標定工來做。

標定完攝像頭后,就能得到攝像頭的參矩陣和畸變參數。

據這兩組參數,對像素值的坐標進行矯正,然後就可以通過反三角函數,來計算出需要的角度了。

寫完演算法之後,江寒又設計了一個小實驗,對其進行了驗證。

實驗結果表明,這個演算法完全OK,準確率和速度都優於靳雪雯原來的演算法。

但這種演算法也有一個相當明顯的缺陷,由於缺失了深度信息,因此無法對坐標系進行變換作。

Advertisement

這樣一來,就只能得到相對於攝像頭中心的轉角……

那麼如何解決深度的問題,得到三維坐標呢?

江寒又設計了一種演算法,通過求解PNP問題,來得到敵我雙方在真實空間中的坐標偏移。

PNP問題,就是PerspectiveN-PointProblem。

江寒對這個演算法不是十分悉,只知道可以用來理空間定位問題。

所以,他先去網上找了幾篇文獻,仔細瀏覽,理解了原理之後,才開始編寫自己的代碼。

首先標定攝像頭,得到相機的參矩陣和畸變參數,然後測量的尺寸,得到在世界坐標系中的坐標。

接下來,從圖像中得到機的像素坐標,然後通過SolvePnP函數計算出平移向量,對坐標進行平移作。

最後再修正一下y軸和z軸的坐標,就可以通過反三角函數,計算出所需要的角度值了。

這種演算法可以得到在三維空間中的坐標,缺點是需要計算四個點,而第一種演算法,利用小孔像的原理,只需要計算一個點就夠了。

兩種辦法各有優缺點,可以分況,靈活運用。

當目標距離十分遙遠時,就用「小孔像法」計算角度;距離合適的時候,則不妨切換PNP法……

這樣一來,就能兼顧效率與準了。

破費!

最後還有一件事,那就是目標作預測。

這是一個相當困難的問題,但也是一個非常重要的問題。

預測做得好不好,直接決定了子彈的命中率。

如果不做預測,當敵方車輛不斷移時,瞄準點將總是滯後於敵機的實際位置。

這當然是不可接的。

所以必須做,而且還要儘可能地做到完!。

猜你喜歡

分享

複製如下連結,分享給好友、附近的人、Facebook的朋友吧!
複製鏈接

問題反饋

反饋類型
正在閱讀: