用Arduino打造RTI超精細微距攝影裝置

六月 2, 2017
Facebook
Twitter
圖片

RTIViewer軟體下的鸚鵡螺化石特寫。不同色彩代表表面上特定一點的特定方向。

本文將為你介紹如何使用Arduino微處理器和3D印表機,完成簡單的反射轉換成像(RTI)。
有時候光憑一張照片,很難充分記錄或呈現物體的重要細節,但只要透過RTI攝影技術,研究者就能夠強調物體的形貌、質地和色彩。RTI攝影系統有別於單向攝影,透過不同的打光角度,能呈現同一個物體或人工製品的系列影像,強調隱而未顯的細節。
對科學家和文物保存者來說,RTI技術是重要的工具,可以針對重要的歷史美術收藏品進行研究和保護。RTI系統也被應用於鑑識科學領域,以照片記錄分析子彈和彈痕。此外,RTI也適合拍攝和分析陶器的碎片,以及古代人類的小型工具和石雕藝品等。RTI的應用範圍無可限量,為許多領域的研究者提供關鍵的視覺證據。
動植物的化石也是RTI成像技術的理想拍攝對象,畢竟古化石大多有複雜的形狀、重複的圖案及特殊的表面質地,尤其是鸚鵡螺化石,屬於有稜紋的螺旋狀貝殼。鸚鵡螺是一種軟體動物,曾經在大海自由游動,跟恐龍生存的時期差不多。
PARTS
  • 打光罩,你可以直接用簡易的相機照明圓頂,也可以自己列印一個
  • LED(50), 如果你直接買現成的相機照明圓頂,那就買10mm的燈泡,如果你自己列印的話,就換成5mm燈泡
  • LED陣列,Adafruit 16×8 LED Matrix Driver Backpack(HT16K33 Breakout)
  • Arduino Uno
  • 磁簧開關

建構RTI系統

RTI屬於計算攝影學,會從不同位置的固定光源收集40~100張影像。只要軟體能推斷光源的位置,最終影像就能產生物體表面的數學3D圖。
軟體會從這些影像計算表面的法向量(normal vector),進而誇大表面特徵,呈現精細的細節。RTI技術仰賴從固定位置的不同光源拍攝數張影像成像。
本文會介紹幾種簡單的裝置,協助你自動收集參考影像。RTIViewer軟體是由圖像文化遺產(CHI)主持,經數位研究人員開發出來的軟體,鼓勵攝影師、研究者等相關人員認識這項技術。RTI影像的建立和瀏覽,是由文化遺產研究所的RTIBuilder軟體完成,最終得到的RTI檔案則須用RTIViewer軟體觀看。
 RTI影像組需要大約50個光源,平均分布於半圓打光罩上。
一個現成的半圓蓋就可以做成一個簡單的打光罩。為了阻絕室內光,我會將打光罩內部漆成黑色,由下而上,均勻地在每列鑽出4個洞,亦即每一行有12個洞,總數約50個洞。每個洞都要編號,以便鋪設電線。頂部的大圓洞專為攝影機而設,以Dremel Drill削鑽,可輕鬆移除多餘的塑膠部分,產生平滑的切面。
我採用10mm白色大LED,電壓為80mA,由微處理器的5V DC電源提供綽綽有餘。為了控制每顆LED,我採用Adafruit Industries的LED光陣列,可減少所需的控制線數量。
電路圖很簡單,但鋪設起來很耗時,大約要花12小時切割和焊接所有接觸面,這是因為鐵氟龍線難以剝線,會拖慢作業速度。未來的系統會再由適合製作電路原型的繞線工具組裝。
這個程式的概念也相對簡單,先打開一個燈,啟動相機快門,接著熄燈,其餘的燈則重複相同的步驟。LED亮燈的時間會直接用軟體設定。這個原型專為105mm微距鏡頭和Canon 5D Mark III DSLR機身打造,為了將影像維持在低ISO和合適的景深,打光必須設定為5秒鐘,整套影像會在4分鐘左右完成。
曝光值可針對拍攝對象進行調整,有需要的話可以調高一些。如果要收集大量的RTI影像,LED發光時間可以比曝光時間長一些。為了確保可重復性和曝光效率,LED發光時間最好涵蓋整個快門曝光過程。

電路圖

由於Arduino微處理器沒有50個輸出端,所以需要借助LED照明陣列來控制50個LED。微處理器會與LED陣列驅動板溝通,我在這個專題採用Adafruit 16×8 LED Matrix Driver Backpack(HT16K33 Breakout)來控制LED陣列。HT16K33 Breakout售價約為8美元,通訊協定為I2C,只用2個腳位,8個矩陣可能有高達8個可選擇的I2C位址,每個矩陣控制16×8的LED,無論是矩陣驅動器或微處理器,都可以在Adafruit Industries購買。
圖片

這塊板子專為Arduino Uno微處理器和LED陣列而設計。我將每顆LED的長電線集中到陣列控制器後,發現了一個更簡便的方法,也就是先在接地端集中每一排的LED,接著再回到陣列控制器,這可以簡化鋪設電線的工作,只是電路看起來會比較複雜。這組電線即是原型打光罩上的藍色電線。
攝影機是透過微處理器的12個腳位控制,當腳位達到5 Vdc,磁簧開關便會啟動攝影機。這裡使用磁簧開關是要避免微處理器電壓干擾到攝影機的開關,確保攝影機不會受暴露在危險的電壓範圍。磁簧開關很容易佈線,價格也不貴。我在此並未介紹攝影機觸發系統的電路圖,因為它們都不相同。

建立RTI檔案

最後獲得的影像組要轉為JPG影像格式,並透過RTIBuilder軟體運作。這套軟體可免費使用,也可以從文化遺產成像網站下載操作手冊的PDF檔。為了瀏覽最終的檔案,我們會用RTIViewer程式,這套程式也可在文化遺產成像網站免費下載使用。

3D打光罩

製作打光罩可能會面臨幾個問題。為了簡化整套流程讓更多研究者完成這項設計,我設計了一款可以用3D印表機製作的3D打光罩。大多數3D印表機的平臺面積有限,因此這個打光罩是專為微距攝影而設計。每個洞大約可放置5mm的LED,洞口直徑可視印表機的尺寸調整。這些洞可以被視為定位孔,再鑽成自訂的直徑。打光罩也有許多額外的洞,未來可以再裝上不同波長的LED。

RTI LED打光罩的程式碼

// long lead on LED goes in A0-A15 holes.
#include
#include “Adafruit_LEDBackpack.h”
#include “Adafruit_GFX.h”
Adafruit_8x16matrix matrix = Adafruit_8x16matrix();
#define BUSY_LED 13 // Board IO pin of Arduino ORANGE LED
#define CAMERA_CTL 12 // Board pin controlling the Camera Trigger
// active low.
#define LED_COUNT 50 // number of LEDs to sequence through
void setup() {
Serial.begin(9600);
Serial.println(“RTI multi-spectral camera”);
matrix.begin(0x70); // pass in the I2C address
matrix.clear(); // clear all lights
matrix.writeDisplay();
// set the digital pin as output:
pinMode(CAMERA_CTL, OUTPUT);
digitalWrite(CAMERA_CTL, HIGH); // active low
// set up Arduino LED as output
pinMode(BUSY_LED, OUTPUT);
digitalWrite(CAMERA_CTL, HIGH); // active low
}
/* array indexes – insert LED with long lead on A line.
15 A15 * * * * * * * *
14 A14 * * * * * * * *
. * * * * * * * *
. * * * * * * * *
. * * * * * * * *
1 A1 * * * * * * * *
0 A0 * * * * * * * *
Y= C7 C6 C5 C4 C3 C2 C1 C0
X= 0 1 2 3 4 5 6 7
*/
void loop() {
int x,y,count=0;
for(x=0;x<8;x++) // x’s are the C lines
for(y=0;y<11;y++) // y’s are the A lines { // toggle BUSY LED digitalWrite(BUSY_LED, HIGH); // ON // turn on one LED matrix.drawPixel(x, y, LED_ON); matrix.writeDisplay(); // write the changes we just made to the display delay(6000); // this delay determines the length the led is on // trigger the camera digitalWrite(CAMERA_CTL, LOW); // active low delay(50); digitalWrite(CAMERA_CTL, HIGH); // active low delay(50); // turn off the only LED on matrix.drawPixel(x, y, LED_OFF); matrix.writeDisplay(); // write the changes we just made to the display // delay while image stored on camera? delay(1000); // toggle BUSY LED digitalWrite(BUSY_LED, LOW); // OFF delay(100); // so we can see the OFF state // test for end of light count count++; if( count >= LED_COUNT) goto DONE;
}
DONE:
Serial.println(“Camera sequence complete”);
while(1); // infinite loop- stop here
}

結論

 RTI系統可以讓你輕鬆收集RTI影像,希望你會喜歡。我想感謝Andy Kinsman協助設計3D打光罩的檔案。
(譯:謝明珊)
原文
Social media & sharing icons powered by UltimatelySocial