总数在改组像素位置后可能的新图像中,所有这些可能的新图像的平均欧几里得距离是多少?

Posted

技术标签:

【中文标题】总数在改组像素位置后可能的新图像中,所有这些可能的新图像的平均欧几里得距离是多少?【英文标题】:Total no. of possible new images after shuffling the pixel location , what will be the average Euclidean dist across all these possible new images? 【发布时间】:2021-06-19 03:01:41 【问题描述】:

考虑一个 1000x1000 的图像 I,其中左半部分(前 500 列)的所有像素都是白色的,而右半部分(最后 500 列)的所有像素都是黑色的。通过改组像素位置,由 I 形成相同大小的新图像 (Inew)。令 D 表示 I 和 Inew 之间的欧几里得距离。可能的 Inew 图像总数是多少?所有这些可能的 Inew 图像的 D 平均值是多少?

【问题讨论】:

【参考方案1】:

这里给定图像的尺寸为 2000x2000 ,因此总像素数为 4M(这里大写 M 表示百万)。因此,如果我们认为图像在 4M 尺寸的潜在空间中,它在这里是单个向量。现在这些 2M 的值为 0(因为有黑色,假设黑色的值为 0),其余 2M 的值为 1(它们是白色的,因此用 1 表示)。在我们的例子中,图像“I”是一个标准图像,左半部分(前 1000 列)是白色的,右半部分(最后 1000 列)是黑色的。现在,如果我想改组(我们假设只有那些不同颜色的像素可以在那里互换的地方,即没有机会互换两个白色像素)那 4M 像素的位置,那么我将得到(应用理论概念组合)[4M!]/[2M! x 2M!] 没有名为“Inew”的不同图像。所以 'Inew' 是 4M 维空间中的一组唯一向量。所以可能的 I_new 图像总数为 4M!]/[2M! x 2M!]

现在我被要求计算这些“Inew”向量与“I”向量的平均距离。

所以,可以很容易地说,在'Inew'中会有2个特殊的图像向量,其中一个与'I'相同(我们称之为'I_prime',即使它是我们也不会排除它与“I”完全相同),因此具有最小欧几里德距离(从元素角度来看,向量与“I”相同,此处欧几里德距离为零),另一个正好相反(这里相反的意思是代替 1 会有为 0 并且在每个维度中将有 1) 值与具有最小欧几里得距离(在本例中为 4M)到“I”的向量的值。而其他 ( [4M!]/[2M! x 2M!] - 2 ) 向量的距离介于这两个距离之间。

现在,我们将发现有多少种可能的组合有距离,D=(2)^(1/2)(即,有 2 个像素互换它们的值),这可以发生在 [(2M)C (1)] 多种方式(这里 (n)C(2) 表示从 n 个不同对象中选择 2 个不同对象的方式)。同样具有距离,D=(4)^(1/2) 可以以 [(2M)C(2)] 多种方式发生,依此类推,直到我们找到集合 'Inew 的图像的像素的可能组合数' 有距离,D=(4M-2)^(1/2),这可以通过 [(2M)C(2M-1)] 方式完成。

之后我们可以计算总距离并除以向量总数,我们将得到平均欧几里得距离。

这里我们将举一个 2x2 图像的简单示例: 这里, I=[1,0,1,0] ,一个 4 维向量。 I_new= [1,0,1,0],[1,1,0,0],[0,0,1,1],[0,1,0,1],[0,1,1, 0],[1,0,0,1] 总欧几里得距离 = ( d1 +d2 +d3 +d4 +d5 + d6 ) = (0+1.414+1.414+2+1.414+1.414) = 7.656 可以计算为 sum([0,1.414,2]*[1,4,1]) * 用于逐点乘法,这就是我们需要的算法 .:.平均距离= 7.656/6= 1.276 个单位

这里给出了问题的python代码,并进行了概括。

import numpy as np
import math

# we are using here images with same height and width. So, here image_dimension = n if image is of nxn dims.
# Total_vectors is a list of no of vectors having same Euclidean distances from 'I' vector.
# Total_distances is another list containing the total distance for group of vectors having same distance (accordance with the list 'Distances')
#      so, the length of these two lists are same.
def get_average_distance(image_dimension):
    no_of_pixels=int(image_dimension*image_dimension)
    m=np.int((no_of_pixels/2) + 1)
    Total_distances=[]
    Total_vectors=[]
    for i in range(m):
        vect=(math.comb(np.int(no_of_pixels/2),i))**2
        dist=round(np.sqrt(2*i), 1)
        app=round(vect * dist ,3)
        Total_distances.append(app)
        Total_vectors.append(vect)
    return round(sum(Total_distances)/sum(Total_vectors),3)

Here a clear explanation with calculation is shown with example of an image of dimension. https://github.com/mahendranandi/Nothing/blob/main/Question_2/Question_2_SUM_PROJ.ipynb

由于计算太长,我们应该寻找一些其他的方法来优化它。

?如果有什么不对的地方请告诉我。随时欢迎提出建议。

谢谢你?

【讨论】:

请分享更多细节,以便其他人可以从您的回答中学习 meta.stackexchange.com/questions/76902/…

以上是关于总数在改组像素位置后可能的新图像中,所有这些可能的新图像的平均欧几里得距离是多少?的主要内容,如果未能解决你的问题,请参考以下文章

利用视差图合成新视点

无法使用 D3 更改组元素内图例文本的 x 位置

matlab图像旋转怎么操作?

在java中可逆地改组一个int数组[重复]

如何在 MATLAB 中反转二进制图像?

对在新图像集中设置啥像素大小感到困惑