Algorithm 如何以编程方式将图像动画化?

Algorithm 如何以编程方式将图像动画化?,algorithm,image-manipulation,command-line-interface,Algorithm,Image Manipulation,Command Line Interface,我的应用程序可以处理人们的照片和视频,我想将其卡通化。所以我需要一个手动算法(我们的产品使用c++/Qt,它有图像处理类)或者一些CLI程序来为我完成这项工作,我可以从我们自己的应用程序调用和使用 实际上我不知道有什么工具,但你可以看看osg(openSceneGraph) 有一个osgFX库和卡通效果。。。也许你可以从那个图书馆得到启发 也许(我不知道)imagemagick有很多功能,也许它有这样一个功能,但我不知道…我自己没有做过,但考虑两个步骤,可能会让图像看起来像卡通 检测边缘,并在

我的应用程序可以处理人们的照片和视频,我想将其卡通化。所以我需要一个手动算法(我们的产品使用c++/Qt,它有图像处理类)或者一些CLI程序来为我完成这项工作,我可以从我们自己的应用程序调用和使用

实际上我不知道有什么工具,但你可以看看osg(openSceneGraph)

有一个osgFX库和卡通效果。。。也许你可以从那个图书馆得到启发



也许(我不知道)imagemagick有很多功能,也许它有这样一个功能,但我不知道…

我自己没有做过,但考虑两个步骤,可能会让图像看起来像卡通

  • 检测边缘,并在这些边缘上画一条相当粗的线(几个像素)

  • 减少图像中的颜色数量


  • 不确定这是否有帮助,但对于Photoshop,建议执行以下操作:

  • 在Photoshop中打开图像
  • 滤镜>模糊>高斯模糊。将半径设置为3.0或更高,以适应口味
  • 编辑>淡入高斯模糊。一个窗口将弹出。将模式设置为变暗。您可能还需要降低不透明度
  • 这是结果


    我想你可以在你的程序中做一些类似的事情。

    你可以试试旋转镜,比如:


    以下是一些算法:

    • 中值或重复框模糊过滤器,以获得卡通调色板
      • 编辑:双边过滤应该更适合您的需要
    • Min filter(第0百分位)用于增强某些类型的边
    • 使用RGB颜色立方体中的小子立方体或球体进行彩色图像分割
    • 使用Sobel核或8路边缘跟踪等边缘检测对分割图像进行常规边缘增强
    • 具有增强边缘的合成模糊/中值滤波图像
    这些都是相当基本的,而且都很容易实现。请记住,中值和框模糊滤波器可以使用线性时间复杂度w.r.t.内核半径来实现

    更多编辑:

    一旦你了解了Huang的算法,实现一个框模糊过滤器就是小菜一碟

    阅读材料:

    • (获取PDF)
    • (获取PDF)注意:我在C#中实现了这一点,使用Mono/SIMD加速直方图合并,但是,只有当直径超过约60像素时,它才似乎比O(r)算法更好,这是由于可比的add/sub指令数(盈亏平衡点),一个C++实现可能更适合于使用SIMD。

    其他阅读材料包括(似乎是旧版本)分割和边缘跟踪。8路边缘跟踪确实很难让你的头弯曲(在像素上或像素边缘之间选择,以及如何锁定边缘)。我很乐意与大家分享一些代码,但这一百行代码并不完全适合这里。

    如果在的卡通过滤器(或其他过滤器组合)中有一些参数可以达到预期的效果,那么它可以在一个开放源代码(甚至是Google Summer of code)中运行。

    要实现的项目。以下是动画模式下的输出示例:

    (来源:)

    这相对容易做到。以下是步骤:

    • 双边过滤以简化/抽象照片。您可能希望分离双边过滤器,以便更快。沿梯度在1d内执行双边滤波,然后沿梯度的法线执行双边滤波

    • 检测边缘。例如,使用高斯差分算法。您可能希望在渐变方向上使用狗,并沿着流线使其平滑。为了得到流线,你需要得到边切线流(ETF),你可以通过结构张量得到

    • 量化颜色。实际上,您可以量化亮度以模拟cel着色(也称为卡通着色)

    • 混合量化后的抽象图像和检测到的边缘

    这将为您提供一个渲染图像,看起来像cel着色的卡通

    我制作了一些免费软件(适用于win64),可以在以下位置实现这一点:

    该软件的名称为“漫画家”,您可以在此处看到它的作用:


    这些是我的博客的链接,主要是关于3d摄影(深度图、摄影测量等)。

    实际上我尝试过这个算法,但没有成功。也许有什么遗漏?你能给出一些卡通化图片的例子吗?为了获得更多的搜索结果、论文等,寻找“非真实照片渲染(2d)”。我已经记不清有多少次我看到一个新用户的问题因为没有描述他/她到目前为止尝试过的内容、研究、代码而被遗忘,等等,这个问题得到55票!常见问题解答:“为了正常工作,旋转镜需要人工输入。”@Josip:你说得对,我忽略了这一点。尽管如此,一般来说,rotoscopy似乎满足了他的要求。你在哪里找到这个@bryanbcookA场景的源代码?该场景是显示系统的一部分,它处理存储要显示的对象图形,而不是操纵图像。像openCV这样的东西更适合+1-这是一幅很棒的图像,特别是线条可以极大地帮助图像的外观和解释。这似乎最适合我的目的-你知道我们可以在这里发布的这些算法的任何好的在线资源吗,为了完整性?后验证是一种不考虑几何信息的量化变换。有人在批处理模式下使用ImageMagick或Gimp获得了样本吗?我正试图在Ubuntu Linux上为一个项目解决这个问题。答案很好!请详细说明“彩色图像分割”步骤好吗?我以为分割是用来识别边缘检测后的物体,没有?在那里找不到教程,网站l