Algorithm 减少比较次数以计算直方图之间卡方距离的算法?

Algorithm 减少比较次数以计算直方图之间卡方距离的算法?,algorithm,image-processing,Algorithm,Image Processing,我正在做一个附带项目,它将接受一个源图像,然后使用一组可用的缩略图图像生成一幅照片马赛克。我有一个可以正常工作的实现(见下文),但我遇到了“大O”问题,试图增加可用图像的数量以进行替换 我当前使用的流程如下所示: 我为所有可用的替换图像预先计算了4个桶RGB颜色直方图 将源图像放大到1000x1000 从缩放的源图像创建20x20“分幅”,并为每个分幅创建4个桶RGB直方图 对于每个磁贴,计算每个可用替换图像的卡方距离 对于每个磁贴,选择具有最小卡方距离的替换图像 具体来说,我遇到的问题是,

我正在做一个附带项目,它将接受一个源图像,然后使用一组可用的缩略图图像生成一幅照片马赛克。我有一个可以正常工作的实现(见下文),但我遇到了“大O”问题,试图增加可用图像的数量以进行替换

我当前使用的流程如下所示:

  • 我为所有可用的替换图像预先计算了4个桶RGB颜色直方图
  • 将源图像放大到1000x1000
  • 从缩放的源图像创建20x20“分幅”,并为每个分幅创建4个桶RGB直方图
  • 对于每个磁贴,计算每个可用替换图像的卡方距离
  • 对于每个磁贴,选择具有最小卡方距离的替换图像
具体来说,我遇到的问题是,随着可用替换图像数量的增加,比较的数量呈指数增长。我目前正在测试25000个可用的替换图像,在我的笔记本电脑上生成4个内核的最终图像需要将近10分钟

我的问题是,有没有一种方法可以避免距离计算的数量呈指数增长

我的一个想法是计算每个目标“瓷砖”之间的距离,将它们分成若干N组,在组内找到一个平均直方图,然后找到与平均直方图最接近的K个可用图像。从那里,我将返回并计算每个组中瓷砖的最接近匹配,但来自K个最接近图像的较小来源


务实的答案是欺骗

定义几个聚合预测,如“平均R”、“平均G”、“平均B”。在这些投影上对图像进行预分类。对缩略图的每个部分做一个初步评分,这是图像投影和缩略图之间绝对差异的总和

现在把缩略图堆成一堆,选出最好的50个。对这50个进行详细计算,然后从中选择最好的一个


你可能不会选择完美的答案。但你会选一个很好的。每个缩略图所需的工作量非常小。400次,进行3次查找和几次比较。只有少数人能切入实际工作。

务实的答案是欺骗

定义几个聚合预测,如“平均R”、“平均G”、“平均B”。在这些投影上对图像进行预分类。对缩略图的每个部分做一个初步评分,这是图像投影和缩略图之间绝对差异的总和

现在把缩略图堆成一堆,选出最好的50个。对这50个进行详细计算,然后从中选择最好的一个


你可能不会选择完美的答案。但你会选一个很好的。每个缩略图所需的工作量非常小。400次,进行3次查找和几次比较。只有少数人能切中要害。

有什么想法可以用来评估一个好的“预测”吗?我最初是通过平均缩略图的(r,g,b)值并最小化图块和缩略图之间的欧几里德距离来实现这一点的,但结果明显比直方图的卡方距离差。@AshishDatta想法是使用平均值(r,g,b)删除不太可能匹配的候选项的值。这样,您就不会浪费时间计算全黑瓷砖与全白瓷砖的卡方值。也许值得尝试计算瓷砖之间的某种差异。例如,如果您可以判断目标磁贴的方差很低,并且大部分为红色,那么您可能会从这两个标准中找到一个好的候选者。在高方差的情况下,你可能想尝试一些候选人。让我们看看。平均R,G,B可能很有效。你也可以加入每个象限的平均值。一般来说,你添加的投影越多,事情就越慢。添加足够的数据,然后重新创建当前的算法。我还猜出了“最佳50”。你做的越大,得到最佳答案的可能性就越大。@B绝对有效-!在90秒内完成,可能需要25k。有没有想过如何对候选替换进行分区,以便我只能计算目标磁贴分区中图像的投影距离?可能会对平均颜色进行聚类,并将目标瓷砖与质心进行比较?@AshishDatta您可以根据所有候选替换对象的投影将其放入R-树中,然后通过最近邻搜索找到目标瓷砖投影附近的替换对象。请注意,要查找目标点周围球体中的所有对象,实际上您将在一个较大的封闭立方体中处理所有对象,但您仍然可以避免使用大多数其他图像。您有没有想过要根据什么样的“投影”进行估计?我最初是通过平均缩略图的(r,g,b)值并最小化图块和缩略图之间的欧几里德距离来实现这一点的,但结果明显比直方图的卡方距离差。@AshishDatta想法是使用平均值(r,g,b)删除不太可能匹配的候选项的值。这样,您就不会浪费时间计算全黑瓷砖与全白瓷砖的卡方值。也许值得尝试计算瓷砖之间的某种差异。例如,如果您可以判断目标磁贴的方差很低,并且大部分为红色,那么您可能会从这两个标准中找到一个好的候选者。在高方差的情况下,你可能想尝试一些候选人。让我们看看。平均R,G,B可能很有效。你也可以加入每个象限的平均值。一般来说