雙線性插值插值演算法
1. 雙線性插值法 四個點怎麼確定
雙線性插值是二維的插值,先把一維的弄懂了會比較好理解二維的;
首先是插值,因為要存儲所有的點和點上的值所佔的空間比較大,所以就先存一部分點,想用的時候就用這部分點插值得到其他所有的點。
那要存儲的這些點是怎麼得來的呢,就好比你說的四個點,就是我們要存的網格點(一般通過對已知的坐標區域畫網格的方法得到,落在網格四個角上的點就是我們要存的點,其他的點就不存了 以後通過公式插出來,網格的大小自己頂,比如說原來的坐標點是12*12的矩陣,將這個矩陣均勻的畫成4行4列,就行了了3*3的16個小網格),P點就是要在這四個點組成的長方形內,或者邊上的點,
2. 線性插值法計算公式是什麼
舉個例子,已知x=1時y=3,x=3時y=9,那麼x=2時用線性插值得到y就是3和9的算術平均數6。寫成公式就是:Y=Y1+(Y2-Y1)×(X-X1)/(X2-X1)。
線性插值法:
線性插值是數學、計算機圖形學等領域廣泛使用的一種簡單插值方法。
內插法又稱插值法。根據未知函數f(x)在某區間內若干點的函數值,作出在該若干點的函數值與f(x)值相等的特定函數來近似原函數f(x),進而可用此特定函數算出該區間內其他各點的原函數f(x)的近似值,這種方法,稱為內插法。按特定函數的性質分,有線性內插、非線性內插等;按引數(自變數)個數分,有單內插、雙內插和三內插等。
線性插值法的應用:
線性插值經常用於補充表格中的間隔部分。假設一個表格列出了一個國家 1970年、1980年、1990年以及 2000年的人口,那麼如果需要估計 1994年的人口的話,線性插值就是一種簡便的方法。
兩值之間的線性插值基本運算在計算機圖形學中的應用非常普遍,以至於在計算機圖形學領域的行話中人們將它稱為lerp。所有當今計算機圖形處理器的硬體中都集成了線性插值運算,並且經常用來組成更為復雜的運算:例如,可以通過三步線性插值完成一次雙線性插值運算。由於這種運算成本較低,所以對於沒有足夠數量條目的光滑函數來說,它是實現精確快速查找表的一種非常好的方法。
3. 對圖像進行雙線性插值演算法後,圖像出現塊效應怎麼解決
interpolation 插值方法,類似於 CV_INTER_NN 方法。當圖像放大時,dst 輸出圖像,該方法可以避免波紋出現。當圖像縮小時候;
src 輸入圖像,
CV_INTER_LINEAR - 雙線性插值 (預設使用)
CV_INTER_AREA - 使用象素關系重采樣.
該方法就是用於將圖像改變為dst定義的大小..
CV_INTER_CUBIC - 立方插值, CvArr* dstvoid cvResize( const CvArr* src,然後根據你選擇的插值方法進行插值, int interpolation=CV_INTER_LINEAR ):
CV_INTER_NN - 最近鄰插值.
4. 如何用MATLAB編寫一個雙線性插值的演算法,用來放大縮小圖象
%% 4.圖像的縮放
% 思路:雙線性插值
kV = 0.5; % 垂直縮放系數
kH = 0.5; % 水平縮放系數
% 讀入圖像
I = imread('D:\lena.bmp'); % 注意修改文件路徑
II = double(I);
[m, n, r]=size(II);
OI=zeros(m*kV,n*kH, r);
rot=[kV 0 0;0 kH 0;0 0 1]; % 變換矩陣
for k=1:r
for i=1:m*kV
for j=1:n*kH
pix=[i j 1]/rot;
Y =pix(1)-floor(pix(1));
X =pix(2)-floor(pix(2));
% 邊界處理
if pix(1) < 1
pix(1) = 1;
end
if pix(1) > m
pix(1) = m;
end
if pix(2) < 1
pix(2) = 1;
end
if pix(2) > n
pix(2) =n;
end
% 四個鄰點
pix1 = [floor(pix(1))floor(pix(2))];
pix2 = [floor(pix(1))ceil(pix(2))];
pix3 = [ceil(pix(1))floor(pix(2))];
pix4 = [ceil(pix(1))ceil(pix(2))];
% 計算臨近四個點的權重
w1 = (1-X)*(1-Y);
w2 = X*(1-Y);
w3 = (1-X)*Y;
w4 = X*Y;
% 按權重進行雙線性插值
OI(i,j,k)=...
w1*II(pix1(1),pix1(2),k)+ ...
w2*II(pix2(1),pix2(2),k)+ ...
w3*II(pix3(1),pix3(2),k)+ ...
w4*II(pix4(1),pix4(2),k);
end
end
end
figure, imshow(uint8(II)), title('原圖')
figure, imshow(uint8(OI)), title('縮放後')
5. 如何使用Matlab實現雙線性插值演算法
提問前建議先自行網路
關鍵詞
「matlab」+
「雙線性插值」
首先需要了解什麼是雙線性插值:
如果選擇一個坐標系統使得
的四個已知點坐標分別為
(0,
0)、(0,
1)、(1,
0)
和
(1,
1),那麼插值公式就可以化簡為
f(x,y)=f(0,0)(1-x)(1-y)+f(0,1)(1-x)y+f(1,1)xy+f(1,0)x(1-y)
相應進行matlab程序編寫即可
6. 什麼是雙線性插值演算法
雙線性插值,又稱為雙線性內插。在數學上,雙線性插值是有兩個變數的插值函數的線性插值擴展,其核心思想是在兩個方向分別進行一次線性插值。
假如我們想得到未知函數 f 在點 P = (x, y) 的值,假設我們已知函數 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四個點的值。首先在 x 方向進行線性插值,然後在 y 方向進行線性插值。
與這種插值方法名稱不同的是,這種插值方法並不是線性的,而是是兩個線性函數的乘積。
線性插值的結果與插值的順序無關。首先進行 y 方向的插值,然後進行 x 方向的插值,所得到的結果是一樣的。
7. 什麼是線性插值原理 什麼是雙線性插值
線性插值一次為:0,5,10,15,20,25,30,35,40 即認為其變化(增減)是線形的,可以在坐標圖上畫出一條直線 在數碼相機技術中,這些數值可以代表組成一張照片的不同像素點的色彩、色度等指標。 為了方便理解,先考慮一維情況下的線性插值 對於一個數列c,我們假設c[a]到c[a+1]之間是線性變化的 那麼對於浮點數x(a<=x<a+1),c(x)=c[a+1]*(x-a)+c[a]*(1+a-x); 把這種插值方式擴展到二維情況 對於一個二維數組c,我們假設對於任意一個浮點數i,c(a,i)到c(a+1,i)之間是線性變化的,c(i,b)到c(i,b+1)之間也是線性變化的(a,b都是整數) 那麼對於浮點數的坐標(x,y)滿足(a<=x<a+1,b<=y<b+1),我們可以先分別求出c(x,b)和c(x,b+1): c(x,b) = c[a+1]*(x-a)+c[a]*(1+a-x); c(x,b+1) = c[a+1][b+1]*(x-a)+c[a][b+1]*(1+a-x); 好,現在已經知道c(x,b)和c(x,b+1)了,而根據假設c(x,b)到c(x,b+1)也是線性變化的,所以: c(x,y) = c(x,b+1)*(y-b)+c(x,b)*(1+b-y) 這就是雙線性插值,
8. 圖像處理中的雙線性插值演算法的原理
何東健的《數字圖像處理》光碟第六章有前兩種的程序
完整程序已發你郵箱
核心代碼如下:
for(y = 0; y < nNewHeight; y++)
{
//指向新圖像第y行
//注意此處寬度和高度是新圖像的寬度和高度
pNewTemp = pNewBits;
pNewTemp += (nNewHeight - 1 - y) * nNewWidthBytes;
//針對圖像每列進行操作
for(x = 0; x < nNewWidth; x++)
{
//計算該像素在源圖像中的坐標
int y0 = (long) (y / fYZoomRatio + 0.5);
int x0 = (long) (x / fXZoomRatio + 0.5);
//判斷是否在源圖范圍內
if( (x0 >= 0) && (x0 < nOldWidth) &&
(y0 >= 0) && (y0 < nOldHeight))
{
//用雙線性插值
if(bBilinear)
{
unsigned char *pTemp = Interpolation (nOldWidth, nOldHeight,
(float)x0, (float)y0,
nOldWidthBytes, nMovedBits, pOldBits);
//復制像素
memcpy(pNewTemp, pTemp, nMovedBits);
delete [] pTemp ;
}
else
//最近鄰插值
{
//指向源圖像第y0行,第x0個像素
//注意此處寬度和高度應該互換
pOldTemp = pOldBits;
pOldTemp += (nOldHeight - 1 - y0) * nOldWidthBytes;
pOldTemp += x0 * nMovedBits;
//復制像素
memcpy(pNewTemp, pOldTemp, nMovedBits);
}
}
pNewTemp += nMovedBits;
}
}
9. 雙線性插值原理的雙線性插值
把這種插值方式擴展到二維情況
對於一個二維數組c,我們假設對於任意一個浮點數i,c(a,i)到c(a+1,i)之間是線性變化的,c(i,b)到c(i,b+1)之間也是線性變化的(a,b都是整數)
那麼對於浮點數的坐標(x,y)滿足(a<=x<a+1,b<=y<b+1),我們可以先分別求出c(x,b)和c(x,b+1):
c(x,b) = c[a+1][b]*(x-a)+c[a][b]*(1+a-x);
c(x,b+1) = c[a+1][b+1]*(x-a)+c[a][b+1]*(1+a-x);
好,現在已經知道c(x,b)和c(x,b+1)了,而根據假設c(x,b)到c(x,b+1)也是線性變化的,所以:
c(x,y) = c(x,b+1)*(y-b)+c(x,b)*(1+b-y)
這就是雙線性插值,
10. 雙線性插值的示例
已知的紅色數據點與待插值得到的綠色點
假如我們想得到未知函數f在點P= (x,y) 的值,假設我們已知函數f在Q11 = (x1,y1)、Q12 = (x1,y2),Q21 = (x2,y1) 以及Q22 = (x2,y2) 四個點的值。
首先在x方向進行線性插值,得到R1和R2,然後在y方向進行線性插值,得到P.
這樣就得到所要的結果f(x,y).
其中紅色點Q11,Q12,Q21,Q22為已知的4個像素點.
第一步:X方向的線性插值,插入藍色 第二步 :做完X方向的插值後再做Y方向的
點R1和R2插值 ,由R1與R2計算P點.
Y方向上插入綠色點P.
線性插值的結果與插值的順序無關。首先進行y方向的插值,然後進行x方向的插值,所得到的結果是一樣的。但雙線性插值插值方法這種方法並不是線性的,首先進行y方向的插值,然後進行x方向的插值,與首先進行 x方向的插值,然後進行 y方向的插值,所得到的R1與R2是不一樣的。
如果選擇一個坐標系統使得 的四個已知點坐標分別為 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那麼插值公式就可以化簡為
f(x,y)=f(0,0)(1-x)(1-y)+f(0,1)(1-x)y+f(1,1)xy+f(1,0)x(1-y) 在x與y方向上,z值成單調性特性的應用中,此種方法可以做外插運算,即可以求解Q1~Q4所構成的正方形以外的點的值。 雙線性插值的一個顯然的三維空間延伸是三線性插值。 三線性插值的方法可參看matlab中的interp3