如何按像素组重新排列图像

时间:2013-11-25 16:56:55

标签: image-processing image-manipulation morphing

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

要做到这一点,我需要能够分析图像,将其分成组,并移动这些组。

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

表现并不重要;首先,我必须让程序工作。可能需要一个小时才能预先加载转换或其他任何内容;)

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

对于第二项任务,您需要混合移动和混合像素,但这样更简单,您可以“手动”执行,或查看morphing算法。

快速搜索显示this blog post使用OpenCV的源代码来变换两个图像。您还有几种语言的现成库,请查看related questions

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

相关问题