重新排列像素以共同定位相关像素

时间:2015-07-23 04:05:49

标签: algorithm pixel correlation

假设我们有一个灰度像素的2D数组。当我们遍历大量图像时,我们发现每个像素与所有其他像素具有一定程度的相关性 - 在所有图像中,某些像素子集往往彼此“同时”接通。我将如何在算法上重新排列像素的位置,以便相互关联的像素也在图像中彼此靠近?

以下是我想要做的视觉(虽然可能在技术上不准确)描述。想象一下,类似颜色的像素在所有图像之间是相关的。我们想要重新排列像素的位置,以便这些相关像素共同位于网格上:

http://i.stack.imgur.com/1u1Du.png

我尝试过遗传算法;适应度函数考虑了两个像素之间的欧氏距离及其相关性。然而,对于我的应用来说,它太慢了,我觉得它们应该是一种更优雅的方法。

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

这是我对你的问题的表述:你有一个二维矢量数组,这些矢量之间有相关性。您想重新排列数组,以便彼此高度相关的向量靠近在一起。据推测,问题在于任何涉及遍历整个阵列的目标函数都太昂贵而无法使用类似遗传算法的东西。

这是一个想法:决定一个单元格邻域的概念(数组中的位置)。因为计算开销较少,我会离散而不是欧几里德。也许一个单元的邻居本身就是它的直接邻居 - 但你可以走得更远。重要的是与整个阵列相比,保持邻域较小。对于每个邻域 - 计算类似于该邻域中的向量之间的平均相关性。将此视为本地目标函数。总体目标函数可以通过对这些较小目标函数的值求和或求平均来获得。

使用某种爬山方法(或者可能是模拟退火或禁忌搜索),这种方法涉及在单个阵列上进行局部更改,而不是维护整个阵列。使用本地更改,包括交换两个条目(并且还尝试诸如置换元素的三元组之类的东西)。一个关键的见解是,这种局部变化只涉及改变一些这些本地目标函数。特别是 - 您可以拒绝移动为非改进而无需重新计算整体目标函数。此外 - 一旦你接受改进,你就可以更新整体目标函数,而无需重新计算。

我对使用相关性作为相似性度量的想法感到非常不舒服,因为相关性已经签署。如果使用目前的方法无法获得良好的结果,也许最大限度地减少相关性,可以尝试最小化相邻矢量之间的平方距离。