画像の正規化、画像の範囲、および画像のスケーリングと混同しています。私はアルゴリズムを使用しています(前の質問でアルゴリズムをアップロードしました)。アルゴリズムを適用した後、ウィキペディアの次の式を使用して画像を正規化しています。
MATLAB から使用getrangefromclass(filtImag1{i})
すると、アルゴリズムを適用する前の行列の範囲は [0 255] であり、アルゴリズムを適用した後の範囲は [0 1] です。
問題は、正規化式が正しいかどうかを調べるために参照を見つける必要があることです。また、それぞれ600枚の画像を含む5つの画像スタックがあります。スタックごとにアルゴリズムを適用しました。アルゴリズムの結果はスタックごとに 10 個の画像であるため、最終的には 50 個の画像を分析して比較する必要があります。50 個の画像の最大値と最小値を見つけ、各画像を式に渡して画像を正規化します。
画像の範囲は [0 1] ですが、画像の最大値は max = 3.6714e+004 です。
なぜ?1でいいんじゃない?これは正規化の正しい方法ですか?スケーリングを適用するにはどうすればよいですか? 私はそれをする必要がありますか?
正規化コードは次のとおりです。
%%%%%%%%%%%%%%Find Min and Max between the results%%%%%%%%%%%%%%%%%%%%%%%
pre_max = max(filtImag1{1}(:));
for i=1:10
new_max = max(filtImag1{i}(:));
if (pre_max<new_max)
pre_max=max(filtImag1{i}(:));
end
end
new_max = pre_max;
pre_min = min(filtImag1{1}(:));
for i=1:10
new_min = min(filtImag1{i}(:));
if (pre_min>new_min)
pre_min = min(filtImag1{i}(:));
end
end
new_min = pre_min;
%%%%%%%%%%%%%%normalization %%%%%%%%%%%%%%%%%%%%%%%
for i=1:10
temp_imag = filtImag1{i}(:,:);
x=isnan(temp_imag);
temp_imag(x)=0;
t_max = max(max(temp_imag));
t_min = min(min(temp_imag));
temp_imag = (double(temp_imag-t_min)).*((double(new_max)-double(new_min))/double(t_max-t_min))+(double(new_min));
imag_test2{i}(:,:) = temp_imag;
end
編集 提案された回答に基づいてコードを変更しましたが、結果は黒い画像です
%それらの間の最大値と最小値を見つけます pre_max = max(sTStack{1}(:)); for i=1:40 newMax = max(sTStack{i}(:)); if (pre_max
pre_min = min(sTStack{1}(:)); for i=1:40 newMin = min(sTStack{i}(:)); if (pre_min>newMin) pre_min = min(sTStack{i}(:)); 終了終了t_min = pre_min;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%
i=1:40 の場合 NTstack{i} = (sTStack{i} - t_min)/(t_max-t_min); 終わり
for i=10:10:40 figure,imshow(NTstack{i}); カラーバー カラーマップ ジェットエンド