原文:http://blogs.mathworks.com/steve/2006/08/17/spatial-transformations-three-dimensional-rotation/
The Image Processing Toolbox function tformarray is a very general multidimensional spatial transformer and can be used for three-dimensional rotation. Here's how.
Make a three-dimensional blob
First, let's make a three-dimensional image containing a blob that will easily show the effect of a rotation.
[x,y,z] = ndgrid(-1:.025:1);
blob = z <= 0 & z >= -0.75 & x.^2 + y.^2 <= sqrt(0.25);
blob = blob | (z > 0 & (abs(x) + abs(y) <= (0.5 - z)));Display the blob using isosurface and patch.
p = patch(isosurface(blob,0.5));
set(p, 'FaceColor', 'red', 'EdgeColor', 'none');
daspect([1 1 1]);
view(3)
camlight
lighting gouraud
Make a 3-D affine tform struct
We want to rotate the blob about its own center. For me, the simplest way to construct an affine transform matrix that will do that is to use three steps:
- Translate the middle of the blob to the origin.
- Rotate the blob.
- Translate the rotated blob back to its starting location.
Here's the first translation:
blob_center = (size(blob) + 1) / 2
T1 = [1 0 0 0
0 1 0 0
0 0 1 0
-blob_center 1]
Now here's the rotation. In this example we'll rotate about the second dimension.
theta = pi/8;
T2 = [cos(theta) 0 -sin(theta) 0
0 1 0 0
sin(theta) 0 cos(theta) 0
0 0 0 1]
And here's the final translation.
T3 = [1 0 0 0
0 1 0 0
0 0 1 0
blob_center 1]
The forward mapping is the composition of T1, T2, and T3.
T = T1 * T2 * T3
tform = maketform('affine', T);
Let's do a quick sanity check: the tform struct should map the blob center to itself.
tformfwd(blob_center, tform)
What the tformarray inputs mean
Now let's see how to make the inputs to the tformarray function. The syntax of tformarray is B = tformarray(A, T, R, TDIMS_A, TDIMS_B, TSIZE_B, TMAP_B, F).

本文通过创建一个三维图像(称为“blob”),演示了如何使用MATLAB的Image Processing Toolbox中的tformarray函数实现三维旋转。首先创建了一个能够清晰显示旋转效果的三维图像,然后构造了一个仿射变换结构来围绕图像的中心进行旋转。
1214

被折叠的 条评论
为什么被折叠?



