搜索图像中像素特定像素的最快方法

时间:2016-10-17 13:38:18

标签: image algorithm optimization

搜索图像中特定像素的最快方法是什么? 图像文件大小为16 MB。从算法的角度来看,我不认为我可以比线性搜索更好。 我试图将图像分成2个象限1,用于每个CPU,并将图像加载到内存中并从那里读取。 还有什么我可以做的吗?

3 个答案:

答案 0 :(得分:1)

象限实际上有点烦人,当空间发生时他们可以提供帮助,但由于这只是一个线性搜索所以他们所做的就是打破好的顺序访问模式。所以你应该将图像分成1D内存片,忽略数据的原始2D值。

此外,检查您的代码是否由编译器自动向量化,如果它不是(或者即使它可以改进),也可以使用SIMD内在函数手动进行矢量化。 24bpp会让这有点烦人,但你可以通过加载48个字节来处理它,然后通过一些改组重新分配4个向量寄存器。 32bpp非常简单,只需在像素和要查找的颜色之间应用(假设你的目标是x86)_mm_cmpeq_epi32,并从计数中减去结果。

答案 1 :(得分:0)

通常不是,唯一可以改进的地方是:

如果在找到确切结果之前获得早期结果对您的申请有利,您可以改进如下,但这项工作可能不值得您投资:

第1步:以2或3像素的步长搜索。仅在颜色相似时才进一步搜索。如果找到返回像素   如果没有找到,请 第2步: 搜索剩下的像素,(你在第1步中过度跳跃)

但由于颜色相似度的计算将超过一些像素的超量增益,这个算法表明线性搜索很可能是最好的解决方案。

答案 2 :(得分:0)

可能存在一些近似策略来修剪/跳过某些像素范围,其中找到特定像素的可能性较小。但是,如果您最终执行线性搜索,您当然可以通过Loop Blocking优化磁盘上的搜索时间。通过这种方式,您可以充分利用主内存并减少磁盘查找。

您还可以查看英特尔的文章improve memory utilization by means of loop blocking