import numpy as np
import matplotlib.image as img;
C = 1.0-np.mean(img.imread('circle.png'),axis=2);
C /= np.sum(C);
图像有256×256像素。得到的数组C
似乎是一个包含每个像素的概率的256×256数组(颜色、深度,我不知道概率是多少,因为我不知道matplotlib.image.imread
做什么。
我理解第4行代码是指概率值(由它们的和归一化的真实数据,使它们之和为1),但是在图像上下文内外,代码第3行上的公式的含义是什么,即统计直觉?
最后,我想将上面的概率转换应用于单个时间序列的实际数据,所以我想知道公式1.0-np.mean()
是否仍然适用于我的(非计算机视觉,但分布的)应用程序。
发布于 2020-12-04 15:06:29
图像包含像素。
图像可以有一个颜色通道(灰度)或多个(红、绿、蓝).
“深度”是描述像素值的梯度的术语。8位是常见的,这意味着每个通道2^8 =256个不同级别,或256^3 =1670万种不同颜色。有一点是黑白的。先进的相机和扫描仪可能有10,12,或更多的深度。
我看不出有什么可能发生。
img.imread('circle.png')
读取图像。您将得到一个数字数组的形状(height, width, 3)
,因为图像很可能是在颜色。第三维空间(维数2)表示每个像素的颜色通道。我猜这个例程以浮点值的形式加载图像,范围为0.0到1.0。
np.mean(..., axis=2)
获取每个像素的所有颜色通道的平均值。它沿轴2(第三个)进行平均/平均计算,其中包含每个像素的颜色值。该数组的形状将是(height, width)
,并将输入图像表示为灰度。颜色的权重有一点问题。通常,绿色通道得到更多的重量(最亮),而蓝色通道得到较少的重量(最黑暗)。
C = 1.0- ...
倒置图片。
np.sum(C)
简单地总结了C的所有灰度像素,你将得到图片的整体亮度的度量。
C /= np.sum(C)
除以亮度度量。你会得到一个标准化的亮度图片。有一个因素,图像的大小(宽度*高度)缺失,因此这些值将非常小(昏暗)。
用这个代替(平均值而不是和)来调整强度值,使其平均为0.5 (灰色)。
C /= np.mean(C) # now 1.0 on average
C *= 0.5
# or just C *= 0.5 / np.mean(C)
https://stackoverflow.com/questions/65143485
复制相似问题