一、雙線性插值概述
雙線性插值作為OpenCV中默認(rèn)使用的圖像縮放算法,其效果和速度都是不錯的。并且效果也比較穩(wěn)定,計算復(fù)雜度并不算太高。我看了很多網(wǎng)上的算法,自己也沒看太懂,下面是從網(wǎng)上找的雙線性插值 算法的講解。
“圖像的雙線性插值放大算法中,目標(biāo)圖像中新創(chuàng)造的象素值,是由源圖像位置在它附近的2*2區(qū)域4個鄰近象素的值通過加權(quán)平均計算得出的。雙線性內(nèi)插值算法放大后的圖像質(zhì)量較高,不會出現(xiàn)像素值不連續(xù)的的情況。然而此算法具有低通濾波器的性質(zhì),使高頻分量受損,所以可能會使圖像輪廓在一定程度上變得模糊?!?/p>
二、雙線性插值與最近鄰插值對比
雙線性插值算法和最近鄰插值算法比較類似。在最近鄰插值算法中,目標(biāo)圖像中的某個點(x,y)是去源圖像中找最鄰近的一個點(x0, y0)即可。目標(biāo)圖像中的點(x, y)對應(yīng)于源圖像中的點(x0',y0'),x0'、y0'很可能不是整數(shù),而是小數(shù),而最近鄰插值算法是找其鄰近整型值(int(x0'+0.5f),int(y0'+0.5f))(四舍五入處理)。
在雙線性插值中,我們現(xiàn)在找x0', y0'所在位置旁邊的四個點,再根據(jù)這四個點與(x0',y0')距離的關(guān)系得到權(quán)重值,最后計算出目標(biāo)圖像中(x,y)一點的像素值。
三、雙線性插值算法實現(xiàn)
算法描述如下:
(1)計算源圖像與目標(biāo)圖像寬與高的比例
w0 : 表示源圖像的寬度
h0 : 表示源圖像的高度
w1 : 表示目標(biāo)圖像的寬度
h1 : 表示目標(biāo)圖像的高度
float fw = float(w0-1)/(w1-1); //在FPGA實現(xiàn)中一般會進(jìn)行四舍五入取整操作
float fh = float(h0-1)/(h1-1);
(2)針對目標(biāo)圖像的一個點(x, y),計算在源圖像中的對應(yīng)坐標(biāo),結(jié)果為浮點數(shù)。
float x0 = x * fw;
float y0 = y * fh;
int x1 = int(x0); //取整處理
int x2 = x1 + 1;
int y1 = int(y0);
int y2 = y1+1;
所求的源圖像中的四個點坐標(biāo)為(x1, y1) (x1, y2) (x2, y1) (x2,y2)
(3)求周圍四個點所占的權(quán)重比值
如上圖,
fx1 = x0 - x1;
fx2 = 1.0f - fx1;
fy1 = y0 - y1;
fy2 = 1.0f - fy1;
float s1 = fx1*fy1;
float s2 = fx2*fy1;
float s3 = fx2*fy2;
float s4 = fx1*fy2;
我們以value(坐標(biāo))來代表取得此點的坐標(biāo)值,則:
value(x0,y0) = value(x2,y2)*s1+value(x1,y2)*s2+value(x1,y1)*s3+value(x2,y1)*s4;
如果 對上述運算不夠明白 的話,可以這樣來求。
我們先要求得(x0, y1) 和(x0,y2)的像素值。
則float value(x0,y1) = value(x1,y1)*fx2 + value(x2,y1)*fx1;
float value(x0,y2) = value(x1,y2)*fx2 + value(x2,y2)*fx1;
注釋:離某點越近,離權(quán)重越大,故取其與1的差值。
float value(x0,y0) = value(x0,y1)*fy2 + value(x0,y2)*fy1;
驗證后與上邊公式一樣。
(4)求得值后填充到目標(biāo)圖像上就可以了。
我的理解:算法概念理解相對容易,但是如何在FPGA上實現(xiàn)卻需要考慮一些問題,在此提出大體構(gòu)架,日后再具體實現(xiàn)
1、算法中的浮點數(shù)運算,能否簡單的用四舍五入取整處理代替?
2、輸入的數(shù)據(jù)可以先緩存到兩塊RAM內(nèi),RAM0和RAM1進(jìn)行乒乓操作,
當(dāng)RAM0緩存滿一行數(shù)據(jù)時,算法模塊可以讀取RAM0數(shù)據(jù)進(jìn)行操作,
同時,RAM1緩存第二行數(shù)據(jù)。
3、在操作過程中,單獨的一行一行處理只能實現(xiàn)線性插值,也就是輸出數(shù)據(jù)只跟一行輸入數(shù)據(jù)有關(guān),如何實現(xiàn)4個臨近像素相關(guān)?
4、基于問題3,現(xiàn)有參考代碼是先進(jìn)行垂直插值再進(jìn)行水平插值,垂直插值輸出像素值和垂直插值權(quán)重,再將其作為輸入,進(jìn)行水平
線性插值運算,最終得到目標(biāo)點像素值。
5、插值后的數(shù)據(jù)就可以進(jìn)行后續(xù)操作最終輸出到HDMI
審核編輯 :李倩
-
FPGA
+關(guān)注
關(guān)注
1650文章
22207瀏覽量
626864 -
算法
+關(guān)注
關(guān)注
23文章
4739瀏覽量
96724 -
雙線性
+關(guān)注
關(guān)注
0文章
7瀏覽量
7072
原文標(biāo)題:雙線性插值算法公式分析及FPGA實現(xiàn)初步構(gòu)架
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
ST NPI 專區(qū) | 雙通道汽車線性電壓調(diào)節(jié)器:L99VR02XP-TR 性能卓越,助力汽車電子創(chuàng)新

LOTO電流探頭線性度測量

LP87322E-Q1 適用于DDR3L的TDA3x處理器的汽車雙2-A降壓轉(zhuǎn)換器和雙線性穩(wěn)壓器數(shù)據(jù)手冊

LP87332D 工業(yè)雙3-A降壓轉(zhuǎn)換器和AM570x的雙線性穩(wěn)壓器數(shù)據(jù)手冊

LP8733-Q1系列 汽車雙3-A降壓轉(zhuǎn)換器和雙線性穩(wěn)壓器數(shù)據(jù)手冊

基于事件相機的統(tǒng)一幀插值與自適應(yīng)去模糊框架(REFID)

ZMC600E運動控制器直線和圓弧插補算法詳解

請問DAC39J84內(nèi)部插值方式是插值0嗎?
vps日本雙線cn2真實測評
Teledyne Lecroy示波器插值算法
DAC3482在字輸入模式下,F(xiàn)IFO的輸出時鐘速率為什么是DACCLK/2/插值因子?
基于RK3568國產(chǎn)處理器教學(xué)實驗箱操作案例分享:一元線性回歸實驗
單線圈與雙線圈電機的區(qū)別及應(yīng)用解析

sma插板公頭插針的裝配方法

評論