亞畫素與halcon
朋友發來兩個小專案,要求亞畫素精度。突然想問幾個問題:1、何為亞畫素?2、何為亞畫素精度?3、使用亞畫素測量,系統應注意什麼?
1、何謂亞畫素?
面陣攝像機的成像面以畫素為最小單位。例如某CMOS攝像晶片,其畫素間距為5.2微米。攝像機拍攝時,將物理世界中連續的影象進行了離散化處理。到成像面上每一個畫素點只代表其附近的顏色。至於“附近”到什麼程度?就很困難解釋。兩個畫素之間有5.2微米的距離,在巨集觀上可以看作是連在一起的。但是在微觀上,它們之間還有無限的更小的東西存在。這個更小的東西我們稱它為“亞畫素”。實際上“亞畫素”應該是存在的,只是硬體上沒有個細微的感測器把它檢測出來。於是軟體上把它近似地計算出來。為了最大限度利用影象資訊來提高解析度,有人提出了Sub-Pixel概念。意思是說,在兩個物理畫素之間還有畫素,稱之為Sub-Pixel,
如果原始影象是n行m列的,希望做k細分的Sub-Pixel,這樣就有新的行N和列M,有
N = k*n
M = k*m
原來相鄰4個畫素包含的區域現在變成了(k+1)*(k+1)的區域了;要填滿這個(k+1)*(k+1)的區域,從一個小正方形映照到一個大正方形。
2、何謂亞畫素精度?
亞畫素精度是指相鄰兩畫素之間細分情況。輸入值通常為二分之一,三分之一或四分之一。這意味著每個畫素將被分為更小的單元從而對這些更小的單元實施插值演算法。例如,如果選擇四分之一,就相當於每個畫素在橫向和縱向上都被當作四個畫素來計算。
由上圖可知,檢測結果為對“插值後圖像”處理的結果,由於影象解析度提高了一倍,故用於表示小圓直徑的畫素數量也增加了一倍,這就是一階亞畫素元技術。我們在每兩個畫素之間插值一個畫素,這樣本來是120萬畫素的影象,插值後的實際處理影象就是240萬畫素了,相當於把一個畫素拆分為1/2,同理依次有1/3拆分、1/4拆分等,一些優秀的演算法甚至可以達到1/100拆分,同時還能保證處理速度。亞畫素元技術相對於傳統方案,檢測精度是提升了1倍嗎?
3、3、使用亞畫素測量,系統應注意什麼?
在影象上,通過演算法對影象插值,是不存在任何問題的。然而,一個重大的誤差來源是,成像系統。
a、如果攝像機沒有進行幾何標定,以亞畫素準確度提取邊緣是無意義的。假設在整個視野內某鏡頭的畸變小於1%,這意味著對於一幅640x480圖象,邊緣偏移4畫素。
b、圖象透視失真造成的影響。任何時候如果在安裝攝像機時不能保證其垂直於被測物體,那麼都會引發透視失真。如果對攝像機進行了標定,確定了攝像機內方位引數以及被測物體所在平面的外方位引數,那麼通過此標定就能將圖象中得到的測量結果轉換成世界座標上的測量結果。
為了得到準確的亞畫素精度級的測量,首先攝像機和圖象採集裝置的灰度值響應應該是線形的。為了保證這個前提,應對攝像機進行輻射標定。此外,被選用的鏡頭其像差(如彗差和像散應該非常小)。還應該使用單色光以避免色差的影響。另外,攝像機的填充因子應該儘可能的大以避免“盲點”的影響。最後,應對相繼進行幾何標定以獲取有意義的測量結果。
Halcon實踐
1、亞畫素精度閾值分割
threshold_sub_pix(Image : Border : Threshold : )
2、亞畫素輪廓查詢
edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )
zero_crossing_sub_pix(Image : ZeroCrossings : : )