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

2021年1月20日 星期三

技術筆記:口掃機原理與使用

3D重建技術發展已久,大量應用在工業(逆向工程),自駕車(LIDAR),及民生(蘋果人臉解鎖),而健康醫療方面則以口掃機為代表。

口掃機外型類似電動牙刷但體積更大,操作上是由牙醫師將前端探頭伸入患者口腔,依照固定順序對每顆牙齒每個表面進行掃描,資料由一旁主機處理後即成為3D模型,視狀況由人工修正後,就能當做校正、植牙等輔助資料。

檢視市面上常見機型使用技術,分為structure light和confocal兩種。Structure Light相關介紹(連結),它本身並不是尖端技術,困難在於如何小型化應用在口掃機中。所以一般初期都會由市售大型投影機開始。若要小型化可能有數種方案(連結)。

Confocal,開發時間為1983年,初始目的為改良螢光顯微鏡,希望提高光學解析度和視覺對比度,做法是使用PINHOLE過濾不同焦平面的光線,達到完美共軛焦,以及使用單波長光源也就是雷射光避免色散影響,組合這兩項即可取得μm等級焦平面資訊。(也因為pinhole進入光量少,需用更強雷射光補足影像)。

因為一次只能截取特定深度之影像,若要取得不同深度,就要升降顯微鏡平台或鏡片,從不同共軛焦平面(confocal plane)取得二維影像,再重組成三維影像。這也是共軛焦裝置讓人詬病的缺點,必須不斷機械性的移動焦平面,也造成機器容易損壞及維護成本。

confocal雖然普遍應用於顯微鏡(連結 DIY顯微鏡),但其精密特性在十多年前找到更適合它的戰場,口掃機,並且獲得超級的成功。著名廠商是3Shapes TRIOS 4,最近則有後起之秀Align iTero Element 5D。

另外,對於馬達的缺點,近來提出數種不同改進方式。主要是利用光的波長差異在介質中折射率不同,例如加入光輪或是使用連續波長雷射光等等。

其他採樣法

除以上兩種,另有數種方法,如主動波前採樣法active wavefront sampling。此法只需使用單一攝影機加上主動波前採樣法的模組,包含了一個離軸(off-axis)的光圈,以光軸為中心進行圓圈路徑的旋轉,於固定間隔時間截取影像,就會得到受測物亦為旋轉的影像。在此情況,受測物的距離可以旋轉半徑大小解讀,若旋轉半徑為零,表示直接成像於對焦平面;反之,若旋轉半徑越大,則物體離對焦平面越遠。因此,此法不需使用多個攝影機來取得受測物的三維立體影像。其特色在於只需單一光學路徑捕捉受測物之距離,亦可延伸運用於攝影機、三維內視鏡及顯微鏡。

以及雲紋干涉測量法accordion fringe interferometry,掃頻光源式光學同調斷層掃描術optical coherent tomography,只是市場反應不佳。但總之口掃機實在可說是小型物理和光電實驗室大集合。(連結)

Accuracy

上述各種方法目標都是取得該平面的POINT CLOUD,評斷口掃機精確度也就是評估位置的正確性。評估的標準可區分為Trueness (真實度) 及 Precision (精確度),不過這都只是單面的考量,技術文件上,會稱之為local的差異。

探究原因,除了技術水準原因外,口腔狀況也是原因,很大部份因素是口水反光造成,所以作業上,往往會需要噴粉。

ICP Registration

取得平面資料後,後續是透過演算法將前面各平面進行接合,也就是所謂ICP成為立體物件,(連結  關於ICP有個非常好的影片介紹 連結)。目前是採用open3d作法(連結)。雖然有演算法幫忙,但漫無目的接合是很困難的,而這就造成了所謂global的精密度差異。

目前大多是依照特殊順序和步驟,而各廠商也在軟體界面中加入許多巧思,例如透過照明光色通知使用者這一面已完成,或是在螢幕上將還需要追加掃描的區域顯示引導操作人員多次掃描等等。

Marketing

北美統計報告指出,約有1/5診所已有口掃機,而其產品價格也隨著競爭者增加而逐漸降價PK(連結)。產業角度來看,推廣與否也不再只是功能考量,還必須考慮與牙技師合作等資料共享資訊。上述資訊都是紙上談兵,希望日後有機會能操作實機,或和牙醫師或牙技師討論使用經驗。

2021年1月13日 星期三

五峰天際線,前段,上坪至鳥嘴山

五峰天際線是串連新竹縣五峰鄉內幾座高聳入天山頭的縱走路線。初次聽到這名號,是來自某野跑團影片(連結),之後,天際線這神秘如魔法般的字眼,就深深烙印心中,不時就跳出來催促著,去體驗那情景。

行程設計上,因為正在接觸越野跑,覺得或許有可能登山順便練習越野跑,所以不敢邀人同行(後來確定是想太多了)。既然是獨行,行前當然做足了功課,並下載完整GPX路徑才敢出發。

路線設計上,有鑑於越野方式都能當天完成,安全上應該無虞。若不以征服為目的,而是將其切分成數個段落,每次以十公里為限,應能順利完成。最後是規劃為四次完成。以下則是前兩次的隨筆紀錄。

第一日,距離7.5KM,山路5.5小時

0KM(8:08),車停上坪便利商店,依地圖找到起點廣惠宮。公廟旁有著醒目的"五峰天際線"標示板和解說牌,簡單瀏覽後就循著所指方向,循著柏油路面農路,慢慢向山中走去。路段筆直好走,且兩旁遍植人造林十分賞心悅目,就當作是熱身路線,路底是個小山窩,有池塘、土地公廟和農莊(木藝蘭園),為典型客家鄉居景致。

0.5KM(8:20),木藝蘭園附近就是登山口,事實上,整排的登山布條綁在那,想要忽略都很難。入山後坡度逐漸增加,隨路徑在雜林和竹林間交錯上升,接近山脊。

因為是獨行,不時會觀察軌跡變化,也會懷疑,怎麼行走方向不是向東,而是朝南呢?事實上,這困惑持續一整天。回家後仔細研究才發現,這是個地理上的謬誤,一般人聽到觀霧這種往山上走,腦海中自然就浮起是向東行。這是因為根深蒂固覺得中央山脈在東方,由平地往高山必定是往東。但五峰天際線,以及附近加里山系,大多是北南走向,部分段落甚至還是東北向西南走向。若嘗試在地圖上將竹東、上坪、清泉、觀霧劃成直線,也會發現如此。

1KM(8:34),剛上了山脊,猛然就見到五指山脈佇立前方,此時連第一座上坪山都還沒登上就突然在視野內見到這幾座山頭,總覺得很不切實際,實際上兩者高度差距有四百公尺,這角度差異總讓人心中有些忐忑不安。

1.5KM(8:58),抵達標高620m上坪山,無展望。然後是持續向下走,但下一座山頭五指山小指峰高約一千公尺,這路徑越往下,之後上升也就越多啊。

2KM(9:16),至此也開始習慣了這步道,因為沿線都無分支,似乎只要專注眼前道路,就能抵達終點,而且即使明知是走在山脊,但因四周無展望,走得異常專心。今日天氣晴朗,溫度適中,陽光灑下照射在林木間,甚至有幸福的感覺。

2.5KM(9:39)。抵達巨石眺望點,此處是整段行程中景觀視野最好的一處。隔著淺山區遠眺是平原,近看是山下農家,滿滿人造檳榔樹奇景。

10:13 3KM。砌石休息點。

用途不明的砌石

3.5KM(10:37)。這附近應是小指峰下低點,四周較為潮濕也因此有較豐富鳥類和蕨類林相。

4KM(11:13)。上到五指山小指峰,終於看到其他登山客。或許因為交通關係,一般登山健行者都不會走上坪到小指峰這段步道,我也因此享受了三個小時獨處時光。

4.5KM(11:34)。下降、上升,抵達五指山無名指峰,再繼續下降、上升,雖然沿途有秀麗竹林但遊客太多,無法悠閒拍照。

5KM(11:50)。抵達著名的五指山中指峰,海拔高度1062M,視野差,山頂上有數座大型轉播電塔,看地圖應是左側岔路運送上來。山頂附近地勢平緩,許多組登山客選擇在此午餐。


繼續前進,又是上下上下山路,右方的分岔雖然可快速下到登山口但陡峭不建議潮溼天候通行。繼續經過食指峰、午餐,抵達拇指峰。

6KM(12:39),拇指峰過後是道長長的階梯,然後就要開始留意往大隘山分岔,事實上兩山距離並不遠,但只要一離開五指山,就無人跡,空山寂靜,只有腳踩落葉的聲響,先前在上坪山附近只是覺得幸福,此刻則是滿滿的愉悅。

經過兩山之間低點逐漸靠近村落,甚至能聽到大隘村露營區傳來的人聲和汽車聲。

7KM(13:17),很快的到達大隘山頂,休息片刻後,步道又繼續向下直到達與鵝公髻山相交的隘口,此處左為大隘村,往下可通往五峰鄉公所,右側通往永茂山莊、南庄、五指山登山口。古來就是賽夏族大隘和向天湖兩分支的聯絡孔道,現在則是由公路貫穿。

步道在此脫離山徑,沿公路約一公里後才會到達下一座山登山口,今日行程也在此結束,接著是麻煩的回程路段。方案一是原路折返、方案二是經大隘山往西北方下山順遊五指山一線天返回,方案三也就是我預訂的徒步8~9KM至南清公路再左轉回上坪。

由大隘村望向東方壯麗山景

這段路會經過大隘村,也就是北賽夏族的基地,每隔2年的農曆10月15日前後舉行一次小祭,每10年則舉行一次大祭的五峰鄉賽夏族矮靈祭,記憶中來過數次,若能步行走過也是種樂趣。不過巧遇好心人以機車載了一程,約2:30回到山下結束今日行程。

第二日,距離9KM,山路6.5小時

6:44 抵達前次結束點,沿公路抵達鵝公髻山第一登山口(有很大的指示牌)。在此停留許久,想確定部落公車的通行狀況當作下次參考,但或許因為假日公車停駛。山路是往右後上方走去,應該是運材林道。沿途因濃霧無展望,閒來無事只能亂拍些小東西。

好像握著樹枝珊瑚
濃霧時特別適合拍蜘蛛網

9KM(7:22),腳下沿著林道慢慢走著,不時比對導航軌跡,應該要轉向上山了,前方卻只有拉繩不見山徑,這麼廣大一片區域,理應是荒草或灌木或人造林或什麼都好,但荒謬的全是倒下的樹木。是導航路線錯誤了嗎?無法質疑?現在想想也不知道當時是怎麼想的,或許是因為太相信前人導航路線,總之就這麼一步步慢慢踩上了這大片樹屍造成的原野。

踩在整片倒木上真是神奇經驗,而且越發覺得不該走上來,但由樹根往樹頂部走容易,回退卻很難。就這麼前前後後近一個小時才到達鵝公髻山東北峰,結束這段恐怖之旅。心想幾年內再也不會有人踏上這路程吧。

鵝公髻東北峰歷險

整片山頭成了這模樣(連結)

10.5KM(9:14),回到正規路徑好像絕處逢生,腳步都無限輕盈。沿途有來自第二登山口交會點,起點是第一登山口後1.2公里,左測鐵皮屋和藍色護欄處附近產業道路。

11KM(9:28),沿途有片蕨類小天地,是原生林和人工杉林之外,小巧的存在,自己很喜歡這個區域,未來或許會再從第二登山口帶大相機來細細取景。

11.5KM(9:51),抵達鵝公髻山頂(連結),附近觀景點能俯瞰整個南庄地區。

經過東北峰洗禮,再看這飄渺雲霧,特別有感

12KM(10:47),與北側相比,鵝公髻山南測路段拉繩更多且陡峭,但或許因為靠近山上人家,反而有更多登山客。

13KM(11:15),通往西南峰分岔。

13.5KM(11:27),至此左通往山上人家,右接五峰天際線。

路邊悠閒三人組。啊,這才是人生,走什麼天際線呢?

這段500公尺路段,是今天最美的路段。滿山靜謐,遠眺山間筆直杉木林矗立於大自然中,和煦的陽光映照其間,定要找機會帶家人來此一遊。

夢幻森林

11:14 14KM,巧遇兩位原住民獵人,白天採靈芝,晚上打獵,據他們說法,這附近已經有水鹿蹤跡。

不土炮的獵槍,帶著雷射瞄準器
或許就是隻飛鼠的命

14.5KM(12:04),經過寬廣山嶺,地面散佈倒木。

15KM(12:24),此處有營火痕跡,沿途林木越來越巨大可觀,還經過個拉繩的假山頭。

15.5KM(12:54),應是兩山之間相對低矮處,此處取左約四十分鐘可到木材運輸便道。樹幹上有可愛標誌,幾乎每篇遊記都會出現,當然不能免俗歐。

鵝公髻和鳥嘴塗鴉

16KM(13:12),走得有些無奈。

16.5KM(13:27),登鳥嘴山頂,無展望,可由右側下南庄,取左幾分鐘就到岔路口,由此離開步道至鳥嘴山露營區,再經過八角亭和運材道路,大約6公里後離開山地。此區全為竹東林區管轄,大致上都是下面景象。


走進去還出來的嗎?可是好想走進去

運材便道上瀟灑的機車

離開林道後是山上人家,此區也是所謂白蘭部落。泰雅語中叫做了舞燕,意思為鹿群很多的地方,以往是以種植高冷蔬菜及溫帶水果著名。現在則是滿滿滿滿的露營區。

再往前走是涼山部落,想搭便車但都沒機會,之後則是迴盪著蕭瑟氣氛的山谷,也終於能體會,為什麼賽夏族和泰雅族能夠在地圖上看起來這麼靠近之處,彼此卻相安無事的生活著。最後在5:10回到起點結束今天行程。

綜觀這兩日行程,沿途超過一半是知名山頭或小百岳,指標完善,且接近部落和露營區,安全性高,沿途也偶有登山客,安全無虞。是條只要下載地圖就能出發的優質路線。

雖然是抱著練習越野跑的初衷來此,但最終連半步都沒跑起來,不是偷懶歐,而是身處其中,聽著風聲如催眠師般低語,看著光影如波浪晃動,連漫步其中都覺得時光流逝太快,只能越走越慢,慢到有幾次,索性就這麼在步道上停下了腳步,好像不是太餓或想休息,而是單純靜靜聽著自己的呼吸,感受著大地無邊靜謐。啊,這一切好像在夢境,實在神奇。

後段內容:連結

2020年12月30日 星期三

技術筆記:因工作需要架個簡單網站,兼回想曾在網路公司時的青春

前兩天開會時提到,配合文管需要,得有個能上傳WORD,系統自動轉換為PDF(帶浮水印)後,就立刻啟動下載程序的網路服務。聽到網路程式,大家你看看我,我看看你,都是雙手一攤,誰要我們是竹科硬體系統廠呢?但若是在我年輕時任職的網路公司,這種要求只是塊小蛋糕屑屑。所謂術業有專攻,就是這個意思吧。

既然我總是最閒的人,就接了這差事。而原本打算簡單裝個node.js模組(連結 連結)快速搞定,卻因為機器是躲在防火牆和嚴密資安監控,根本無法"安裝"軟體,只能在現有Windows Apache帶著Tomcat的架構上想辦法。只是十多年沒碰伺服器程式,進行時處處碰壁,筆記重拾記憶的雜亂過程時,兼回想過往在網際網路產業工作時的青春。

自己從學生時期就是主修資訊管理,抱著對大規模資料處理的夢想與熱情,甫畢業就加入蕃薯藤網站,也是華人最早的入口網站,幾年後再到以知識檢索見長的宇匯科技。這段期間日日夜夜接觸所及都與網際網路息息相關,且不只是我或少數公司,環顧當時Openfind、奇摩、雅虎、PCHOME等各家公司,無論是工程師或管理階層,都相信只要憑藉著技術,就能建構起偉大服務,然後就能販售產品,取得流量,處處充滿著躍躍欲試的氛圍。

但事與願違,以我自己來說,離開宇匯後進入硬體代工廠後,就再也沒碰觸過任何伺服器,而前述曾經如日中天的企業,若不是轉型為電子商務,也都消弭於市場機制中。今日與大多數人緊綁在一起的服務,無論是臉書、IG、LINE、GOOGLE各種服務,都並非由上述台灣公司演化而來,而是全由國外企業建立。

我當然不是什麼社會觀察家,但只要有眼睛,應該都能發現,與三十年前網際網路推出時狀況相比,現今世界取得資訊的管道是更為集中了。以往標榜的分散式、分權化早已消失於無形。使用者益發向少數資訊平台靠攏。而且不幸的是,這股平台洪流隊伍中,幾乎沒有任何是出自於台灣"軟體"廠商之手。

這絕對不是本土廠商犯了什麼錯誤,而是大勢所趨,但對每個曾經投入網際網路初期發展的人來說,如今軟體廠商的邊緣化,真的是僅有唏噓可以形容。無獨有偶的是,前年開始的人工智慧浪潮,似乎是前述翻版。

扯遠了,回到我那小小的轉換功能。檢視Windows上WORD轉換成PDF的方案,首推C#,但在Apache環境下,似乎只能含淚使用JAVA,連帶還得使用骨灰等級的tomcat、JSP、Servlet就覺得有些無奈。

JSP / Servlet

Apache版本是骨董等級的2.2版,設定在conf/httpd.conf,未來XXX domain服務會自動轉往tomcat服務。

<VirtualHost *:80>ServerName XXX
    ProxyPass / http://XXX:8081/
    ProxyPassReverse / http://XXX:8081/
</VirtualHost>

而Tomcat是更為久遠的6.0版(原atlassian自帶版本過於混亂,也不敢改),安裝在tool\xxxportal\xxx6.0。依序調整port  conf/server.xml  <Connector port="8081"... (原本8080已被占用,改為8081),和bin\startup.bin,在開頭加入下面兩行。若command直接執行startup.bat。

set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_11
set CATALINA_HOME=C:\目前目錄\apache-tomcat-6.0.0

在webapp\ROOT\下簡單放入個JSP,以http://127.0.0.1:8081/DateJSP.jsp,確認執行無誤後,繼續加入servlet。

對習慣使用Django或ROR等WEB應用框架的人來說,JSP實在是又土又難用,若要用MVC還得另外引入Spring Framework,IDE雖然可用ECLIPSE(連結),但最新版ECLIPSE的JAVA都飛到11版了,版號差異太大,評估後決定靜下心研究如何以command模式編譯需要的java成為servlet。

先簡單製作MyServlet.java,貼入

class MyServlet {
    public static void main(String[] args) {
        System.out.println("Hello, World!"); 
    }
}
javac MyServlet.java  -> MyServlet.class -> java MyServlet (應該是省略jar部分)
改換成
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MyServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException 
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>Hello Readers</h1>");
        out.println("</body></html>");
    }
}
javac -classpath C:\tool\XXX\apache-tomcat-6.0.0\lib\servlet-api.jar MyServlet.java  (servlet需要的內容放在classpath中)
把MyServlet.class,放在.\webapps\ROOT\WEB-INF\classes 下,修改WEB-INF\web.xml(連結)
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
重新啟動tomcat  http://127.0.0.1:8081/hello  確認JSP與Servlet連結無誤。

繼續參考(連結)完成網頁上傳檔案服務。

javac -classpath C:\XXX\apache-tomcat-6.0.0\lib\servlet-api.jar;commons-fileupload-1.2.jar;commons-io-2.2.jar FileUploadServlet.java

編成的class放入C:\XXX...\webapps\ROOT\WEB-INF\classes\net\codejava\upload (後面這串是配合package而寫)  同時要把jar放在 C:\XXX...\webapps\ROOT\WEB-INF\lib 中,修改web.xml為

<servlet>
    <servlet-name>FileUploadServlet</servlet-name>
    <servlet-class>net.codejava.upload.FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>FileUploadServlet</servlet-name>
    <url-pattern>/uploadFile</url-pattern>
</servlet-mapping>
把相關JSP放好,連結 http://127.0.0.1:8081/upload.jsp 上傳檔案會在.\webapps\ROOT\upload,並顯示message.jsp。

至此已經大致完成,最後探討WORD轉換為PDF方案,先測試jofficeconvert(連結),以console編譯和執行方式為

1.javac -classpath jofficeconvert.jar WordToPDF.java (程式在此,會使用lib)
2.jar -cf WordToPDF.jar WordToPDF.class (將class編入jar檔案中)
3.java -cp jofficeconvert.jar;WordToPDF.jar WordToPDF 直接執行class中function

確認無誤後,嘗試將這組程式併入前段的上傳範例 javac -classpath C:\XXX\apache-tomcat-6.0.0\lib\servlet-api.jar;commons-fileupload-1.2.jar;commons-io-2.2.jar;jofficeconvert.jar FileUploadServlet.java  將新產生的class比照上傳範例更新,測試成功。最後是修改message.jsp,上傳完畢後,servlet啟動轉換程序,並且讓瀏覽器透過JSP繼續下載已經轉換完的PDF檔案。


SPRING Framework

工作持續演進,需要個簡易佈告欄功能。參考(連結),並且開始使用spring framework,ECLIPSE和MAVEN。tomcat是單獨安裝8.5。(eclipse內部安裝似乎有副作用)

ECLIPSE位置在/home/kayjean/eclipse/jee-2020-12/eclipse,啟動,選擇window -> preference -> server -> runtime environment ...  設定兩者可以結合。未來,系統會自動包裹進入/home/kayjean/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/tomcat1/WEB-INF/xxx 且由ECLIPSE直接 啟動該tomcat。

MAVEN

曾嘗試單獨安裝Spring和其他套件,遭遇太多困難,決定啟用MAVEN。在ECLIPSE中file->new->maven project->skip page 1 , page 2 wait 10 seconds , choose org.apache.maven.archetypes maven-archetype-webapp -> groupid(company name ex:com.altek.medical) artifact id(project name ex:portal)   至此,先測試right click project->run as->run on server -> choose server -> choose correct war set
http://localhost:8080/portal/  -> Hello World 測試成功.  (重複測試時發生error :
The superclass "javax.servlet.http.HttpServlet" was not found... 解決方式是property->project facets->runtimes-> enable server

pom file中加入下面內容
    <spring.version>4.2.0.RELEASE</spring.version>
    <jstl.version>1.2</jstl.version>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>

重新開始(clean),就會發現JSP編譯失敗。在java build path -> libraries -> add library -> server runtime -> choose tomcat 8.5,在order中選擇並且放到最上面,且enable。回到原始控制台,JSP正常,並且出現src/main/java可以加入我們的程式碼。

XML要另外加入xpath
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jaxen/jaxen -->
<dependency>
    <groupId>jaxen</groupId>
    <artifactId>jaxen</artifactId>
    <version>1.1.6</version>
</dependency>

Controller

Spring Framework最核心概念為MVC,程式上乃依靠bean在運作。所有瀏覽器傳送過來的URL,凡包含xxx.do,會由bean轉交給org.springframework.web.servlet.DispatcherServlet處理。DispatcherServlet規則是解析 /WEB-INF/appconfig-root.xml 的設定,如<context:component-scan base-package="com.altek.medical.board.dao.*"/> ,由目錄名稱,自動對應到需要的CLASS且開始執行。處理結果,可用下面幾種方式回傳使用者。

  • return xxx,xxx就會變成xxx.jsp
  • return "redirect:/jsps/user_login.jsp"
  • 呼叫另外controller
  • spring注射方式

JSP類會在JSP目錄中尋找配對檔案,將servlet資料與JSP頁面整合後輸出。

使用者帳密

Tomcat似乎能請瀏覽器將當時電腦的網域登錄名稱傳回伺服器(連結)。測試結果失敗,但若是要整合AD是有可能的(連結 連結 連結),取得名稱方式(連結 連結)。

2020年12月23日 星期三

手作烘焙趣

關於自製蛋糕,我可是有夢的。記得新婚不久時就心血來潮照著食譜試做海綿蛋糕,忙活了一陣,成品硬硬扁扁好像餅乾,被老婆譏笑是馬拉糕,悲憤之餘,就此再與蛋糕無緣,世界上也就少了一位烘培王啦(笑)。

時隔十數年,時間來到今年十月,因著老媽生日,突發奇想要重起爐灶完成那個小小心願。與以往不同,這時代各種蛋糕作法和教戰手冊隨手可得,家中也添購過電動打蛋機(以往失敗就是缺這個),且烘培原料行也近在咫尺(巧婦食品烘培),還增添了女兒這個小幫手。各種有利因素加持下,總算有了點成果,雖不中但也亦不遠矣。

動手做的過程中,從原料的採購、量秤,以及依步驟實現過程,無論是滿桌的瓶罐,或是用克為單位錙銖必較的心情,都讓人有回到高中時代化學實驗室的錯覺,直到成品出爐,就算是失敗品也覺得興奮,再經過逐步修正,更能滿足小小成就感。且就成果來說,相比於慢跑、爬山、看小說這些對居家生活沒什麼貢獻的活動,做蛋糕或許更能被老婆和女兒接受吧(笑)。

最近又要做蛋糕,發現事隔三個月先前記憶全部消失,趕緊翻出先前照片並筆記,若後續還有新作也能繼續累積。

海綿蛋糕

參考連結

常溫雞蛋3顆(全蛋) + 細砂糖60g 混合。

放在50度c的鍋子上方用隔水加熱的方式加熱。

下次要添購溫度計量測水溫

打蛋器以高速將蛋液打到起泡並且蓬鬆的程度,過程中,用手指不時試一下蛋液的溫度,若感覺到溫熱的程度就將鋼盆從沸水上移開,聽說這個原理是利用蒸氣加熱使得雞蛋表面張力變弱而容易起泡,所以溫度只要加溫到體溫的程度就好,太燙是會讓雞蛋凝結的。(高中化學是55度,蛋白質質變)。重複這個過程打了七分鐘,打到蛋糊蓬鬆拿起打蛋器滴落下來的蛋糊能夠有非常清楚的摺疊痕跡,也有人說是能寫完8。

低筋麵粉50g過篩(這過程有點麻煩,玉米粉10g缺)。分成三次以濾網低低過篩進蛋糊中,用刮刀混合均勻(這裡出現歧異,Carol說可以用打蛋器攪拌均勻,但又有人說這樣會造成消泡,盡量不要狂打 連結)。實作上,前兩個成品都太扁,所以最後一個在這階段混入了數克泡打粉,成品的確更高,也不確定真實原因。

無鹽奶油20g以微波融化(家中微波爐壞了改用隔水加熱),指示中提到香草精1/4茶匙(略過),從前面整鍋麵糊取出部分倒入奶油攪拌均勻,再倒回鍋中,繼續用打蛋器攪拌均勻(又是不確定部分)。


依序混入麵粉和奶油後

將蛋糊倒入已抹油且放好紙的特殊烤盤,其下方特殊設計能方便取出蛋糕本體。


放入已經預熱到170度C的烤箱中烘烤30-32分鐘至竹籤插入中心沒有沾粘即可(怪怪的,聽說到烤好前不能打開,這樣要如何插入竹籤)。

出爐後馬上倒扣在鐵網架上,指示是包覆擰乾的濕布放涼,我們則是蓋上濕的餐巾紙,放涼後撕去底部及邊緣烤焙紙(專業的會放入塑膠袋中休息一夜避免乾燥)。從照片可看到,到第三個成品時,已到可接受程度,而前面兩個既然都進了我肚子,當然也稱不上失敗歐。

由上至下,分別是第一次至第三次成品,體積明顯膨脹。

最後抹上奶油加了水果,成為老媽生日蛋糕,感謝家人抬愛,都吃得挺開心的。

動物鮮奶油打發

參考連結,買了兩盒動物性鮮奶油,每盒200g,加入細砂糖20g,就是開攪拌機狂打。第一次實驗失敗,就是所謂油水分離(這名詞很聳動),此為不可逆反應,雖說仍可用在義大利麵,仍是進了廚餘桶。

或許因為盛夏時節,造成油水分離

參考更多說明,必須在鋼盤下放置冰袋,且隨時保持低溫,終於打出如絲綢般的奶油。

所有照片都是隨便拍的,未來要補拍

未來計畫項目

巧克力(連結)

其他

夜市看到好吃甜點店(連結)

2020年12月21日 星期一

技術筆記:Micro CT 電腦斷層掃瞄系統


牙齒 Micro CT掃描成果

因工作需要,有機會於12月17日,在台達DELab 協助下(連結),利用其高端Micro CT電腦斷層掃瞄系統,掃描兩顆牙齒樣本。對工程師來說,接觸新科技總是讓人興奮不已,藉此機會紀錄CT相關概念及當天作業情形。

首先映入眼簾的是由貨櫃屋改建的行動實驗室,內有兩台最新型micro CT,桌上型μCT-100X,體積約一公尺見方箱型,以及立地形μCT-100,這台體積更大,為兩個圓筒套合在一起,造型與醫院CT神似,應該是為了後續更大型樣品預做準備。兩台掃描機體旁都另附有伺服器等級工作電腦以及台達開發的影像處理軟體進行影像處理。

靜態樣本掃描機,右測是24吋螢幕,可見得此機器之龐大
右方為活體掃描機,儼然有大型CT外型,左側為熱情的技術人員

專案經理曾敏原先生解釋,桌上型與立地形原理類似,桌上型μCT-100X是以拍攝四、五公分見方靜態物體為主;更大型的樣品或活體(如老鼠),則適合備有麻醉設備和幫浦以及更多影像處理系統的立地形μCT-100。以我們提供的牙齒樣本來說,體積不大且為靜態物體,適合以μCT-100X進行掃描。

CT最重要的兩個項目,一是X光源,另外則是顯影方式。以下面這個DIY專案為例(連結 連結),X光由右下方電壓轟擊靶材產生,電子束會以角度非常小的扇形射向圖中冷凍肉雞,依材質特性,電子束會被阻擋或穿透,穿透部分擊中後方螢光感測板(phosphor screen),轉換為可見光,最後由左下方普通相機拍得這些影像,再由軟體進行重建。


類似概念套用至μCT-100X,各個元件狀況如下,X光源在右方,經過圓形過濾鏡後,射向畫面中間牙齒樣本,畫面左側為螢光感測板,若樣本體積太大,可以調整物體位置。

別擔心,這片玻璃是含鉛玻璃,可阻擋X光。由圖中牙齒大小可看出整台機器之碩大。

因為光源類似扇形,所以只要調整樣本和感測器的位置,就能拍攝出不同放大倍率和解析度的影像。有經驗的技術人員會依照樣本體積不同,選擇合適位置,達到拍攝需求。

樣品下方支架為產品配件,保麗龍僅是配合牙齒臨時製作。

校正過程除了要計算物體距離,還要考量不同物體對X光的吸收和穿透程度,例如拍攝岩石和電路板和老鼠的設定自然不同,以往這些都要依靠技術人員經驗,現有軟體已經將其數位化,並且將各種物件的屬性以屬性方式存在系統中,方便使用者挑選,大大將低操作門檻。

畫面左方可看到數種預設物品可供挑選

開始進入拍攝階段,包含各種校正與處理時間,目前每張照片時間需七至十秒,結果如下。此為一個物件在同一平面的X光照片。

初步校正後,可看到2D影像

取得平面影像僅是第一步,若要產生立體模型,概念上只要固定光源和感測器模組,讓待測物進行360度自轉,過程中同時拍攝各個角度的影像,透過3D重建理論,無論是單純的填充和消去、傅立葉轉換,或是迭代法,就可將這些影像轉換為物體內部各座標點的密度訊息。

重建概念

即使我們對相關數學方程式不熟悉,憑直覺也能推論出,物體自轉角度越精細,重建的效果會越好。目前μCT-100X是使用高精密度馬達,以每隔0.5度拍攝一組影像的方式,組合720組影像成為微米等級資訊,全程約需2小時。比較特別的是,因為是臨時搭建的貨櫃屋,過程中為避免震動改變各個元件位置,還需時刻留意避免跑跳等較大動作。

重建的第一個動作是框選合適區域,前先選擇MASK區域,減少無謂空間浪費

為了確保重建的品質和速度,硬體方面,掃描機選用工業級主機(含92M超大記憶體和高級GPU顯卡),軟體方面,台達自行研發的軟體除了能完成立體重建,更能動態瀏覽包含表面、內部切片,以及打光模式下各種顯示功能。若要輸出檔案,也能選擇TIFF或DICOM(醫學影像專用格式,一顆牙齒的DICOM約為6G)。對一般使用者來說,即使沒有上述軟體,也有其他選項(連結),例如Mango。

牙齒樣本與掃描後成果比對

由不同角度和深度觀察立體物件

對從未使用過Micro CT使用者來說,這次體驗確實能讓人感受到微米等級影像的威力,不過數百萬的售價也的確讓人為之卻步,日後若還有掃描需求,會以委託服務為主,如中研院或成大小鼠中心。畢竟這類高端研究機構,才是台達的客群。

補充資訊:

一、Micro CT與傳統CT的差異,主要是解析度,傳統CT電子束直徑較大,會產生許多扇形進而造成彼此互相干擾,降低解低度,而Micro CT發出的電子束較為集中,所以解析度會相對應提升。(連結)

二、支援活體掃描的硬體機制,下圖是活體掃描機中軌道圖,設計上可放入下圖大型管,內置老鼠活體,全程有搭配的麻醉箱、麻醉注射器等等。與桌上型不同,活體掃描時,待測物不旋轉,而是光源和感測器旋轉,機構上,高端設備是採用電刷,台達目前是採用馬達帶動。



三、支援活體掃描的軟體機制,台達已開發出解決老鼠心跳產生的上下震盪,或是掃描較長樣本時,影像接合技術。


感謝台達公司提供機會