Line Scan的掃描機制
Line Scan的畫素是一維的結構,例如8K的Line Scan有8192個畫素,我們稱作Width = 8192,因為是一維的,它的Height = 1。
- 相機: 以此為例,Line Scan相機曝光一次只會輸出一條8192x1的資料,傳輸到影像卡上。當相機持續曝光,並且物體沿著上圖綠色箭頭方向保持移動時,持續將不同位置掃出來的8192x1的資料傳給影像卡。
- 影像卡: 在掃描前需要先設定出圖的條數(Height)是多少,例如6000條。當影像擷取動作開始的時候,相機傳過來的第一條線會填在影像的第一列、第二條線會填在影像的第二列,傻傻地堆疊一條一條的資料,依此類推,直到條數滿足出圖的Height為止(例如6000條),當滿足以後,會將一張8192x6000完整的2D圖像傳給使用者。然後,再接續判斷是否要做下一張影像的擷取動作。 簡單來說,相機控制的是Line,8192x1是Line;而影像卡控制的是Frame,8192x6000是Frame。
Line Scan光學解析度與移動速度的關係
假設現在有一台8K、pixel size 7µm的Line Scan,搭配2倍鏡頭,換算得到光學解析度,即影像中一個畫素相當於真實世界的3.5µm。此時,因為是Line Scan,橫方向的視野為 8192 x 0.0035 = 28.672mm,縱方向的視野為1 x 0.0035 = 0.0035mm (即3.5µm)。並且,我們叫相機用固定的掃描頻率進行曝光,例如 100 kHz (即100000 Hz)。
- 用內定、固定的頻率進行拍照的行為簡稱 Free Run
已知掃描的機制就是傻傻地堆疊一條一條的資料,為了保持影像畫素橫向及縱向維持1:1關係,也就是說需要都是3.5µm ,物體必須要以 3.5µm x 100kHz = 350 mm/s的速度移動,才能讓物體跟相機的掃描頻率同步。當我們做了錯誤示範,移動速度過快,例如以700 mm/s移動,你本來應該要每3.5µm拍到下一條線,但你卻隔了7µm才拍下一條線,相機跟影像卡還是傻傻的曝光傻傻的堆疊,將導致掃出來的影像會是上下壓扁的狀態(上圖中);反之,若移動速度過慢,你會一直在很接近的位置進行曝光、堆疊到很接近的位置的線條,將導致掃出來的影像會是上下拉長的狀態(上圖右)。
Line Trigger用來同步相機與外部載台的動態
因為掃描的機制就是傻傻地堆疊一條一條的資料,如果我們叫相機用Free Run模式,就會遇到物體的移動速度需要與相機固有的掃描頻率匹配的問題,若沒有匹配,就會出現影像壓扁或是拉長的情況。因此,需要引入Line Trigger的概念,用來同步相機與外部載台的動態關係。
通常Line Trigger的源頭會是移動載台或是輸送帶提供的編碼器(Encoder)或光學尺訊號,一般會由A+A-B+B-四條訊號線,隨著載台的移動會依序產生四種不同的波形狀態(A正B反、A正B正、A反B正、A反B反),每種相鄰狀態間的間隔稱作一個tick。我們將這四條訊號線接到影像卡上,經由影像卡的計數分析,影像卡會透過CXP電纜即時反饋觸發同步訊號給相機,此即為Line Trigger。
我們繼續前面那個案例,假設這個載台機構的編碼器的一個tick是0.583µm,我們想要讓相機每3.5µm拍攝一條線。我們需要將相機設定為觸發模式,並且讓影像卡每收到6個tick (6 x 0.583 = 3.5µm)轉換為一個line trigger給相機,那麼,無論載台是否有剛剛好按照350 mm/s速度移動,相機都會每3.5µm收到一個觸發、每3.5µm拍攝一條線。將相機設定為觸發模式的原因在於,相機的預設值是Free Run,它不會理會外部給的訊號,只會自己按照固定的頻率拍照,直到改為觸發模式才會理會外部的訊號來作動。
影像卡怎麼決定哪一條線開始算是一張 (Frame)?
已經知道當相機切換到Trigger Mode以後,並且將編碼器接到影像卡,影像卡藉由Line Trigger來同步相機與外部載台的動態關係,因此只要載台有在動、相機就會拍,只要載台不動、相機就不會拍。也因為只要載台有在動,就會一直產生Line Trigger,影像卡在預設的情境下,其實並不知道哪一個Line Trigger是第一條,此情境簡稱影像卡Free Run。在影像卡Free Run模式,只要使用者用程式語法或用軟體對影像卡下達開始擷取命令的當下,影像卡就會開始接收Line Trigger並觸發相機。
按照前面那個例子,理想情況你想要一張8192x6000的影像,而影像卡在某個時間點被下達了開始命令 (粗綠色箭頭處),集滿6000條線以後就會出第一張圖,然而,因為載台還在繼續移動,影像卡將再次集滿6000條線,所以繼續出第二張圖,依此類推。但是你會發現,除非你的載台會停在指定的位置等,否則你無法精準的控制起點命令的時間點剛好位於被掃物體的開頭處,所以常常會有影像特徵忽前忽後,或是被切掉頭、被切掉尾巴的情形。
解法一、Line Trigger + 外部觸發卡過濾編碼訊號
如何讓影像卡知道第一條線是誰、甚麼時候開始算?
第一種解決方案是採用 Line Trigger 加上一個外部的編碼解析裝置,例如編碼觸發卡,這是一種硬體裝置,用於引入編碼器訊號,透過預先設定的起點、終點的位置參數來過濾編碼器的值,決定是否要將編碼器訊號轉出來給影像卡。如上圖藍色的波形,影像卡可以提前下達取像開始命令,但是在還沒走到位置前不會收到Line Trigger,直到在位置範圍內才會持續收到Line Trigger,並完成6000條線且起始點位置精準的一張8192x6000影像。
解法二、Line Trigger + 外部觸發卡發送Frame Trigger
第二種解決方案是外接一種具有Position Compare Trigger功能的控制器或卡,只要搜尋該關鍵字就可以找到類似的產品,基本款產品通常能一次比較一個位置,能比較的位置愈多、比較速度愈快的產品愈高階。它需要引入編碼器訊號,透過預先設定的起點位置參數來判斷編碼器的值,會在編碼器抵達指定的位置的瞬間輸出一個脈波訊號給影像卡,如上圖藍色的波形。編碼器訊號要並聯給影像卡,但是直到收到Frame Trigger訊號的時候才會將編碼器訊號轉給Line Trigger。這種額外送一個起點訊號給影像卡,目的是用來告知影像卡這個Frame要開始了,我們簡稱做Frame Trigger。
解法三、Line Trigger + Sensor發送Frame Trigger
第三種解決方案跟第二種類似,也需要外部發送一個Frame Trigger給影像卡,但是Frame Trigger的訊號來自於外接的Sensor。當物體本身或是載台上特地安裝的遮斷機構通過Sensor被感應到的瞬間,Sensor會立即將訊號發送給影像卡當作取像起始點。這種用法通常用於較簡單的設計、起點精度不需要太高,或者連續式輸送帶的line scan系統。