【问题标题】:Resources for image distortion algorithms图像失真算法的资源
【发布时间】:2010-09-18 12:58:23
【问题描述】:

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

【问题讨论】:

    标签: algorithm image graphics image-processing


    【解决方案1】:

    我找不到任何参考资料,但我可以大致了解一下失真效果的工作原理。

    失真的关键是一个函数,它取失真图像中的两个坐标(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=线来完成,例如

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 但这会将 BufferedImage 作为文件的输入,Android 不支持此功能
      • 是的,android 不支持 bufferedImages..那么你对这些效果有什么其他想法。
      【解决方案3】:

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

      矩阵取决于当前位置。

      这里有一个很好的 CodeProject 展示如何做到这一点

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2011-01-16
            • 1970-01-01
            • 1970-01-01
            • 2011-07-29
            • 1970-01-01
            • 2021-10-24
            • 2012-03-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多