【发布时间】:2012-06-26 02:15:25
【问题描述】:
我对图像标准化、图像范围和图像缩放感到非常困惑。 我正在使用一种算法(我已在我的Previous Question 中上传了该算法),在应用该算法后,我使用wikipedia 中的这个公式来规范化图像:
使用 MATLAB 中的getrangefromclass(filtImag1{i}),应用算法前的矩阵范围为 [0 255],应用算法后的矩阵范围为 [0 1]。
问题是我需要找到一个参考来确定归一化公式是否正确?我也有 5 叠图像,每叠包含 600 张图像。我已经为每个堆栈应用了算法,因为算法的结果是每个堆栈有 10 张图像,所以我最终需要对 50 张图像进行分析和比较。我找到了 50 个图像的最大值和最小值,然后将每个图像传递到公式中以对图像进行归一化。
虽然图像的范围是 [0 1] 但图像的最大值是: 最大值 = 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}(:)); 如果(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}); 彩条 彩色图喷射 结束
【问题讨论】:
-
你的代码在哪里?别人怎么能不看你的所作所为就回答你的问题?
-
@EitanT 我已经在stackoverfow的上一个链接中上传了它:stackoverflow.com/questions/10863734/…
-
@user261002 看起来您没有在规范化代码中使用 pre_max 或 pre_min 。这是故意的吗?
标签: matlab image-processing normalization