2021年2月3日 星期三

技術筆記:投射結構光 Structure Light

Structure Light做法如其名,在物體表面上投射出預先設計的圖面,,由於物體的立體表面曲面的變化,會使投射出去的圖案在被測物體上形成高低起伏的圖案,而在偵測器中形成一平移量。透過擷取畫面上線條(或點)的曲折狀況,利用簡易的三角幾何運算,就可以計算出曲面的起伏,也就是物體的立體深度。這並非新技術,早有類似產品如(連結),KINECT或IPHONE X的識別技術。

其中又因為光線形狀可再區分為陣列線,phase shift以及光斑技術(Projected speckle),網格。連結 。

各式結構光源(連結)

陣列線

是一組逐漸變細且持續垂直正反互換的線條,分析亮暗順序即能回推出該點的原座標位置,入門者會參考Brown大學專案(連結),但我實在駑鈍無法掌握,退而求其次找到更精簡範例(連結)如下。

Capture Images

conda選用3denv,建立structuredlight目錄,建立src目錄,python Capture.py 啟動視窗,輸入要儲存的目錄,例如aaa(必須在captures目錄下先建立aaa目錄,之後都會放在這邊)。接著視窗(已經被拉到投影機上)開始依序輪播四十多個pattern圖片(GrayImage依序產生),這些光線照射在物體上產生曲折紋路,同時會啟動webcam拍攝紋路畫面,存入../captures/下指定目錄。記得,要關燈。

Pattern

基本三角測量時,僅需要單條雷射光即能計算空間位移,若要取得全平面資料,直覺想法是,為何不能直接打出三十條雷射,直接計算這三十條曲線的位置呢?先前我也被這問題困擾很久,直到看到下圖說明。打出的光線分別是1~10號,但是相機接收到的分別是1 7 8 9 3 4,其中好幾個號碼消失或無法區分,這些都會導致錯誤的判斷。

我們無法直接追蹤三十條線的去處,所以得設計出一組編碼過程,類似二進位的方式,為平面上每個點定義出獨特編碼,結果就是亮暗亮暗亮亮暗的概念。

編碼規則,b(全黑) h0~9(垂直線條逐漸變細) ih0~9(黑白反轉垂直線條逐漸變細) iv0~9 v0~9 w(全白)。
self.num_bits = int(ceil(np.log2(max_dim)))
grayCodes = np.arange(max_dim, dtype=np.uint16)
grayCodes = (grayCodes >> 1) ^ grayCodes
grayCodes.byteswap(inplace=True)
self.grayCodes = np.unpackbits(grayCodes.view(dtype=np.uint8)).reshape((-1, 16))[:, 16-self.num_bits:]*255
H : self.imageOut[:] = self.grayCodes[:, i]
V : self.imageOut[:] = self.grayCodes[:self.height, i, None]
其他打光寫法(連結)

Decode

保留Makefile make clean, make,使用C語言是為了加速。DecodeGrayImages 逐個image cell計算,取得每個點的亮和暗資訊,產生五種檔案。iHigh=挑出6~9層各種模式中最亮的數值。iLow=挑出6~9層各種模式中最暗的數值。
b_inv = (float)pw[px] / (pw[px] + pb[px]);
out_DirectImage = Ld = (iHigh - iLow) * b_inv;
out_indirectImage = Lg = 2.0 * (iHigh - Ld) * b_inv;
out_InvalidImage H/V  out_DirectImage 小於15,Invalid直接成為255 並且阻擋後面 過程中若不合理也會直接打斷後面計算
out_GrayImage H/V 會紀錄各個level中,是否需要紀錄進去
out_BinImage H/V 由GrayImage得到最後這個點的位置,也就是每個pixel被"看到"的理論位置。

Camera Projector Calibration

產生圖紙python GenerateAurcoAndChaurco.py, python BoardInfo.py 兩個檔案中實際使用為charucoBoard.png。將板子放在投影機前,比照3D重建作法,拍攝一組結構光照片,並且繼續移動板子位置,拍攝更多組照片。

python CameraCalibration.py ,選用了白光就可以產生DetectedMarkers.png和DetectedCorners.png。影響all_charco_corners_camera和all_charco_ids_camera。

第二階段是取出out_InvalidImageV/H out_BinImageH/V ,利用GetSecondViewPoints.py 再確認,若通過測試,影響all_charco_corners_camera_2 all_real_points.append
 all_charco_corners_projector  all_charco_ids_projector。

計算所有的板子後,用所有參數,產生計算相機和投影機角度的參數 ../camera_calibration_out/calculated_cams_matrix_less_distortion.npz(沒用到) calculated_cams_matrix.npz,可用在後續轉換照片回立體空間之用。其他calibration範例(PYTHON 連結)。

Reproject

python Reproject.py,讀入前面Decode的結果Invalid H/V BinImage H/V ,取得物體理論位置,再透過相機和投影機的相對矩陣資料校正資料(npz),利用cv2.convertPointsToHomogeneous取得原始空間"實際"被偏移的位置Pts。

open3d儲存成ply(詳細bin),及downsample(詳細bin),並且讀入原始color檔案,成為新的filtered ply(詳細bin)。其他範例專案(連結)。

Phase Shift

相位移動則是形狀固定(正弦光束)但會隨時間平移的波形,雖然複雜但速度快,解析度也更高。對我來說這裡論實在艱澀,只能邊看程式邊猜測(沒辦法,小時候數學沒學好),參考專案(連結 c++)及論文(連結)。


Speckle

理論上,投出的點,說明(連結 連結 連結)。



Extract範例(連結)。居然還能應用在ML(連結)

Grid

連結

I have a dream .. Pacific Crest Trail

若說自己對未來幾年懷抱的夢想,無疑就是去走Pacific Crest Trail。每每想到那一天,能夠背著裝備慢慢在大山大水間前進,就會激動不已。Don't Stop Me Now(連結) 呵呵。

為此,我已涉獵雪兒小說(中英文版、電影和有聲書 連結   英文訪問連結)、不少Youtube頻道、兩本中文遊記( 步知道連結 最慢的速度 連結),並參加過幾場台灣完成者的分享會,相信在"知"這方面不論是質或量,都已遠遠超過夢想的程度。

具體計畫方面,排除時間因素(如女兒高中畢業自立、COVID-19結束)外,眼下三個主要障礙,一、留職停薪160天,二、找到同行者,三、加強語言能力。雖然不容易,卻也不至於艱難到無法解決。所以雖然將其稱為I have a dream,事實上三年後落實的可能性也是非常高的。而此處則是整理思緒和蒐集相關資訊的小天地。

動機

PCT是個耗時(160天)費力(4,286公里的高海拔行程)又花錢(扣除機會成本,花費就約有NT20萬)的活動。且探究其產出,既不會有生態的啟發(高海拔生態單純),更不可能探索出新的未竟之地(都走在固定步道),從經濟學角度來看完全沒有吸引力。為何還能吸引這麼多人持續投入呢?好奇心驅使我分析並歸納這些徒步者的動機(連結),但在這之前,可以先看一下這組數字資料。

PCTA統計 每年完成人數 (連結)

上圖是PCTA 2021年統計,每年完成Thru-Hike人數統計。從資訊中可發現三件事情。

1. 2010年之前,每年都未達百人。之後開始增加。
2. 2016年,也就是阿泰參加這年,應該是受惠於WILD電影推波助瀾,山徑上人潮爆增,書中甚至覺得還讓他們覺得得分心應付社交的程度。這裡要順帶一提,影響眾多徒步者的WILD這部片,當中山嶺鏡頭都是洛杉磯附近取景,與PCT豪無關係。
3. 此後數年,除2018年大雪未融,2020年COVID-19,人數都直線上升,甚至達千人之譜,與雪兒三十年前幾乎數天不見人影有著天壤之別。華人參與程度也越來越高。

若相信數字會說話,我們可以武斷的說,2016年後,PCT已經進入自我成長的階段,透過二級傳播的力量,未來的人數應該會越來越多。在2016年前,吸引的族群可能偏向。

一、生活混亂嘗試透過PCT歸零從新出發。最明顯代表就是雪兒,這類參加者因為沒有退路,合理推測完成的機會很高。徒步對他們的意義,比較像是接納各種可能,並且努力面對並解決,藉此得到回到社會繼續生活的氣力。

二、喜愛荒野健行,戶外運動者。台灣蘇蘇(連結),台灣PEDRO(連結),台灣阿泰呆呆。他們原本就有完整的處世和計畫能力,也因為需求明確,裝備良好,計畫周全,能時刻反省和調整進度,幾乎是只要上路就能看到他們抵達終點。

三、不服老想一路玩到掛的老人家。例如Youtuber Jack and Barb,可以觀察這影片(連結)第17分25秒的內容。手抄內容如下。而我審視自己動機應該也是如此。

Are you still watching this vedeo? Well you must be pretty determined to hike the Pacific Crest Trail. Back in 2010 I woke up one morning and turn to Barb and said you know I really wanted thru-hike the Pacific Crest Trail someday and she looked at me and said if not now then when. Well that got the wheels turning and on adventures on the trail turned out to be one of the most fantastic experience of our lives.

We met hikeers who will become lifelong friends and talk about physical conditions. Dream about hiking 30 mile a day and climbing 7,000 vertical feet.

You can do it. So if this is your dream as well. Pursue it / embrace it / live it. Perhaps one day we will see you on the trail.

這種天天就是吃飯、走路、睡覺,周而復始的程序,猛然感覺和坐牢或少女終末旅行(連結)。

掙扎著上山的努力已足以充實人們的心靈。人們必須想像薛西弗斯是快樂的。 -卡謬《薛西弗斯的神話》


如同前述,2016之後,更多想要建立自我意識的年輕人或所謂追求新經驗者,踏上PCT旅程。例如中國張諾雅(連結),香港王維寶(連結),台灣BUN(連結),台灣dont stop me now夫妻蜜月之旅(連結 連結 連結),或是Youtuber紐西蘭女孩Elina(連結),香港仁在野這對(連結)。個人也預測,這個族群的人數應該會逐年增加,成為大宗。

隨著人數增加,未來PCT應該會更偏向商業化或年輕化。或許因此排擠了以往孤寂的史詩想像,但對我這種老摳摳來說,人多表示安全性就高,是較有利的。

行程準備和規劃

根據2016年阿泰和王維寶兩人敘述,至少得用半年時間進行相關準備,當然我還沒有正式啟動計畫,但方向可能如下述。詳細資料可再參考步知道書後詳盡紙本資訊,其他隨手蒐集資訊包括,連結(2019邊走邊說,可以學英文)  連結(2015長達30分鐘類似紀錄片) 影片 YOUTUBE

一、雪地訓練課程。對台灣人來說尤其需要。

二、背包裝備。

三、導航和地圖(連結)等資料,最著名是Guthook's App(連結),以現有南加州初段資料(全程資訊約$900),會發現其內容相當完整。更因為使用者眾,資訊更新頻繁,可參考性非常高。

四、時間軸資訊。蘇蘇文字(連結),備份在本文最後。

獨行或團體行動

動機會決定許多事,不同的動機在事前計畫、實際執行上自然也會有所不同。初步看來,似乎初期會群體走,中段會分開,後期又回到群體行動狀況。而且即使是群體行動,彼此間也會保持很長距離。

對我來說,這部分沒有選擇空間,限於安全顧慮,至少前段旅程是要結伴,但如何尋覓到可能人選呢?或許現在就要開始接觸社群,或透過完成者的引介,找到潛在同行者。

語言能力及如何適應徒步文化

漫長徒步旅程中,除體能外,為了安全、補給、社交都要大量使用英語。阿泰和王維寶的英語能力都非常好,但文中還是能感覺到語言形成的隔閡。對我來說,日後得認真捕強英語能力並且多多實戰演練。

補給方式

補給是行程中非常重要的一環,對於寄送的頻率(每周還是每月)或是究竟是如何進行,都有很多疑惑。但偶然參考這篇介紹後(連結),有些豁然開朗。未來可能循此方式,僅在幾個最重要的部分請顧小妹幫忙,其他段落則見機行事。

對自然的看法

這裡尤其推薦阿泰的文章,他文筆流暢(目前正在看折返),閱讀其文字完全能感受自然景色,尤其是輔以國家公園經典著述,兩相印證,完全能勾起人對PCT的渴望。王維寶則不然,書中僅有JMT段落有些感動,較缺少與自然相關描述。

所謂Thru-Hike

或許兩位作者都是因為遠道而來,抱著破釜沉舟的決心而不輕言放棄。相對來說,美國當地人少了這種壓力,較容易在加州之後就中斷行程。

房門上了PCT地圖

體能訓練

這部份是我最不擔心的,主要是Jack和呆呆和紐西蘭Elina可完成,某種程度代表意志力可能更是決定因素。短期內就是持續慢跑、攀爬中級山和越野跑,或是參加台灣的高山縱走。



---以下節錄自蘇蘇文字,僅為備份使用---

#第一關

長程徒步許可證(PCT Long-Distance Hiking Permit)

許可證系統一般開放二個時段,第一階段是11月35名,在第二階段隔年1月或2月開啟,原則上是免費的,但建議有20美元的捐款我當然是捐阿~~到人家地盤繳點保護費是應該的,成為PCTA會員(可以收到 Communicator雜誌和PCT的國家公園式地圖)。

許可證 列印並隨身攜帶,便於護林人檢查,電子版的許可證是不行的。

從2015年開始,南加州的國境線開始對PCT徒步者的數量進行限制,每天上限50人。 

第一階段:約2017年11月

PCT官網https://www.pcta.org/  

因為美國和台灣時差關係(-13小時),有打算前往PCT的要注意第一階段開放時間,晚上大約半夜1點準時上線預定你的行程,內容要先確認

1:出發日期和結束日期 

2:起點Mexican border near Campo 和終點Canadian border 

3:個人資料和住家地址(郵政號碼很重要)

4:要不要去惠特尼峰(當下要決定)

費用:捐贈和郵寄手續費USD60元惠特尼峰允許USD21元 刷卡扣款

第二階段:2018年1月

PCT官網https://www.pcta.org/  

可更改日期,最後確認,此次申請時間過後即確認名額,幾天後就發出長程步道核准函。收到此函後可以進入下一步驟:申請美簽了

(小編蘇蘇,我當時因為機票優惠先買機票,但是是錯的,因為美簽不會因為你已購賣機票而通融你過,一切還是以美簽通過後再購買機票和添購裝備為佳。)

#第二關

美國簽證 

簽證類型:B1/B2簽證 

辦理方法: 美國駐台灣使領館辦理:台北信義路三段134巷7號領事組一樓(106) 

簽證停留時間:長6個月 

簽證費用: 4800元劃撥費用

1. 填寫DS-160申請表格。http://www.ustraveldocs.com/tw_zh/index.html?firstTime=No 進入申請

2.線上註冊並完成郵局或線上支付(支付簽證申請費用4800元),通過支付收據編號預約面談日期及時間。

3.按照預約時間前往美國使領館面簽,需出示面談預約信。

※ 有效期六個月以上的護照

※ 六個月以內拍攝的51mmx51mm照片。 

※根據個人情況遞交當前收入證明、納稅單、房產證或在職證明、資產證明。 

※行程表和/或其他有關旅行計畫的說明。

※在職人員 請攜帶單位開具的就職證明以及近三個月的工資單。  

就是證明你只是去走走就一定會回來的有效文件,強調愛台灣!!

#第三關

加拿大入境證Canada Entry Permit)

https://www.pcta.org/....../permits/canada-pct-entry-permit/

要記得是這份文件KEY完要列印出來,無法存檔(有點小機車),然後所有文件要變成PDF檔後,一併MAIL至PacificCrestTrail@cbsa-asfc.gc.ca信箱,大約7-10天會回覆是否完成。

附上文件有護照,美簽,駕照(我用國際駕照),PCT長程步道核准函,入境加拿大申請函(要列印簽名喔)

PCT北端終點是第78號紀念碑,位於美國和加拿大國境線上。紀念 碑的周圍荒無人煙,想要回到“人類社會”有兩個選擇:一個是向南 折返,至Harts Pass或是Rainy Pass,從公路搭車回到附近的城 鎮,再尋求其他方式到達西雅圖;另一個選擇是繼續向北,徒步9英里進入加拿大的曼寧省裡公園(Manning Provincial Park),搭乘大巴車至溫哥華,再使用合適的交通工具返回美國。如果選擇後一種方式進入加拿大,所有的徒步者都需要申請加拿大入境許可證: cdn.pcta.org/wp-content 這個許可證是專門為PCT徒步者設計的,批准需要一定的時間,務必在出發前進行申請。

#第四關

加州營火證(California Fire Permit) www.preventwildfireca.org/ Campfire-Permit

PCTA強烈建議所有徒步者都取得營火證,列印並隨身攜帶。徒步者必須持有營火證才能使用爐頭、酒精爐、營地篝火等任何形式的火。在大多數年份,加州的絕大多數區域禁止使用營地篝火和酒精爐等開放式、不可控營火。