2014-12-13 79 views
1

我必須用雙線性插值實現魚眼變換。在一個像素變換後,我不再有整數座標了,我想用雙線性插值法在整數座標上映射這個像素。問題在於,我發現在inetrnete上的雙線性插值(參見例如Wikipedia)做了相反的事情:它通過使用具有整數座標的四個鄰居的座標來給出一個非整數像素的值。我想做相反的事情,即將具有非整數座標的一個像素映射到具有整數座標的四個鄰居。當然,有些東西我錯過了,並有助於理解我的錯誤。魚眼濾波器的雙線性插值

編輯: 更清楚:假設我有像素(i,j)=(2,2)的起始圖像。在魚眼變換後,我獲得非整數座標,例如(2.1,2.2)。我想將這個新像素保存到一個新的圖像,但顯然我不知道在哪個像素保存它,因爲非整數座標。最簡單的方法是截斷座標,但圖像質量不是很好:我必須使用雙線性插值。儘管如此,我不明白它是如何工作的,因爲我想用新整數座標(變換後的圖像)將我的非整數像素分割爲相鄰像素,但是我只找到了相反操作的描述,即找到非整數座標從四個整數像素(http://en.wikipedia.org/wiki/Bilinear_interpolation

+0

請你更具體,並添加一個明確的例子。 – 2014-12-13 13:05:59

+0

已編輯。我希望現在更清楚。 – 2014-12-13 13:16:41

回答

2

您的問題有點不清楚。根據我的理解,你有一個正常的圖像,你想變成魚眼般的圖像。爲此,我猜你從常規圖像中獲取每個像素座標{xr,yr},使用魚眼變換獲得類似魚眼圖像中相應的座標{xf,yf}。您想將初始像素強度分配給目標像素,但是由於{xf,yf}不是整數值,所以您不知道如何執行此操作。

如果是這樣,您實際上是在向後解決問題。您應該從魚眼圖像中的整數像素座標開始,使用反魚眼變換獲得常規圖像中的浮點像素座標,並使用雙線性插值從4個最接近的整數座標估計浮點座標的強度。

的基本步驟如下:

  1. 開始與整數像素(魚眼圖像中的例如(2,3))的魚眼圖像中的座標(xf,yf)。你想估計與這些座標相關的強度If
  2. 通過使用逆魚眼變換將(xf,yf)映射到「開始」圖像中,在「開始」圖像中找到相應的點。您可以在「開始」圖像(例如,起始圖像中的(2.2,2.5))中獲得浮點像素座標(xs,ys)
  3. 根據「開始」圖像(例如(2,2),(2,3),(3,2))中4個最接近的整數像素座標的強度,使用雙線性插值來估計座標(xs,ys)處的強度Is ),(3,3)的起始圖像中)
  4. 分配IsIf
  5. 重複從步驟1與下一個整數像素座標,直到魚眼圖像的所有像素的強度已被發現。

請注意,根據等式推導逆魚眼變換可能有點棘手......但是,這就是圖像重採樣如何執行的。

+0

我編輯的問題更清楚(希望)。我認爲你理解我的問題,但我不確定要理解你的解決方案......謝謝 – 2014-12-13 13:17:57

+1

@NomeCognome:努力學習,這是正確的解決方案。 – 2014-12-13 13:35:33

+1

我編輯了我的答案,使其更清晰。你能指出你不明白的是什麼嗎? – AldurDisciple 2014-12-13 13:36:30

1

您需要首先找到逆魚眼變換,然後使用「後向換行」從目標圖像轉到源圖像。

我給你一個簡單的例子。假設您想要通過1.5的非整數因子來擴展圖像。所以你有

x_dest = x_source * 1.5, y_dest = y_source * 1.5 

現在,如果你迭代原始圖像中的座標,你會得到目標圖像中的非整數座標。例如,(1,1)將被映射到(1.5,1.5)。這是你的問題,一般而言是「向前包裹」圖像的問題。

相反,你的反轉型寫

x_source = x_dest/1.5, y_source = y_dest/1.5 

現在你迭代目標圖像像素以上。例如,目標圖像中的像素(4,4)來自源圖像中的(4/1.5,4/1.5)=(2.6,2.6)。這些是非整數座標,您可以使用源圖像中的4個相鄰像素來估計此座標處的顏色(在本例中爲(2,2),(2,3),(3,2)和( 3,3))

+0

是的,我想我從錯誤的方向看問題......我會考慮它,並試圖瞭解如何正確地解決問題!謝謝。 – 2014-12-13 13:55:30

+0

你的答案戰爭真的很有幫助!謝謝! – 2014-12-13 22:42:35