如何使用Matlab

时间:2015-05-12 05:03:25

标签: image matlab image-processing 3d

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

我正在寻找与imadjust相同的功能,该功能仅适用于2D图像。

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

我无法循环imadjust,因为我想将图像处理为一个,以便在所有方向上考虑所有可用信息。

2 个答案:

答案 0 :(得分:4)

对于将imadjust应用于考虑整个值的2D灰度图像集,这个技巧可能会起作用

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分。

工作空间:

enter image description here

修改:你可以像这样一步完成这个过程:(正如另一个答案所示)

%// reshaping to single column using colon operator and then using imadjust
%// then reshaping it back
out = reshape(imadjust(Image3D(:)),size(Image3D));

<强> EDIT2:

由于您在I2中将图像作为单元格数组,请尝试以下操作:

I2D = cat(2,I2{:})

答案 1 :(得分:0)

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

这样的事情:

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

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