MATLAB三维矩阵,不同方向的最大值+使用MIP的旋转



我有一个名为img的3D图像,假设它是一个291x287x801 int16数组。我使用MIP(最大强度投影(来找到不同方向上具有最大强度的图像。我知道我可以使用max来获得MIP:

MIPimg=max(img,[],3);
imagesc(MIPimg);

然而,这并没有给我正确的方向。我认为它是沿着z方向的,但如果我想沿着y或x方向找到MIP,我该怎么办?

我确实试着把表示尺寸的3改为1或2,但MATLAB告诉我

使用图像时出错
颜色数据必须是m-by-n-by-3或m-by-n矩阵。

调用imagesc(MIPimg)时。

我也试过MIPimg=max(img,[ ],[2 3]);,但没用。

您的问题是imagesc需要一个2D数组作为输入,或者一个三维数组,其中三维正好有3个值(这是MATLAB表示RGB图像的方式(。当你执行max(img,[],1)时,你会得到一个1x287x801数组,它在第三维度上有801个元素,而不是MATLAB期望的3个。

您需要为显示器做的是将此1x287x801阵列转换为287x801数组。函数squeeze执行此操作(它删除大小为1的所有维度(:

MIPimg = squeeze(max(img,[],1));

我无法重现您的问题:

% create random 3D-unit8-matrix (to mimic an image)
img = uint8(randi(255,10,12,3)); % 10x12x3 matrix
% maximum over all rows (direction 1) of each of the 3 10x12 matrices => returns 3 1x12 arrays
[val,idx] = max(img,[],1); % default direction
% maximum over all columns (direction 2) of each of the 3 10x12 matrices => returns 3 10x1 vectors
[val,idx] = max(img,[],2);
% maximum over all slices (direction 3) of each of the 10x12 1x3 "depth" arrays => returns a 10x12 matrix
[val,idx] = max(img,[],3);

总最大

max(max(max(img))) % no useful information about the position

最大值位置:

[val_slc,idx_slc] = max(img,[],3); % I can better think in 2D
[val_row,idx_row] = max(val_slc);
[val_col,idx_col] = max(val_row);
idx_max = [idx_row(idx_col),idx_col,idx_slc(idx_row(idx_col),idx_col)];

检查

assert( max(max(max(img))) == img(idx_max(1),idx_max(2),idx_max(3)) )

相关内容

  • 没有找到相关文章

最新更新