The Basic Idea of the Shear-Warp Algorithm
To generate different views of an object given as volume data, the voxels of the volume first have to be rotated into the right position before the projection of the 3D-data into a 2D-plane can be done. The random positions of samples after the rotation complicate the projection process. The Shear-Warp Algorithm simplifies this projection by first shearing, then projecting and finally warping the viewed points (i.e. the voxels of the data).

To illustrate how the Shear-Warp Algorithm works, imagine a fat book. If one looks directly at the front of the book one can only see the front-page of it. There seems to be no way to see a side of it without rotating it. Indeed a "trick" can be applied. When one shears the pages of the book so that all the pages remain parallel, but their relative positions change, then one can also see the side of the book. This is exactly what the shearing-step in the Shear-Warp Algorithm does. In this step the slices of the volume are sheared. After the shearing, the samples are projected onto a so-called intermediate image.

     
The shearing step in the Shear-Warp Algorithm
The intermediate image one gets after projection is distorted. So the intermediate image must be warped to get the correct final image.
Each voxel position is transformed from its original position into the respective position in the projection plane. This transformation can be expressed by applying a rotation and a projection. So the Shear-Warp Algorithm simply uses the fact that one can split up the combined transformation- and projection-matrix into a shear-, a projection and a warp-matrix. In case of orthogonal projection no projection matrix is required. This is the case because orthogonal projection into the XY-plane means nothing else than assigning 0 to all Z-values. The X- and Y-coordinates are not influenced by the projection. In short, we simply ignore the Z-coordinates.

When the transformations are represented by matrices we can express the Shear-Warp factorisation as follows:

viewMatrix = shearMatrix * warpMatrix

Factorisation of the viewing matrix
So much about the basic idea behind it. In fact the whole thing is a little more complex. The Shear-Warp Algorithm saves all the slices of the volume runlength encoded for each main viewing direction. Because the viewing vector in viewing coordinates always is parallel to the z-axis, a permutation of the axes has to be performed before the shearing. This permutation always makes the z-axis being the viewing vector.

back main next