影像處理-內插法取樣 |
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
在影像處理中,例如:縮放(zoom)、改變大小(Resize)、補償(compensation)
常常會參考原圖,做取樣(sampling)的動作,就以縮小為例。為了將原圖縮小,
一般做法會以n點(pixel)取一點的方式取樣,長寬是原來的1/n所得到的圖面
積剛好是原來的 (1/n x 1/n)=1/(n^2)。為整數平方分之一倍。 如果縮小倍率不是整數平方,而是2倍、3倍,則取樣的位置將不一定都是
整數位置,座標涵有小數值。一般都不會考慮這小數值,直接取其整數值座標
取樣,也就是(2.3, 3.6)四捨五入取整數值,取樣值就是座標(2,4)的像素。
在一張像素都很相近(smooth)的圖,這樣取樣的方式,所造成的失真並不會
很嚴重。如果在一張顏色變化大的圖中取樣,所造成的失真值將為數可觀。
因為(2.3,3.6)座標的像素實際顏色,並不一定就(2,4)顏色,(2,3),(3,3)或(3,4)
的顏色,如果選錯了,黑的變成白的,就會照成很大的失真。
在為了怕選錯的兩難之際,我們可以用bilinear方法,求得介於相鄰四點形
成的bilinear曲面公式,代入非整數座標的可得像素值。bilinear公式有很多
種。我就不列舉,因為用不到,原因是參數很難解,計算複雜度很高。所以我們
簡化為內插法,以近似bilinear公式。
內插法是利用相鄰四點的像素值,依照已知的非整數座標相鄰距離的遠近,根
據比例求得取樣值。也就是接近哪個點就像那個點。距離近的取樣比例大,距
離遠的取樣比例小。 內插公式如下:
clr(x,y) = (1-fx)*(1-fy)*clr1 + fx *(1-fy)*clr2 + (1-fx)* fy *clr3 + fx * fy *clr4非整數座標(x,y),顏色為clr(x,y),小數值為(fx,fy),整數值(Ix,Iy) 相鄰四點座標(Ix,Iy), (Ix+1,Iy), (Ix,Iy+1), (Ix+1,Iy+1) 顏色分別為 clr1 , clr2 , clr3 , clr4 可參考下圖 理論上,使用內插法求得縮放大小的圖片,相鄰像素之間會比直接取整數點更有連 續性,也就是更smooth。所以使用內插法取樣時,個人覺得除了取樣之外,同時也 做了低通濾波,處理後的圖片可再做一次銳化,使圖片更清晰。 附帶一提,當fx,fy固定在0.5時, 在mpeg壓縮中稱之為half-pixel, 使用half-pixel 運動估測所得到的PSNR可以提升大約[code]0.5 dB[\code], 相當可觀。只是相對的,處理速度變慢了一點。 下面連結是圖片縮放程式使用內插法,我是直接用RGB去做內插法,其實應該先轉 YUV處理之後,再轉回RGB比較適當。給大家參考指教。 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34732 發表人 - jerrykuo 於 2003/07/28 14:36:50 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |