algorithm - 我可以使用什么算法在图像上应用鱼眼失真?

标签 algorithm filter video-processing

谁能指导我开发用于视频处理的过滤算法的最佳方法?

例如,我想在图像上应用鱼眼镜头滤镜,我将如何处理像素以使其模拟这种效果?

如果我想让图片看起来更红,那么我会从每个像素的蓝色和绿色分量中减去值,只留下红色分量。

这种失真不仅仅是颜色处理,所以我想知道如何以正确的方式操纵像素以模仿鱼眼镜头滤镜,或者说夹紧滤镜等。

编辑:

视频处理的过滤算法*

最佳答案

正如 Martin 所说,要对图像应用失真,而不仅仅是色彩校正,您需要以某种方式置换该图像中的像素。您通常从输出图像开始,找出要抓取的输入像素位置以填充输出中的每个位置。

例如,要生成我在 this answer 中显示的收缩失真,我使用如下所示的 OpenGL ES 片段着色器:

 varying highp vec2 textureCoordinate;

 uniform sampler2D inputImageTexture;

 uniform highp vec2 center;
 uniform highp float radius;
 uniform highp float scale;

 void main()
 {
     highp vec2 textureCoordinateToUse = textureCoordinate;
     highp float dist = distance(center, textureCoordinate);
     textureCoordinateToUse -= center;
     if (dist < radius)
     {
         highp float percent = 1.0 + ((0.5 - dist) / 0.5) * scale;

         textureCoordinateToUse = textureCoordinateToUse * percent;
     }
     textureCoordinateToUse += center;

     gl_FragColor = texture2D(inputImageTexture, textureCoordinateToUse );

 }

此 GLSL 代码应用于输出图像中的每个像素。它所做的是计算从被收缩区域的中心到当前像素坐标的距离。然后根据输入的 scale 参数获取输入距离和比例。这个新的缩放距离用于置换输入图像中将从中读取输出颜色的坐标。

在每个输出像素的位移坐标处从输入图像中采样颜色会产生输入图像的失真版本。正如您在我的链接答案中看到的那样,计算此位移的函数略有不同会导致截然不同的失真。

关于algorithm - 我可以使用什么算法在图像上应用鱼眼失真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10637553/

相关文章:

algorithm - 按 Lua 中的嵌套值对表进行排序

java - 使用 neo4j 搜索强连通分量

c# - 生成可以在白色字体上轻松阅读的颜色的算法?

使用 RediSearch 过滤 ID

video - 提取没有音频的视频ffmpeg

c# - 确定二维数组是否包含元素的最快方法?

java - 有没有办法过滤/搜索 HTMLEditorKit 中的内容?

python - [Google App Engine]如何使用filter()?

video - 是否有任何资源列出了 FFmpeg 不支持的当前编解码器和格式?

Ffmpeg 使用 cuvid 连接具有硬件加速的视频文件