2

我正在用 Java 制作照片马赛克。我有一组瓷砖。我必须处理每个图块并将其 [R,G,B] 值存储在某些数据结构中。基本上,我希望它采用以下形式:

for eachTile in Directory:
calculateRGB;
store in HashMap(key is image name, value is a list of R,G,B value) in the form { (image1:[R,G,B]), (image2:[R,G,B], ...}

完成此操作后,我必须将目标图像分解为多个单元格。每个单元格的大小与图块的大小相同。现在,我必须处理每个单元格并计算其 RGB。在此之后,我必须将其与瓷砖进行比较以找到最佳匹配。

现在,匹配很棘手,因为我已经计算了每个单元格和每个图块之间的欧几里得度量以找到最佳匹配。因此,如果我有 n 个图块和 m 个单元格,我的算法将运行 n^2.m 次。

有没有更好的方法来做到这一点?还是我必须执行计算密集型算法来比较图像?

4

1 回答 1

2

您可以构建八叉树http://en.wikipedia.org/wiki/Octree或 KD-tree http://en.wikipedia.org/wiki/Kd-tree,以有效地找到最近的邻居。

于 2012-10-08T08:15:42.507 回答