Converting from The vector field corresponds to image coordinates. x,y,z grid into vector field specified per voxel

조회 수: 9 (최근 30일)
I have a 501x501x83 single matrix which contains the vector field of each point. . This vector field is corresponds to image coordinates. x,y,z grid for the vector field in image coordinates. I want to convert them back into vector field specified per voxel, rather than using physical coordinates. While the positive direction is along how voxel indices increase, the values in DVF are in the unit of voxels
How can I do it.
Yours sincerely

답변 (1개)

Altaïr
Altaïr 2025년 5월 29일
From my understanding, the DVF is a 501×501×83×3 matrix, where each point in the 3D grid has an associated 3D displacement vector. If the vectors are in physical units (e.g., mm or meters), we can convert them to voxel units by dividing each component by the corresponding voxel spacing.
Here’s a function to perform the conversion:
% Input: DVF_physical (i x j x k x 3 single) in length units
% voxel_spacing [sx, sy, sz] in length units/voxel
function DVF_voxel = convertDVF2voxel(DVF_physical, voxel_spacing)
% Reshape spacing to 1x1x1x3 for element-wise division
spacing_4d = reshape(voxel_spacing, [1,1,1,3]);
% Convert physical units to voxel units
DVF_voxel = DVF_physical ./ spacing_4d;
end
Example Usage:
% Define voxel spacing [x, y, z] in mm
spacing = [0.5, 0.5, 2.0]; % mm/voxel
% Create exampple 2x2x2x3 DVF in physical coordinates (mm)
% Format: (y,x,z,component)
DVF_physical = single(zeros(2,2,2,3));
% Populate with sample values:
% Slice 1
DVF_physical(1,1,1,:) = [1.0, 0.5, 4.0]; % [dx, dy, dz] in mm
DVF_physical(1,2,1,:) = [2.0, 1.0, 2.0];
DVF_physical(2,1,1,:) = [0.5, 1.5, 6.0];
DVF_physical(2,2,1,:) = [1.5, 2.0, 0.0];
% Slice 2
DVF_physical(1,1,2,:) = [3.0, 0.0, 2.0];
DVF_physical(1,2,2,:) = [0.0, 1.5, 4.0];
DVF_physical(2,1,2,:) = [2.5, 0.5, 8.0];
DVF_physical(2,2,2,:) = [1.0, 1.0, 10.0];
% Convert to voxel units
spacing_4d = reshape(spacing, [1,1,1,3]);
DVF_voxel = DVF_physical ./ spacing_4d;
% Display results
fprintf('Physical DVF (mm):\n');
disp(DVF_physical);
fprintf('\nVoxel DVF:\n');
disp(DVF_voxel);
For more details on reshape, run:
web(fullfile(docroot, 'matlab/ref/reshape.html'))

카테고리

Help CenterFile Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by