我对图像标准化、图像范围和图像缩放感到非常困惑。我正在使用一种算法(我已在上一个问题中上传了该算法),在应用该算法后,我使用维基百科中的这个公式来规范化图像:
使用getrangefromclass(filtImag1{i})
MATLAB,应用算法之前的矩阵范围是 [0 255],应用算法之后的范围是 [0 1]。
问题是我需要找到一个参考来确定归一化公式是否正确?我也有 5 叠图像,每叠包含 600 张图像。我已经为每个堆栈应用了算法,因为算法的结果是每个堆栈有 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}(:)); 对于 i=1:40 newMax = max(sTStack{i}(:)); 如果(pre_max
pre_min = min(sTStack{1}(:)); 对于 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); 结尾
对于 i=10:10:40 图,imshow(NTstack{i}); colorbar 颜色图喷射端