计算方差的算法不正常工作

2024-04-20 12:12:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个函数,它应该返回给定簇中一组像素的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


Tags: inimgfor像素meandensitymeans分量