我在哪里可以找到图像失真的算法?有很多关于Blur和其他经典算法的信息,但是很少有更复杂的算法.特别是,我对旋转效果图像失真算法很感兴趣.
我找不到任何参考文献,但我可以基本了解失真效果的工作原理.
失真的关键是一个函数,它在失真图像中取两个坐标(x,y),并将它们转换为原始图像中的坐标(u,v).这指定了失真的反函数,因为它将失真图像带回原始图像
为了生成失真图像,在x和y上循环,使用逆失真函数从(x,y)计算点(u,v),并将(x,y)处的颜色分量设置为与那些相同at(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)
在Jerry的Java Image Filters中有很多图像过滤器/效果的Java实现.也许你可以从那里获取灵感.
漩涡和类似的漩涡是像素位置上的矩阵变换.您可以创建一个新图像并从图像上的位置获取颜色,该位置是通过将当前位置乘以矩阵得到的.
矩阵取决于当前位置.
这是一个很好的CodeProject,展示了如何做到这一点
http://www.codeproject.com/KB/GDI-plus/displacementfilters.aspx