我写了一个函数,它应该返回给定簇中一组像素的R,G,B分量的方差
def RGB_variance(img, density):
R_total = 0
G_total = 0
B_total = 0
N = len(density)
for pixel in density:
x = pixel[0]
y = pixel[1]
R_total += img[x][y][0]
G_total += img[x][y][1]
B_total += img[x][y][2]
R_mean, G_mean, B_mean = R_total/N, G_total/N, B_total/N
R_sum = 0
G_sum = 0
B_sum = 0
means = [R_mean, G_mean, B_mean]
sums = [R_sum, G_sum, B_sum]
for pixel in density:
x = pixel[0]
y = pixel[1]
for i in range(0,3):
sums[i] += (img[x][y][i] - means[i])**2
variances = {
"R_variance":sums[0]/N,
"G_variance":sums[1]/N,
"B_variance":sums[2]/N,
}
return variances
这些照片显示了我正在处理的区域和相应的像素:
https://i.ibb.co/djd1b97/1.png
https://i.ibb.co/NxkX703/1.png
我得到的结果是,它并不完全正确:
{'R_variance': 71.56184661531957, 'G_variance': 91.47570122951443, 'B_variance': 521.035179427894}
当B分量的值范围为范围(0255)时,它的方差怎么可能是521
嗯,方差可以大于值的范围。下面是一个例子:
方差高于数据可以采用的最大值。也许你想要的是standard deviation,它是方差的平方根
相关问题 更多 >
编程相关推荐