如果我们在噪声和图像之间做点积,是否有可能反转图像?

Is it possible to reverse an image if we did a dot product between noise and the image?

提问人:Nirajan 提问时间:4/25/2022 更新时间:4/26/2022 访问量:225

问:

我做了图像的点积,并带有噪点。

将 numpy 导入为 np
np.random.seed(100) x = grayscale.shape[0] y = grayscale.shape[1]

noise = np.random.rand(x,y) noise_dot_img = grayscale.dot(noise) plt.imshow(noise_dot_img, cmap = “gray”)



图像有噪点

原始图像

蟒蛇 numpy

评论

0赞 Elmar Zander 4/26/2022
请停止使用 Lena 图像进行图像处理示例。例如,参见 womenlovetech.com/...

答:

0赞 Stanley 4/25/2022 #1

对于可怕的格式,我们深表歉意,但堆栈溢出不支持乳胶。

两个向量之间的点积(如果它们是 NxM 矩阵,您可以删除转置,因为矩阵之间的点积定义为 numpy 中的矩阵乘法)A 和 B 是 A 点 B = AB^T

如果 A 是原始图像,B 是噪声矩阵,则可以通过将最终图像矩阵乘以 B^T 的倒数(如果有的话)来反转它,因为矩阵乘法是关联的。

因此,要得到原始矩阵 A = A 点 B * (B^T)^-1

编辑:为了清楚起见,这里有一些示例代码:

import numpy as np

A = np.random.randint(10, size=(3, 3))
B = np.random.randint(10, size=(3, 3))

image_with_noise = A.dot(B)
noise_inverse = np.linalg.inv(B)
recreated_image = np.matmul(image_with_noise, noise_inverse)
0赞 Nikolas 4/26/2022 #2

我认为你应该分享一些关于你在这里想要实现的目标的更多信息。

无论如何,在这个特定示例中,您实际上可以通过反转噪声矩阵并乘以噪声图像来恢复图像:

inv = np.linalg.inv(noise)
restored_img = noise_dot_img@inv

但是,有很多事情需要解释。总的来说,这并不是我们解决这个问题的真正方式,因为我们几乎从来不知道“噪声”矩阵。这就是信号处理存在的原因。此外,在此示例中,您正在处理一个方形图像。否则,我们将无法找到逆函数(我们将不得不使用伪逆函数)。也就是说,在决定反转矩阵之前,应该始终小心。