【发布时间】:2013-04-16 02:21:13
【问题描述】:
我目前有一个 AsyncTask,它目前使用 OpenCV 的 bubble sort 技术比较图像。说,我必须将400 图像相互比较。这意味着400*401/2=80,200 比较。假设一次比较需要 1 秒。所以,这就是80,200 sec,它大约是22.27 hours,这太长了。所以,我开发了这种类型的算法:
它将400 图像分成5 组。所以每组都有80图片。
算法的第一部分是在组成员中比较自己的图像。
所以,image1 会将自己与 image2-80 进行比较,这意味着存在 79 比较。 image2 将有 78 比较等等。这使得3,160 比较。或3,160 sec。同样,image81 会将自己与image82-160 进行比较,依此类推。所以所有“组比较”都在3,160 sec 中完成,因为它们是并行运行的。
算法的第二部分将比较group 1元素与group 2元素,group 2与group 3,group 3与group 4等等。这意味着image1 将与image81-160 进行比较,这是80 比较,因此group 1 和group 2 之间的总比较将是80*80=6400 比较。是否可以将每个图像比较与组比较并行?也就是说,如果image1 将自己与image81-160 进行比较,那么image2 应该做同样的事情,以此类推,而其他组也在做同样的事情。所以,这部分应该只占用6400 sec。
现在,group1 将与 group3、group2 与 group4、group3 与 group5 进行比较。 ->6400 sec
之后,group1 will be compared with group4 和 group2 与 group5。 ->6400 sec
因此,所有组都进行了比较。
总时间 = 3160+6400+6400+6400=22,360sec。我意识到小组越多,需要的时间就越多。所以,我必须增加小组规模以减少时间的增加。无论哪种方式,它都会将时间缩短到几乎1/4th 这是实际时间。
这个算法不现实吗?如果是这样,为什么?它有什么缺陷?我将如何解决它?是否有更好的算法可以更快地比较图像列表?显然不是quick sort,我无法按升序或降序排列图像。或者我可以吗?
如果这个算法是可能的?实施它的最佳方法是什么? Thread 或 AsyncTask?
【问题讨论】:
-
好吧,我可以告诉你,你应该使用 Thread 对象来进行这些操作。 AsyncTask 对象用于持续不超过几秒钟的操作。
-
图片比较是什么意思?它会计算任何全序、偏序还是相似度?
-
@Joel 你能给我看一个大约 20 张图片的例子吗?
-
@AlexeiKaigorodov - 使用 FREAK 方法的相似性。
-
比较(不)平等最好在缩小的图像上进行。您可能会严格地将图像缩放到 32x32。对于 Android 来说是最好的解决方案,而且缩减本身可能很快。也许先测试几个随机像素。
标签: java android algorithm image-comparison