Matlab дисперсия углов - PullRequest
       59

Matlab дисперсия углов

2 голосов
/ 11 февраля 2011

У меня есть матрица, содержащая углы, и мне нужно вычислить среднее значение и дисперсию.для среднего значения я поступаю следующим образом: для каждого угла вычисляю sin и cos и суммируем все sin и all cos среднее значение задается atan2 (sin, cos), и оно работает, поэтому мой вопрос заключается в том, как вычислить дисперсию углов, знаязначит?

спасибо за ответы

Я прилагаю свой код Matlab:

for i=1:size(im2,1)

    for j=1:size(im2,2)
        y=y+sin(hue(i, j));
        x=x+cos(hue(i, j));
    end
end
mean=atan2(y, x);

if mean<0

    mean=mean+(2*pi);
end

Ответы [ 3 ]

3 голосов
/ 21 августа 2015

Для вычисления дисперсии угла нельзя использовать стандартную дисперсию.Это формулировка для вычисления var углов

R = 1 - sqrt ((sum (sin (angle))) ^ 2 + (sum (cos (angle))) ^ 2) / n;Аналогична и другая формулировка: var (угол) = var (sin (угол)) + var (cos (угол));

Ref: http://www.ebi.ac.uk/thornton-srv/software/PROCHECK/nmr_manual/man_cv.html

3 голосов
/ 11 февраля 2011

Я не уверен на 100% в том, что вы делаете, но, возможно, это позволит добиться того же с помощью встроенных в MATLAB функций означает и var .

>> [file path] = uigetfile;
>> someImage = imread([path file]);
>> hsv = rgb2hsv(someImage);
>> hue = hsv(:,:,1);
>> m = mean(hue(:))

m =

    0.5249

>> v = var(hue(:))

v =

    0.2074

РЕДАКТИРОВАТЬ: я предполагаю, что у вас есть изображение из-за имени вашей переменной hue. Но это было бы то же самое для любой матрицы.

РЕДАКТИРОВАТЬ 2: Может быть, это то, что вы ищете:

>> sumsin = sum(sin(hue(:)));
>> sumcos = sum(cos(hue(:)));
>> meanvalue = atan2(sumsin,sumcos)

meanvalue =

    0.5276

>> sumsin = sum(sin((hue(:)-meanvalue).^2));
>> sumcos = sum(cos((hue(:)-meanvalue).^2));
>> variance = atan2(sumsin,sumcos)

variance =

    0.2074
2 голосов
/ 12 февраля 2011

Дисперсия круговых данных не может рассматриваться как дисперсия неограниченных данных на реальной линии. (Для очень маленьких отклонений они фактически эквивалентны, но для больших отклонений эквивалентность нарушается. Вам должно быть понятно, почему это так.) Я рекомендую Статистический анализ круговых данных по N.I. Фишер. Эта книга содержит широко используемое определение круговой дисперсии, которое вычисляется из средней результирующей длины единичных векторов, соответствующих углам.

>> sumsin = sum(sin((hue(:)-meanvalue).^2));
>> sumcos = sum(cos((hue(:)-meanvalue).^2));

неправильно. Вы не можете вычитать такие углы.

Кстати, этот вопрос действительно не имеет ничего общего с MATLAB. Вы, вероятно, сможете получить больше / лучше ответов, разместив статистический обмен *1009*

...