重新排列像素以共同定位相关像素
Rearranging pixels to co-locate correlated pixels
假设我们有一个二维灰度像素阵列。当我们遍历大量图像时,我们发现每个像素与所有其他像素都有一定程度的相关性 - 在所有图像中,某些像素子集往往彼此同时“开启”。我将如何通过算法重新排列像素的位置,以便彼此相关的像素在图像中也彼此靠近?
下面是我想做的事情的直观描述(尽管技术上可能不准确)。想象一下,相似颜色的像素在所有图像中都是相关的。我们想要重新排列像素的位置,以便这些相关像素位于网格上:
我试过遗传算法;适应度函数考虑了两个像素之间的欧氏距离及其相关性。但是对于我的应用程序来说太慢了,我觉得他们应该是一种更优雅的方法。
如有任何想法,我们将不胜感激。
这是我对你的问题的表述:你有一个二维向量数组,这些向量之间存在相关性。你想重新排列数组,使彼此高度相关的向量靠得很近。据推测,问题在于任何涉及遍历整个数组的 objective 函数都太昂贵而无法与遗传算法一起使用。
这是一个想法:决定一个单元格的邻域概念(数组中的位置)。我会选择离散而不是欧几里得,因为计算开销更少。也许一个细胞的邻域就是它自己和它的直接邻居——但你可以走得更远。重要的是与整个阵列相比,保持邻域较小。对于每个邻域——计算该邻域中向量之间的平均相关性。将其视为本地 objective 函数。总体 objective 函数可以通过对这些较小的 objective 函数的值求和或求平均值来获得。
使用某种爬山方法(或者可能是模拟退火或禁忌搜索),它涉及对单个数组进行局部更改,而不是维护整个数组。使用由交换两个条目组成的本地更改(并且还尝试诸如排列元素的三元组之类的事情)。一个关键的见解是,这样的本地更改仅涉及更改这些本地 objective 函数中的一小部分。特别是——你可以拒绝一个没有改进的举动,而不必重新计算整个 objective 函数。此外——一旦你接受了一个进步,你就可以更新整个 objective 函数,而不必重新计算太多。
我对使用相关性作为相似性度量的想法隐约感到不舒服,因为相关性是有符号的。如果你不能用你目前的方法得到好的结果,也许你可以尝试最小化相邻向量之间的平方距离,而不是最大化相关性。
假设我们有一个二维灰度像素阵列。当我们遍历大量图像时,我们发现每个像素与所有其他像素都有一定程度的相关性 - 在所有图像中,某些像素子集往往彼此同时“开启”。我将如何通过算法重新排列像素的位置,以便彼此相关的像素在图像中也彼此靠近?
下面是我想做的事情的直观描述(尽管技术上可能不准确)。想象一下,相似颜色的像素在所有图像中都是相关的。我们想要重新排列像素的位置,以便这些相关像素位于网格上:
我试过遗传算法;适应度函数考虑了两个像素之间的欧氏距离及其相关性。但是对于我的应用程序来说太慢了,我觉得他们应该是一种更优雅的方法。
如有任何想法,我们将不胜感激。
这是我对你的问题的表述:你有一个二维向量数组,这些向量之间存在相关性。你想重新排列数组,使彼此高度相关的向量靠得很近。据推测,问题在于任何涉及遍历整个数组的 objective 函数都太昂贵而无法与遗传算法一起使用。
这是一个想法:决定一个单元格的邻域概念(数组中的位置)。我会选择离散而不是欧几里得,因为计算开销更少。也许一个细胞的邻域就是它自己和它的直接邻居——但你可以走得更远。重要的是与整个阵列相比,保持邻域较小。对于每个邻域——计算该邻域中向量之间的平均相关性。将其视为本地 objective 函数。总体 objective 函数可以通过对这些较小的 objective 函数的值求和或求平均值来获得。
使用某种爬山方法(或者可能是模拟退火或禁忌搜索),它涉及对单个数组进行局部更改,而不是维护整个数组。使用由交换两个条目组成的本地更改(并且还尝试诸如排列元素的三元组之类的事情)。一个关键的见解是,这样的本地更改仅涉及更改这些本地 objective 函数中的一小部分。特别是——你可以拒绝一个没有改进的举动,而不必重新计算整个 objective 函数。此外——一旦你接受了一个进步,你就可以更新整个 objective 函数,而不必重新计算太多。
我对使用相关性作为相似性度量的想法隐约感到不舒服,因为相关性是有符号的。如果你不能用你目前的方法得到好的结果,也许你可以尝试最小化相邻向量之间的平方距离,而不是最大化相关性。