3

角度を含む行列があり、平均と分散を計算する必要があります。私がこのように進める平均について:各角度についてsinとcosを計算し、すべてのsinとすべての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
4

4 に答える 4

4

角度の分散を計算するために、標準分散を使用することはできません。これは、角度の var を計算する公式です。

R = 1 - sqrt((sum(sin(angle)))^2 + (sum(cos(angle)))^2)/n;

同様の他の定式化もあります。

var(angle) = var(sin(angle)) + var(cos(angle));

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

于 2015-08-21T04:05:43.497 に答える
3

私はあなたが何をしているのか100%確信していませんが、MATLAB関数meanvarのビルドで同じことを達成するかもしれません。

>> [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
于 2011-02-11T13:37:02.160 に答える
3

循環データの分散は、実数直線上の無制限データの分散のように扱うことはできません。(分散が非常に小さい場合、それらは事実上同等ですが、分散が大きい場合、同等性は崩壊します。これがなぜであるかは明らかです。)NIフィッシャーによる循環データの統計分析をお勧めします。この本には、角度に対応する単位ベクトルの平均合成長から計算される、広く使用されている循環分散の定義が含まれています。

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

間違っている。そのような角度を引くことはできません。

ちなみに、この質問は実際にはMATLABとは何の関係もありません。あなたはおそらく統計スタック交換に投稿するより多くの/より良い答えを得ることができます

于 2011-02-12T03:48:20.957 に答える