雙三次演算法與雙線性插值相比,需要計算相鄰16個點的輸入畫素,即w方向座標分別為w - 1、w、w + 1、 w + 2;h方向座標分別為h - 1、h、 h + 1、h + 2。如何計算每個點對應的權重呢?opencv的計算方法是這樣的:
fx = (float)((dx+0.5)*scale_x - 0.5);
sx = cvfloor(fx);
fx -= sx;
bibubic(ii - fx); //ii值為-1/0/1/2
#define alpha -0.75
/* (a + 2)|x|^3 - (a + 3)|x|^2 + 1 for |x| <= 1
w(x) =
else if (val > 1 && val < 2)
return dst_val;
}
然後進行累加求和就可以了。
大致流程如下(細節與opencv不一樣,具體需要參考opencv的具體**)
float scale_h = (float)lsrcheight / ldstheight;
float scale_w = (float)lsrcwidth / ldstwidth;
for (dy = 0; dy < ldstheight; dy++)
tmp_val += psrcy[(h_idx + ii) * lsrcstridey + w_idx + jj] * bibubic(ii - h_weight) * bibubic(jj - w_weight);
}} tmp_val = max(0, tmp_val);
tmp_val = min(255, tmp_val);
pdsty[dy * ldststridey + dx] = (muint8)tmp_val;
}}
if(h_idx < 0) h_idx = 0;if(h_idx>lsrcheight-1)h_idx=lsrcheight - 1;即將邊緣的資料複製乙份參與計算,但是bibubic(ii - h_weight)中的ii必須還是-1,0, 1,2;對於w的處理和h的處理一樣; matlab 繪製雙三次插值函式曲線
想要的效果 程式設計時要用到分段函式曲線的繪製方法 分段條件 需要注意的是 函式表示式中的乘除和乘方都要加 因為一般的函式都是數在乘變數運算。然後想將座標軸變一下 新建乙個xyplot.m檔案 function xyplot x,y xyplot plot 2d axes through the o...
js 雙線性插值 雙三次插值法 實現
雙三次插值法 js實現 在網頁中利用canvas進行繪圖時,遇到乙個問題,原始的資料解析度很小,而要放大到整個網頁,所以需要把資料進行插值放大。學習了雙線性插值和三次內插法插值,兩種方式實現效果不同,都用js 實現了一下,下面給大家分享一下 雙線性插值即在x和y兩個方向上,對資料各進行一次線性插值。...
三次樣條插值
條件 1 輸入 x y f x 0 leq i leq n 2 要求擬合的曲線 s x 滿足 對於任意的 1 leq i leq n 1 在 x 處一階二階導數連續,s x 也連續,且 s x f x s x f x 求解過程 設 s m 對於區間 x x s x 是 x x 上的線性函式,所以設 ...