最近鄰插值、線性插值、雙線性插值-你必須要知道的一些點

博主最近在學習有關插值方面的內容,上網搜索了很多資料,看了這些資料的感受是都介紹的差不多,看後還是啥也不知道。最根本的原因是他們沒有通俗易懂的例子。學習新知識,最好的方式是帶着例子一起學習,這樣能夠理解的更加深刻。下面我將自己對這方面知識的理解分享給大家。

注:下面內容只是對網上理論內容的補充,不具體介紹理論內容,如果需要理論部分的內容,文末會附上寫的比較好的鏈接。

1.最近鄰插值,是指將目標圖像中的點,對應到源圖像中後,找到最相鄰的整數點,作爲插值後的輸出。

如上圖所示,目標圖像中的某點投影到原圖像中的位置爲點P,此時易知,f(P) = f(Q11)

一個例子:

如下圖所示,將一幅3X3的圖像放大到4X4,用$f(x, y)$表示目標圖像,$h(x, y)$表示原圖像,我們有如下公式:

$$
\begin{array}{c}
f(dst_{x}, dst_{y}) = h(\frac{dst_{x}src_{Width}}  {dst_{Width}}, \frac{dst_{y}src_{Height}} {dst_{Height}})
\end{array}
$$

$$
\begin{array}{c}
f(0,0)=h(0,0) \\
f(0,1)=h(0,0.75)=h(0,1) \\
f(0,2)=h(0,1.50)=h(0,2) \\
f(0,3)=h(0,2.25)=h(0,2) \\
...\\
\end{array}
$$

注意:上面提到了目標圖像與源圖像的一個對應公式:

$$
\begin{array}{c}
f(dst_{x}, dst_{y}) = h(\frac{dst_{x}src_{Width}}  {dst_{Width}}, \frac{dst_{y}src_{Height}} {dst_{Height}})
\end{array}
$$

這個公式在理解這幾個算法時是很重要的,只有清楚它,你才知道真正的一些實現上的細節。

從上面的例子也可以看出,最近鄰算法只需要找到目標圖像在原圖像中對應的點後,找到離它最近的一個整數座標的像素值作爲目標圖像對應位置處的像素值。

2.雙線性插值

一般網上的內容會告訴你,雙線性插值就是在兩個變量方向上做三次線性插值。

雙線性插值:目標圖像上的一個點,對應着源圖像中的四個點,使用四個點來做三次線性插值。

對比最近鄰插值:最近鄰插值目標圖像上的一個點,對應着源圖像中的一個點。

那麼現在的問題是,已知目標圖像上的一個座標點,怎麼在源圖像上找到與之對應的四個點。

還是利用這個公式:

$$
\begin{array}{c}
f(dst_{x}, dst_{y}) = h(\frac{dst_{x}src_{Width}}  {dst_{Width}}, \frac{dst_{y}src_{Height}} {dst_{Height}})
\end{array}
$$

通過這個公式,找到目標圖像上的點在源圖像上的投影位置後,直接找離它最近的四個點,用這四個點去做三次線性插值

這就是我想補充的內容,在很多博客上,這一點大家是沒有說到的,這也是爲什麼看了他們寫的理論後,還是似懂非懂的。

 

理論部分連接:

1.一篇文章爲你講透雙線性插值:https://zhuanlan.zhihu.com/p/110754637

2.三十分鐘理解:線性插值,雙線性插值Bilinear Interpolation算法 :https://blog.csdn.net/xbinworld/article/details/65660665

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章