【问题标题】:How to calculate mean and standard deviation for hue values from 0 to 360?如何计算从 0 到 360 的色调值的平均值和标准偏差?
【发布时间】:2011-12-31 11:07:23
【问题描述】:

假设使用简单的 HSV 颜色模型获取 5 个色相样本,其值分别为 355、5、5、5、5,就感知而言,所有色相都是红色并且彼此“相邻”。但是简单的平均值是75,离0或360很远,接近黄绿色。

计算这个平均值和相关标准的更好方法是什么?

【问题讨论】:

  • 在与 Google 进行了相当多的挖掘之后,从一篇实际讨论平均风向的帖子中找到了指向 stackoverflow 的链接:stackoverflow.com/questions/491738/… 但它并没有解决标准偏差的问题。
  • 一旦你得到一个你满意的平均值,你就可以从平均偏差中计算出标准偏差,对吧?
  • @AakashM,我仍在努力解决这个问题。我知道代码。统计数据我有点模糊。
  • 在我看到试图回答这个问题的几个网站上,我还看到人为的数据集,例如 270 和 90 的两个条目,然后说平均值没有意义。为了避免这种情况,这是一个小型的实际值样本,我正在工作:(天真的平均值和STD是:185.658 174.848)347.059 0 359.059 347 354.05 353.012 13.012 358.118 8.06723 354.118 0.96742 0.97561 351.074 8.098 0.941176 1.098 0.0824 346.098 0.941176 1.93227 359.059 1.88235 358.088 0.97166 0.983607 354.958
  • 哦,好吧,我明白了。计算标准差给定平均值,请遵循例如these instructions(警告:Comic Sans:p)

标签: colors statistics hue


【解决方案1】:

简单的解决方案是将这些角度转换为一组向量,从极坐标转换为笛卡尔坐标。

由于您正在使用颜色,因此可以将其视为向 (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

是的,这需要我明确地进行包装。

【讨论】:

  • 谢谢。是的,标准偏差计算必须始终考虑包裹,无论是在 0,红色,度数或 Pi 和负 Pi,蓝绿色,弧度。除了 std 之外,还存在用于表征循环数据的方法。请参阅上面的链接。
【解决方案2】:

我认为 user85109 提出的方法是计算均值的好方法,但不是标准差: 想象有三个角度:180、180、181

平均值将被正确计算为大约等于 180 的数字

但是从 [180,180,-179] 你会计算出一个高方差,而实际上它接近于零

乍一看,我会分别计算半正角 [0 到 180] 和负角 [0,-180] 的均值和方差,然后我会计算组合方差 https://www.emathzone.com/tutorials/basic-statistics/combined-variance.html

考虑到全局均值及其与局部均值之间的差异必须在两个方向上计算:顺时针和逆时针方向,并且必须选择正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 2014-03-21
    • 2021-11-04
    • 1970-01-01
    • 2015-10-10
    • 2023-03-12
    相关资源
    最近更新 更多