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之间的双精度图像。我在问题的第二部分中犯了一个错误,我已经删除了。答案的第一部分(通缉犯)仍然有效。