前提・実現したいこと
三次元画像のPSNR値を計算したいとおもっています.
以下のソースコードをmatlabを用いて実行しました.
計算結果がマイナスの値をとってしまいました.
三次元の画像にmatlabのpsnrの関数を直接使っても計算できないのでしょうか.
どうかご教授お願いします.
該当のソースコード
A=niftiread('A.nii'); ref=niftiread('ref.nii'); peaksnr=psnr(A,ref);
試したこと
matlabのpsnrの関数を用いて計算してみた.
https://jp.mathworks.com/help/images/ref/psnr.html
に「任意の次元の数値配列」と書かれてるから、3次元でも大丈夫なはず
上記の「アルゴリズム」の式を見ると、peakval^2<MSE の場合に log10 が負になりますね
peakval が適切な値ではなく、小さすぎるとそうなります
peakval を、データフォーマット上の正しい最大値に指定してみたら、いかがでしょうか?
正しく計算することができました.
ありがとうございます.
A.nilとかref.nilとかのファイルに実際入っている値の最大値ではなく、扱っているファイルのフォーマット上の最大値です
NIfTIイメージというものはよく知らないのですが、格納できる値の最大値は決まってないのですか?
たとえば、普通の2次元の8bit画像(たいていのJPEGとかPNGとか)は、符号無し8bitだから2^8-1=255が最大値です
実際の特定の画像ファイル内の値の最大値を調べたら、255までないかもしれないけど、そんなの関係ありません
フォーマット上は255まで可能なのだから、その場合は255になります
NIfTIイメージで、それに該当するもの
回答1件
あなたの回答
tips
プレビュー