假设使用简单的HSV模型获取5个色调样本,其值为355,5,5,5,5,就感知而言,所有色调均为红色并且彼此“相邻”。但简单的平均值是75,远离0或360,接近黄绿色。
有什么更好的方法来计算这个均值和相关的std?
答案 0 :(得分:10)
简单的解决方案是将这些角度转换为一组矢量,从极坐标到笛卡尔坐标。
由于您正在使用颜色,因此将其视为转换为(a *,b *)平面。然后取这些坐标的平均值,然后再次恢复为极坐标形式。在matlab中完成,
theta = [355,5,5,5,5];
x = cosd(theta); % cosine in terms of degrees
y = sind(theta); % sine with a degree argument
现在,取x和y的平均值,然后计算角度 从弧度转换回度数。
meanangle = atan2(mean(y),mean(x))*180/pi
meanangle =
3.0049
当然,此解决方案仅适用于平均角度。正如你所看到的,它直接与角度的平均值产生一致的结果,在那里我认识到355度真的包裹到-5度。
mean([-5 5 5 5 5])
ans =
3
要计算标准偏差,最简单的方法是
std([-5 5 5 5 5])
ans =
4.4721
是的,这要求我明确地进行包装。
答案 1 :(得分:0)
我认为user85109提出的方法是一种计算平均值的好方法,而不是标准差: 想象有三个角度:180、180、181
可以正确计算平均值,因为它的数值大约等于180
但是从[180,180,-179]中,您会计算出高方差,而实际上它接近零
乍一看,我将分别计算半个正角[0到180]的均值和方差,然后计算负数[0,-180]的均值和方差,然后我将计算组合的方差 https://www.emathzone.com/tutorials/basic-statistics/combined-variance.html
考虑到必须在顺时针和逆时针两个方向上计算全局平均值以及它与局部平均值之间的差,并且必须选择正确的平均值。