我无法在网上找到有关由多个2D图像组成的3D图像的强度重新缩放的信息。
我正在寻找与imadjust
相同的功能,该功能仅适用于2D图像。
我的3D图像是堆叠在一起的2D图像的组合,但我必须逐个处理3D图像而不是2D图像。
我无法循环imadjust,因为我想将图像处理为一个,以便在所有方向上考虑所有可用信息。
答案 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分。
工作空间:
修改:你可以像这样一步完成这个过程:(正如另一个答案所示)
%// 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) );