Image im2double()的行为是否与MATLAB中大尺寸数组的double()类似?

Image im2double()的行为是否与MATLAB中大尺寸数组的double()类似?,image,matlab,image-processing,matrix,Image,Matlab,Image Processing,Matrix,我的代码是从文件中获取图像,并将图像转换为矢量形式 directory = 'C:\Users\Guest\Desktop\FaceRecog\TrainingSet\'; images = dir(strcat(directory,'*.bmp')); lengthOfFile = length(images); [m,n] = size(imread(strcat(directory,images(1).name))); vectorDim = m*n; Subjects = zeros(

我的代码是从文件中获取图像,并将图像转换为矢量形式

directory = 'C:\Users\Guest\Desktop\FaceRecog\TrainingSet\';
images = dir(strcat(directory,'*.bmp'));
lengthOfFile = length(images);
[m,n] = size(imread(strcat(directory,images(1).name)));
vectorDim = m*n; 
Subjects = zeros(vectorDim,lengthOfFile);

for i=1:lengthOfFile
   imagePath = strcat(directory,images(i).name);
   Temp = reshape(imread(imagePath),[],1);
   Subjects(:,i)=Temp;
end

DblInxSubj = im2double(Subjects); 
Matlab Variables area显示DblInxSubj矩阵77760*40的大小和双类型逻辑正确,并且与我的计算有关,但当我打印该矩阵的一部分DblInxSubj1时,Matlab打印的数字范围为0-255,而不是0-1

最后,im2Double无法转换更大尺寸的数组

for i=1:lengthOfFile
  imagePath = strcat(directory,images(i).name);
  Temp = reshape(imread(imagePath),[],1);
   Subjects(:,i)=Temp;
end
当我更改语句主题时:,i=Temp;作为受试者:,i=im2DoubleTemp;我得到了0-1范围内正确的矩阵索引值。我不知道具体的区别在哪里?

double和im2double之间的区别是double将数字转换为double类型,因此

但是im2double将典型的整数图像范围0-255转换为典型的双图像范围0-1。因此

im2double(uint8(8))
> 0.0314
但要小心!!如果图像已经是double,那么它将返回相同的值,因为将double图像转换为double对它没有任何作用

im2double(8)
> 8
double和im2double的区别在于double将数字转换为double类型,因此

但是im2double将典型的整数图像范围0-255转换为典型的双图像范围0-1。因此

im2double(uint8(8))
> 0.0314
但要小心!!如果图像已经是double,那么它将返回相同的值,因为将double图像转换为double对它没有任何作用

im2double(8)
> 8

@Moustafa51我无法运行您的第一个代码,所以我认为它应该可以工作。如果你想让我试试的话,就发一张MCVE。好的,谢谢,我注意到当我声明零矩阵主题为双重类型时,并没有从Temp矩阵获取索引为uint8类型!感谢you@Moustafa51我不能运行你的第一个代码,所以我认为它应该可以工作。如果你想让我试试的话,就发一张MCVE。好的,谢谢,我注意到当我声明零矩阵主题为双重类型时,并没有从Temp矩阵获取索引为uint8类型!非常感谢。