Matlab 规范化imadjust的值

Matlab 规范化imadjust的值,matlab,image-processing,Matlab,Image Processing,我正在尝试使用imadjust,为此,我必须将图像(灰度图像)中的值规格化为0~1。我尝试了以下方法: 要获取最小/最大值,请执行以下操作: minValue = min(I(:)); maxValue = max(I(:)); 然后我尝试在某些方面使用imadjust: Iadjusted = imadjust(I,[lowestValue/highestValue; highestValue/highestValue] ,[0 1]); Iadjusted = imadjust(I,[lo

我正在尝试使用
imadjust
,为此,我必须将图像(灰度图像)中的值规格化为0~1。我尝试了以下方法:

要获取最小/最大值,请执行以下操作:

minValue = min(I(:));
maxValue = max(I(:));
然后我尝试在某些方面使用
imadjust

Iadjusted = imadjust(I,[lowestValue/highestValue; highestValue/highestValue] ,[0 1]);
Iadjusted = imadjust(I,[lowestValue/255; highestValue/255] ,[]);
Iadjusted = imadjust(I,[double(lowestValue/highestValue); double(highestValue/highestValue)] ,[]);

但没有一个成功。每个都显示错误/显示原始图像,没有任何更改。当我显示最小/最大值时,结果是正确的,但当我试图显示为标准化时,它总是显示0或1。我做错了什么?

在MATLAB中,默认情况下,图像是使用uint8存储的,因此在[0 1]中只能有两个整数(即0和1)。要在之间执行所需操作并获得范围为[0,1]的图像,必须使用双精度

因此,如果要使用imadjust:

I = double(I)/255; 
J = imadjust(I,[min(I(:)); max(I(:))],[0.0; 1.0]);

(Imadjust with doubles希望所有内容都在0和1之间。对于用doubles表示的图像,这通常是正确的)

此功能将信号(可以是图像)调整到范围[0,1]

function normsig = normalize(sig)
   sig = double(sig);
   normsig = (sig-min(sig(:))) / (max(sig(:))-min(sig(:))) ;
end
图像信号的用法:

img = imread('xxxx.jpg','jpg');
figure; imshow(img);
normalizedimg = normalize(img);
figure; imshow(normalizedimg);

如果需要使用
imadejust
,那么按照手册中的说明,请使用以下语法:
imadejusted=imadejust(I[minValue;maxValue],[0;1])
imadejusted=imadejust(I[minValue;maxValue],])
默认为
[0;1]
。您只是使用了错误的规范化命令。imadjust用于将图像强度修改为相同类型的图像。因此,如果您正在尝试您现在正在做的事情,您将得到一个值为0或1的图像。简单的im2double命令将生成像素值介于0和1之间的双精度图像。我在问题的第二部分中犯了一个错误,我已经删除了。答案的第一部分(通缉犯)仍然有效。