我有一个名为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)) )