2008-10-22 71 views
20

我在哪裏可以找到圖像失真的算法?有很多Blur和其他經典算法的信息,但更復雜的算法很少。特別是,我對旋流效應圖像失真算法感興趣。圖像失真算法的資源

回答

27

我找不到任何引用,但我可以給失真效果如何工作的基本思路。

關鍵到失真是一個函數,它有兩個座標(x,y)處的失真圖像中,並將其變換到座標(u,v)的原始圖像中這指定了失真的反函數,因爲它將失真的圖像帶回原始圖像

要生成失真圖像,一個在x和y上循環,根據(x,y)計算點(u,v) )使用逆變形函數,並且將(x,y)處的顏色分量設置爲與原始圖像中的(u,v)處的顏色分量相同。因爲(u,v)通常不是精確地位於像素的中心,而是位於像素之間的某個分數點處,所以通常使用插值(例如http://en.wikipedia.org/wiki/Bilinear_interpolation)來確定(u,v)處的顏色。

甲渦流基本上是一個旋轉,其中旋轉的角度是依賴於從圖像的中心的距離。一個例子是:

a = amount of rotation 
b = size of effect 

angle = a*exp(-(x*x+y*y)/(b*b)) 
u = cos(angle)*x + sin(angle)*y 
v = -sin(angle)*x + cos(angle)*y 

在這裏,我假定爲簡明起見,該渦流的中心在(0,0)。通過在失真函數之前從x和y減去旋轉位置座標並將它們添加到u和v之後,可以將漩渦放在任何位置。

周圍有各種渦流效應:一些(如上面所述)漩渦僅一局部區域,並且具有旋流朝向圖像的邊緣減小的量。其他的則增加了朝向圖像邊緣的旋轉。這種事情可以通過玩角度=線來完成,例如,

angle = a*(x*x+y*y) 
0

看看ImageMagick。這是一個圖像轉換和編輯工具包,並具有所有流行語言的界面。

的-Displace運營商可以創建正確的置換貼圖的漩渦。

如果您由於某種原因不滿意ImageMagick的接口,可以隨時看看過濾器的源代碼,並從那裏走。

4

漩渦和像這樣的其他人是像素位置上的矩陣變換。您製作一張新圖像,並從您將當前位置乘以矩陣獲得的圖像位置獲取顏色。

該矩陣取決於當前位置。

這裏是展示如何做一個好CodeProject上也

http://www.codeproject.com/KB/GDI-plus/displacementfilters.aspx

20

有一個Java實現很多圖像過濾器在Jerry's Java Image Filters /效果的。也許你可以從那裏獲得靈感。

+2

我希望我能給予好評這個10倍。非常感謝你:) – fresskoma 2011-10-16 04:06:43