图像失真算法的资源

时间:2008-10-22 12:31:38

标签: algorithm image graphics image-processing

我在哪里可以找到图像失真的算法?有很多关于Blur和其他经典算法的信息,但是很少有更复杂的算法。特别是,我对旋转效果图像失真算法感兴趣。

5 个答案:

答案 0 :(得分:28)

我找不到任何参考文献,但我可以基本了解失真效果的工作原理。

失真的关键是一个函数,它在失真图像中取两个坐标(x,y),并将它们转换为原始图像中的坐标(u,v)。这指定了失真的反函数,因为它将失真图像带回原始图像

为了生成失真图像,在x和y上循环,使用逆失真函数从(x,y)计算点(u,v),并将(x,y)处的颜色分量设置为与原始图像中的(u,v)相同。一个人通常使用插值(例如http://en.wikipedia.org/wiki/Bilinear_interpolation)来确定(u,v)处的颜色,因为(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)

答案 1 :(得分:20)

Jerry's Java Image Filters处有许多图像过滤器/效果的Java实现。也许你可以从那里获取灵感。

答案 2 :(得分:5)

漩涡和类似的漩涡是像素位置上的矩阵变换。您创建一个新图像并从图像上的位置获取颜色,该位置是通过将当前位置乘以矩阵得到的。

矩阵取决于当前位置。

这是一个很好的CodeProject,展示了如何做到这一点

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

答案 3 :(得分:2)

有一个新的图形库有很多功能

http://code.google.com/p/picasso-graphic/

答案 4 :(得分:0)

看看ImageMagick。它是一个图像转换和编辑工具包,并具有适用于所有流行语言的接口。

-displace运算符可以使用正确的置换贴图创建漩涡。

如果您由于某种原因对ImageMagick界面不满意,您可以随时查看过滤器的源代码并从那里开始。