雙線性插值其函式其實不是線性的,函式類似於f(x,y)=a0+a1x+a2y+a3xy。也可以表示為(ax+b)*(cy+d)
從這種表示我們就可以看出來是兩個線性函式的乘積,由向量的叉積我們知道,得到的結果是他們的法向量。
通過函式我就可以看出來,我們想要得到的插值點是位於任意一(x,y)位置上的第三維的值f(x,y)。我們可以想象我們正在處理一張a,畫素的行列號即是(x,y),畫素的灰度值就是f(x,y),當我們需要對這張的畫素值進行重取樣的時候,新的每個畫素灰度值是多少呢?這就需要進行插值處理了。
如上圖所示,p1、p2、p3、p4代表4個畫素的中心點,其行列號為(x1,y1)、(x2,y1)、(x1,y2)、(x2,y2)對應的灰度值為d1、d2、d3、d4, q為我們重取樣後的畫素點,灰度值為d。
對於q的行列號,我們需要分清楚的是:
由於對原始影象進行了重取樣,所以畫素的大小發生了變化(圖中的藍框為原始畫素的大小,紅框為重取樣後的畫素大小)。
由此可知,假如原始是300*300的大小,那麼重取樣後可能為500*700(**的實際尺寸沒變,只是畫素大小變了導致了行列數增加).這也就是說在確定了重取樣的畫素大小後,新的行列數就已經確定了,只不過此時還不知道每個畫素的灰度是多少,在新里q點的行列號我們用(r,c)來表示。
但是,插值需要我們知道q點在原始上的行列號是多少,因此我們用(x,y)來表示q點在原始影像上的行列號(可以用小數表示行列號,如1.2行,1.7列)。其中(x,y)是可以由(r,c)及重取樣前後畫素大小的變化比率計算出來的。比如,重取樣後的畫素是原始畫素的0.6倍,則x=r*0.6 y=c*0.6。
好,現在我們知道了p1、p2、p3、p4、q的座標後,如何利用雙線性插值來得到q點灰度值d呢?
雙線性插值實際上是先在x軸上進行一次線性插值,然後再在y軸上進行一次線性插值。用圖中的點位來解釋的話就是:
(1)先在x軸上插值,得到r1和r2的灰度值
(2)在y方向上對r1、r2進行插值,得到q點的灰度值
演算法理解上,在乙個三維空間(x,y,d)中對某點進行插值,先將四個點投影到x-d 平面,進行線性插值得到r1、r2的灰度值,再將r1、r2兩個點投影到y-d平面進行線性插值,得到q點的灰度值。
雙線性插值
雙線性插值作為opencv中預設使用的影象縮放演算法,其效果和速度都是不錯的。並且效果也比較穩定,計算複雜度並不算太高。我看了很多網上的演算法,自己也沒看太懂,下面是從網上找的雙線性插值 演算法的講解。影象的雙線性插值放大演算法中,目標影象中新創造的象素值,是由源影象位置在它附近的2 2區域4個鄰近...
雙線性插值
轉至 雙線性插值,這個名字咋一聽很高大上的樣紙,再在維基百科上一查 見文末,我去,一堆的公式嚇死人 像俺這種半文盲,看到公式腦子就懵的型別,真心給跪。雖然看著好複雜,但仔細一看道理再簡單不過了,所以還是自己梳理一下好。雙線性插值,顧名思義就是兩個方向的線性插值加起來 這解釋過於簡單粗暴,哈哈 所以只...
雙線性插值
雙線性插值就是在x軸和y軸兩個方向上進行插入操作。假設a b兩個點,要在ab中間插入乙個點c c座標在ab連線上 就直接讓c的值落在ab的連線上即可。例如a點座標 0,0 值為3,b點座標 0,2 值為5,要對座標 0,1 的點c進行插值,就讓c落在ab上,值就為4。如果c點不在ab線上,如圖所示 ...