Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 如何使用Matlab重新缩放灰度三维图像(x、y、z)的强度范围_Image_Matlab_Image Processing_3d - Fatal编程技术网

Image 如何使用Matlab重新缩放灰度三维图像(x、y、z)的强度范围

Image 如何使用Matlab重新缩放灰度三维图像(x、y、z)的强度范围,image,matlab,image-processing,3d,Image,Matlab,Image Processing,3d,我在网上找不到有关由多个2D图像组成的3D图像的强度重缩放的信息 我正在寻找与imadjust相同的函数,它只适用于二维图像 我的3D图像是叠加在一起的2D图像的组合,但我必须逐个处理3D图像,而不是2D图像 我不能循环调整,因为我想把图像处理成一个,考虑所有方向的所有信息。 对于将整个值考虑在内的2D灰度图像集应用imadjust,此技巧可能有效 a = imread('pout.tif'); a = imresize(a,[256 256]); %// re-sizing to ma

我在网上找不到有关由多个2D图像组成的3D图像的强度重缩放的信息

我正在寻找与
imadjust
相同的函数,它只适用于二维图像

我的3D图像是叠加在一起的2D图像的组合,但我必须逐个处理3D图像,而不是2D图像


我不能循环调整,因为我想把图像处理成一个,考虑所有方向的所有信息。 对于将整个值考虑在内的2D灰度图像集应用

imadjust
,此技巧可能有效

a = imread('pout.tif');  
a = imresize(a,[256 256]);   %// re-sizing to match image b's dimension
b = imread('cameraman.tif');

Im = cat(3,a,b);     
%//where a,b are separate grayscale images of same dimensions
%// if you have the images separately you could edit this line to
%// Im = cat(2,a,b);
%// and also avoid the next step

%// reshaping into a 2D matrix to apply imadjust
Im = reshape(Im,size(Im,1),[]);

out = imadjust(Im);     %// applying imadjust

%// finally reshaping back to its original shape
out = reshape(out,size(a,1),size(a,2),[]);  
检查:

x = out(:,:,1);
y = out(:,:,2);
从工作区图像中可以看到,第一个图像(变量
x
)没有重新缩放到
0-255
,因为其先前的范围(变量
a
)不在0点附近

工作区:


编辑:您可以像这样一步一步地完成这项工作:(如另一个答案所示)

Edit2:

x = out(:,:,1);
y = out(:,:,2);
由于在
I2
中有图像作为单元格数组,请尝试以下操作:

I2D = cat(2,I2{:})

对3D图像执行此操作的唯一方法是将数据视为向量,然后重新塑形

大概是这样的:

%create a random 3D image.
x = rand(10,20,30);

%adjust intensity range
x_adj = imadjust( x(:), size(x) );

也许我不清楚,我说的3D是指三维(x,y,z),而不是RGB。我有一个灰度三维图像。@Sarahdata我不明白,你是说你有一堆灰度图像叠加在一起形成一个三维矩阵?你为什么不把它循环一下呢?没错,我把2D图像连接在一起形成3D图像。我不能循环调整,因为我想把图像处理为一个,考虑所有可用的信息,在各个方向。你觉得怎么样?@Sarahdata这是个好问题。。你可能需要修改你的问题来澄清这一点。。还可以看到编辑,如果对你有用的话好吧,我不知道
size
是一个函数,我以为它是重塑函数的一个参数。然后,对于3D中2D矩阵的重塑,应为
重塑(out,size(a,1),size(a,2),[]
而不是
重塑(out,size(a,1),size(a,1),[]
不是吗?这不重要,因为nrow=ncol,但仍然…检查编辑…我的解决方案对你有用吗?是的,我看到了你的编辑,我修改了一两句话。我找不到直接根据你的建议编辑我的问题的功能…因为我想这确实会让你赢得声誉?哈哈!实际上我指的是编辑to我的答案..对你有用吗?你试过了吗?尝试新的编辑..还要确保所有图像的尺寸都相同(至少行数)正如我之前猜到的,这是一个巨大的数据量。可能会将其作为一个新问题发布,并使用您已有的代码标记“内存”、“性能等”。这可能会吸引许多有潜力找到此问题替代解决方案的用户。祝您好运:)