No.15611 Rで2画像間の相関係数を計算する方法?  【ひろ】 2011/11/01(Tue) 16:14

いつも参考にしています。

Rで2画像間の相関係数を計算する方法を教えてください。

MATLABには,以下のような関数があるそうです。

2次元相関係数
構文
r = corr2(A,B)
説明
r = corr2(A,B) は A と B の間の相関係数を計算します。ここで,A と B は同じサイズの行列またはベクトルです

どうぞよろしくお願いします。

No.15616 Re: Rで2画像間の相関係数を計算する方法?  【青木繁伸】 2011/11/01(Tue) 20:58

情報がほとんどないですね。
R でやるにしても,MATLABでどのようなプログラムになっているのか詳細が分からないので代替プログラムを書くのも難儀です。
MATLABでおやりになるのが無難。
B = mean2(A) computes the mean of the values in A.
とか,mean2 を使っている,以下の定義式では曖昧すぎて,プログラムを書くに至らない。


No.15618 Re: Rで2画像間の相関係数を計算する方法?  【ひろ】 2011/11/02(Wed) 08:41

青木先生,回答して頂きありがとうございます。

画像処理関係の参考書や文献などをも勉強してみます。

No.15636 Re: Rで2画像間の相関係数を計算する方法?  【ひろ】 2011/11/08(Tue) 13:34

その後,色々と調査して解決できたので,投稿させていただきます。

Octaveというフリーソフトで計算できました。結果もMATLABと同じでした。ただし,どういうわけか,MATLABのように読み込んだ画像をそのまま計算に利用できない。以下は実行例です。

>a=double(imread("1.jpg"));
>a=a/255;
>b=double(imread("2.jpg"));
>b=b/255;
>corr2(a,b)
ans=0.55684
>corr2(a,a)
ans=1.0000
>corr2(b,b)
ans=1.0000

参考になれば。

No.15642 Re: Rで2画像間の相関係数を計算する方法?  【青木繁伸】 2011/11/10(Thu) 18:37

Octave の corr2 のプログラムソースを見て,ガックリ。
画像の相関係数とあるので,よほど特殊なことをしているのかと思いきや,画像ファイルのピクセル値を実数行列と見て,単に,行列をベクトルに展開して,普通の相関係数を求めているだけですね。実際に,比較して一致することを確認しました。
計算しているのが,
r = cov (I (:), J (:)) / (std2 (I) * std2 (J));
という情報は,前にも見ていたけど,I(:) が何か分からなかった。何のことはない,これが行列をベクトルと見ることなのだった。R で言えば as.vector(I) のこと。

> MATLABのように読み込んだ画像をそのまま計算に利用できない。

のは,corr2 以前の問題。

No.15662 Re: Rで2画像間の相関係数を計算する方法?  【ひろ】 2011/11/14(Mon) 17:26

青木先生,いつもありがとうございます。

先生のご指摘通り,MATLABもOctaveもRも同じ結果でした。さすが,Rだ!

● 「統計学関連なんでもあり」の過去ログ--- 045 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る