陸路

摘要

Land Lines 是一項實驗性功能,可讓您以手勢探索 Google 地球衛星影像。結合機器學習技術、資料最佳化和顯示卡效能,實驗就能在手機網路瀏覽器中有效率地執行,無需使用後端伺服器。這就是我們的開發流程,以及嘗試引導我們最終結果的各種方法。

https://g.co/LandLines

當 Data Arts 團隊跟我討論探索 Google 地球圖像資料集時,我非常興奮。這些圖像非常美我進行過多項初步實驗 瞭解圖片的相似性,以及各種篩選和整理方式

T 恤相似度版面配置
t-sne 相似度版面配置, High res 50 mb

我們小組不斷回到圖片中美觀且優勢中的線條。這些線索很容易發現 (高速公路、河流、山脈邊緣與土地) 等,我們設計了一些專案來探索這些線條。身為藝術家,我受到許多線條的啟發,便參考了 Cassandra C Jones 和閃電的合作案範例,後來我很開心能運用這個資料集。

線條偵測

其中一項初始挑戰就是如何偵測影像中的線條。最簡單的方式就是,取出一張追蹤記錄紙,然後把這些紙畫掉

我開發了舊版的搜尋,方法是在有當地專案的專案上繪製演算法,然後手動加上要搜尋的行。在藝術品上繪圖非常有趣,但從數十張圖片轉移至數千張圖片時,也會變得相當繁瑣。我想將尋找線路的程序自動化

我利用這些空拍圖片嘗試了 OpenCv 的Canny Edge 偵測演算法等傳統的線條偵測演算法,但發現它們產生了非常不連續的線段,或是門檻太放鬆時,還算是假造的線條。此外,產生良好結果的門檻因不同的圖片集不同而有所差異,因此我希望透過演算法,在不受監督的情況下找出一組穩定良好的線行。

我試用了多種線條偵測演算法,包括 gPb (PDF) 等近期的線條偵測演算法,雖然可產生令人驚豔的結果,但每個映像檔需要幾分鐘的執行時間。最後我決定了結構化森林邊緣偵測,這個演算法與 openCV 一併提供。

取得好的「線條圖片」後,還是無法實際取得線條及辨別線條,例如如何擷取這些光柵資料,並製作向量圖。尋找電腦視覺問題時,我經常會調查 imageJ。這是一種開放原始碼 Java 圖片處理環境,供科學家和研究人員使用的開放原始碼 Java 圖片處理環境,具有健全的外掛程式生態系統。我發現名為「脊椎偵測」的外掛程式,能擷取強度圖像,並轉換成一組線段。(另外請注意,Matlab 的邊緣偵測與標籤程式碼也很實用)。

含有偵測到線段的圖片
偵測到線段的圖片

無伺服器

我也想要瞭解,是否能執行幾乎無伺服器的資料視覺化應用程式,因為在用戶端進行難以比對和連線的艱鉅工作。我通常會使用 openFrameworks,這是一種可以編寫廣告素材程式碼的 c++ 架構,以及偶然的節點專案,我都沒有進行了許多伺服器端程式碼。我想知道是否可以進行所有用戶端計算,並且只使用伺服器提供 JSON 和圖片資料。

對繪圖應用程式而言,比對是非常繁重的作業。繪製線條時,我們必須在數萬個線段之間找到最相符的結果。為了計算某張繪圖之間的距離,我們會使用錢幣手勢辨識工具的指標本身涉及許多距離計算。過去,我曾使用過執行緒和其他秘訣,但在用戶端裝置上 (包括手機) 即時運作,因此需要更好的方法。我研究了指標樹狀圖,找出距離最近的/最鄰近的鄰居,然後我決定在觀測點樹狀結構 (JavaScript 實作)。基本上,觀測點樹狀結構是以一組資料和距離指標為基礎,當您填入新的資料後,就能迅速地列出最接近的值。第一次在手機上看到這個畫面 我會立即處於地板這個先進點樹狀結構實作的一大優點,就是您可以在運算完成後儲存樹狀結構,並節省運算這個樹狀結構的成本。

最接近的結果 繪製結果

要確保在沒有伺服器的情況下也能運作,另一個挑戰是將資料載入行動裝置至行動裝置我們的解決方案可逐步載入資料。在繪圖應用程式中,我們會將觀測點樹狀結構資料集分割為 5 個部分,當應用程式載入時,只會載入第一個區塊,每 10 秒會在背景中載入另一個資料區塊,因此應用程式本身品質會提升,使用的第一分鐘就更好。在拖曳應用程式中,他們也難以快取圖片,因此當您拖曳圖片時,新圖片會在背景中載入。

最後,我認為為兩個應用程式製作預載器並不容易,因此由於載入資料可解讀,造成初始延遲。我在 ajax 要求和 pixi.js 端使用進度回呼,而在 pixi.js 端,已實際載入並用於驅動預先載入訊息的檢查圖片。

連接的電話線

針對拖曳,我想從邊緣偵測中發現的線條畫出無限線。第一步是篩選線條偵測演算法中的線條,並找出另一條邊緣之一結束的長行。

適合連接紅色的線 適合連接紅色的線
適合連接紅色的線條

取得一組長線 (或使用更準確的「折線」,即一組連接點的組合) 後,我將這些線段轉換成一組角度的變化。一般而言,當你將折線想像成一組點時:一個點會連接到 c 點,而點 b。因此,您可以改為將線條視為一組角度變更:往前和旋轉部分大小,向前移動並旋轉一些量。想要在視覺呈現時,良好的視覺呈現方式就是考慮投射機器,這個方法會接上線,並確保其經過延伸執行旋轉。繪圖的形狀會轉動。

如果您考慮將線條視為角度改變,而非點,就更容易將線條合併成一長的較大線條,而不是拼接點,基本上就是加入相對的角度變更。如要新增線條,請將主要線條的目前角度加入圖片,然後加入所要新增線條的相對變更。

順帶一提,我曾運用這項技巧,將一行轉換成一系列特定角度的變革,以表示藝術利用。您可以像使用 curl 及 curl 的方式那樣製作繪圖「uncurl」。例如:

透過這個角度計算功能,我們可以在您拖曳時調整線條,我們會計算主要角度與所需位置之間的距離,並尋找有助於讓線條朝正確方向前進的照片。這些作品都是思考相對的思維。

最後要告訴大家,這是個非常有趣的專案參與。身為藝術家,我們很榮幸能要求演出者使用資料集 因為這些圖片值得我們紀念,而我也感謝 Data Arts 團隊與您聯絡。希望你喜歡這些有趣的實驗!