1

我想创建一个图像转换程序。它应该根据某些标准(例如颜色和形状)将像素区域从一个图像转移到另一个图像。

为此,我需要能够分析图像、将其分成组并转移这些组。

  • 第一个问题已经从确定像素组开始。不应随意选择它们或完美的多边形/形状。有谁知道可以区分不同纹理/环境/边界的算法?
  • 接下来,我需要对这些区域进行微调,以使其适合新图像。然后这些区域将被移动。这不会像第一个问题那么难。

性能并不重要。首先我必须让程序正常工作。预先加载过渡或其他任何内容可能需要一个小时;)

谁能给我一些建议从哪里开始或我可以使用哪些技术/API?我对大多数编程语言都很好,最好是 C#、VB、JavaScript、PHP、Java 等。平台也不重要。

我知道,这很复杂,但我尽力解释它。有任何想法吗?

4

1 回答 1

1

您的第一个任务,根据颜色/纹理/等进行分组。称为分段。有很多方法和算法可以做到这一点,没有一种绝对比其他方法更好,因为图像处理中有很多事情,最好的算法取决于你的图像和你特定的功能/艺术目标。

一般的想法是定义像素之间的多个距离,比如一个距离仅基于像素的位置,另一个基于它们的颜色差异,更高级的度量可以考虑邻域来做一些与形状、轮廓相关的事情方向或纹理。然后,您将结合这些距离(例如在加权和中)以“聪明”地衡量两个像素的相似程度。之后,您或多或少地计算所有距离并根据某些阈值(例如最终组的大小)对相似像素进行分组。

如果您不想研究和实现所有这些,最好使用现有的图像处理库。我建议查看OpenCV和“分段”关键字。您将获得 k-means、分水岭和 meanshift 算法的实现,这些算法可能对实现您的效果很感兴趣。

OpenCV 是 C++,但我认为它也有 Java 和 Python 的绑定,可能还有其他绑定。

对于您的第二个任务,您需要混合移动和混合像素,但这更简单,您可以“手动”完成,或查看变形算法。

快速搜索发现这篇博客文章有一个使用 OpenCV 变形两个图像的源代码。您还有一些现成的几种语言的库,请查看相关 问题

您甚至可以直接调用命令行实用程序:xmorph但似乎不可移植或 imagemagick(请参阅脚本)更现代但未实现真正的变形算法 AFAIK。

于 2013-11-25T17:41:58.893 回答