引入
近期看到2015年數學建模A題太陽影子定位中的第四問,需要根據附件中視頻里的直桿的太陽影子的變化確定拍攝地點。其實確定拍攝地點這個問題並不是十分困難,因為有前三問的鋪墊,我們已經得出了太陽影子長度和觀測地點的經緯度、時間、直桿高度四個參數之間的關系;所以我們只要知道了直桿太陽影子的長度就可以通過問題2中的優化模型求解出拍攝地點的經緯度了。但是本題難就難在,如何確定視頻中直桿的太陽影子的長度?
求解
首先想到的是:將視頻處理后,能否通過手動標示像素點來確定直桿的太陽影子的長度,因為可以手動標示的工具較多,如AE中的動態跟蹤、PS中的像素點提取、Matlab里的ginput。雖然可以有效的解決直桿的太陽影子長度的測量,但是筆者認為這種人工手動測量的方法的誤差較高,且逐個進行測量特別麻煩,且誤差可能不夠大。不符合筆者比較懶得性格,所以在這里給出自己的一種解法
1.視頻的逐分提取
這部分比較簡單。
2圖像的預處理
圖像二值化處理。
3.通過Hough變換
Hough變換是圖像處理中從圖像識別幾何形狀的方法。它利用點與線的對偶性,將原始圖像空間的給定曲線通過曲線表達形式變為Hough參數空間中的一個點。所以原始圖像給定曲線的檢測問題就轉化為在Hough參數空間的峰值問題,即檢測整體特性轉化為檢測局部特性[7]。
歐式空間中一條直線上的點在Hough參數空間中為一條正弦曲線;歐式空間中同一條直線上的多個點在Hough參數空間中為一個正弦曲線簇且曲線簇相交於一點,稱此點為峰值點。而Hough參數空間下的峰值點,則對應了歐式空間下的一條直線。
如圖所示,
直線l方程為:
在歐式空間中數據點的表示為(x,y),而在Hough參數空間內表示為(ρ,θ),P點即為Hough參數空間中的峰值點,它所表示的含義即為歐式空間的l直線。
下面給出Hough變換的算法:
(1)初始並網格化Hough參數空間
(2)對於歐氏空間中的每個(x,y)執行步驟3;
(3)for θ=-90° to 180°,執行ρ=xcosθ+ysinθ與H(ρ,θ)=H(ρ,θ)+1
(4)設立閾值,尋找參數空間的峰值點。參數空間每一個峰值點對應歐式空間中一條直線。
其中每一個網格顏色代表能量高低,顏色越亮表明能量越高,反之能量越低。能量越高的地方,即為所需求解的峰值點。得到峰值點后,通過編程反變換到原圖像的RGB值空間中,即可識別出峰值點所對應的直線;直桿影子圖像所檢測出的直線如圖所示:
已知直桿的高度\(h_真\)為2m,通過Hough變換得到了直桿的像素高度\(h_像\)為664.9218像素,同樣直桿影子長度\(L_真\)通過Hough變換得到的直桿影子像素長度\(L_像\)為一組像素數據,根據比例關系: