微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决总数在对像素位置进行混洗后可能的新图像中,所有这些可能的新图像的平均欧几里得距离是多少?

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

解决方法

这里假设图像的尺寸为 2000x2000 ,所以总像素数为 4M(这里大写 M 表示百万)。所以如果我们认为图像在 4M 维的潜在空间中,它在这里是单个向量。现在在那些 2M 中的值为 0(因为有黑色,并且假设黑色的值为 0),其余 2M 的值为 1(它们是白色的,因此用 1 表示)。在我们的例子中,图像“I”是一个标准图像,左半部分(前 1000 列)是白色的,右半部分(最后 1000 列)是黑色的。现在,如果我想洗牌(我们假设只有那些不同颜色的像素可以在那里互换的地方,即没有机会互换两个白色像素)那 400 万像素的位置,那么我会得到(应用理论概念组合)[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) 个值来代替 1) 向量的值,该向量具有与“I”的最小欧几里得距离(在本例中为 4M)。其他 ( [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,1,0] ,一个 4 维向量。 I_new={ [1,0],[1,[0,1],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 }

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

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

谢谢你?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。