我想要实现的是两个图像文件之间的转换。来自图像A的像素移动并重新排列以形成图像B.想象一下形成图像B的粒子云(由A图像的像素构成)。
到目前为止,我已经考虑过图像A中的所有像素并将它们与图像B中的像素进行比较;最相似的像素从数组中取出(也用它们的x,y坐标)并放入另一个数组中。所以,最后,我有两个相似的图像像素对。然后我只需要创建动画/可能的颜色平衡(显然所有对都不会包含相同的像素),这很容易。
问题是找到像素对的算法。对于小的100px x 100px图像,需要50 005 000次比较,对于较大的图像,这是不可能的。
将图片分成群集?任何想法将不胜感激。
答案 0 :(得分:1)
我会说你可能会先获得色调匹配像素的最佳结果,然后是饱和度,最后是亮度。如果我是对的,那么优化的最佳选择是首先转换为HSV。在那里,您可以对像素进行排序,并对搜索结果进行二元搜索以找到您的像素。
我想你可能想要在找到的结果周围另外搜索一个固定的窗口,以匹配彼此距离最远的像素。这可能会使结果转变更加连贯。
答案 1 :(得分:0)
您可能需要查看Hungarian algorithm,它会将100x100像素的实际比较数量减少到10000 - 之后您有O(n ^ 3)时间来查找最佳匹配。基本上,根据相似度给每个像素组合一个“成本”,然后通过算法发送(反向)成本矩阵,以获得从A到B的像素的最佳像素分配。
但是根据你是否需要实时,它仍然可能计算得太多,获得的收益太少。即这种工作不一定需要最佳匹配,只需足够好 - 仍然,它可以作为寻找较少计算密集型方法的起点。
请参阅链接文章的底部,了解各种语言的实现情况 - 实现起来并非完全不合时宜。