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



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

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

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

性能并不重要;首先我必须让程序正常工作。提前加载转换可能需要一个小时或其他时间;)

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

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

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

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

如果你不想研究和实现所有这些,最好使用现有的图像处理库。我建议查看OpenCV和"segmentation"关键字。您将获得k均值、分水岭和均值偏移算法的实现,这些算法可能对实现您的效果感兴趣。

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

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

快速搜索发现这篇博客文章的源代码使用OpenCV来变形两张图片。你也有一些现成的几种语言的库,看看相关的问题。

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

相关内容

  • 没有找到相关文章

最新更新