我想创建一个图像过渡程序。它应该从一个图像移动像素区域,并根据某些标准(如颜色和形状)将它们转换为另一个图像。
要做到这一点,我需要能够分析图像,将其分成组,并移动这些组。
表现并不重要;首先,我必须让程序工作。可能需要一个小时才能预先加载转换或其他任何内容;)
有人可以给我一些建议从哪里开始,或者我可以使用哪些技术/ API?我对大多数编程语言都很好,最好是C#,VB,JavaScript,PHP,Java等。平台也无关紧要。
我知道,这很复杂,但我尽力解释它。有什么想法吗?
答案 0 :(得分:1)
您的第一项任务,根据颜色/纹理等进行分组。被称为segmentation。有许多方法和算法可以做到这一点,没有一个绝对比其他方法更好,因为图像处理中的许多东西,最好的算法取决于你的图像和你的特定功能/艺术目标。
一般的想法是定义像素之间的多个距离,例如一个距离仅基于像素的位置,另一个距离基于颜色的差异,更高级的度量可以考虑邻域来做与之相关的事情。形状,轮廓方向或纹理。然后,您将组合这些距离(例如以加权和),以获得两个像素相似程度的“聪明”度量。之后,您可以根据某些阈值(例如最终组的大小),或多或少详尽地计算所有距离并对相似像素进行分组。
如果您不想研究和实施所有这些,那么最好使用现有的图像处理库。我建议查看OpenCV和“segmentation”关键字。你将获得k-means,分水岭和meanshift算法的实现,这些算法可能对实现你的效果感兴趣。
OpenCV是C ++,但我认为它也有Java和Python的绑定,可能还有其他。
对于第二项任务,您需要混合移动和混合像素,但这样更简单,您可以“手动”执行,或查看morphing算法。
快速搜索显示this blog post使用OpenCV的源代码来变换两个图像。您还有几种语言的现成库,请查看related questions。
您甚至可以直接调用命令行实用程序:xmorph但似乎不是可移植的或imagemagick(请参阅this脚本),它更现代但不实现真正的变形算法AFAIK。