Note that this step used to be called "Smart Smoothing" and was based on a different algorithm. Make sure that you have the most current XrayProject scripts MATLAB scripts and Maya MEL scripts for this step.

what you need:

  1. a CTmarkercoordinates.csv file 3 columns for each marker (xyz coordinates)
  2. an *xyzpts.csv file from digitized data

Note: The number of columns must be a perfect match between the two files.
if you have 10 markers - you must have 30 columns in both files.

what to do:

You may want to filter *xyzpts data prior to calculating rigid body motion (read Filtering Data for background information on filtering)

Filter Procedure

  1. type butterBatch at the matlab prompt (or press the filterXYZ button on the XrayProject Window)
  2. enter the cutoff frequency, recording frequency (i.e. frame rate), and filter type
    Note: it is important to enter your correct frame rate. The default is 250 frames per second. It is also important to select an appropriate cutoff frequency; generally 5 to 10 times greater than the frequency of the motion in your videos
  3. select 1 or more files to process
  4. Original and filtered data will be plotted for the first data file
  5. files are saved in the original directory with BUTTER## appended to the
    end of the original file name. The ## specifies the cutoff frequency

Calculate Rigid Body Motion Procedure

  1. type XrayProject at the MATLAB prompt (if the XrayProject window is not already open)
  2. click Calculate Rigid Body Motion
  3. select the csv file with the marker coordinates (3D marker positions relative to polygonal mesh bone models)
  4. select your filtered data file (xyzptsButter)
  5. type the number of bones in the input box
  6. select the markers associated with each bone (omit any markers with all NaNs)
  7. save the file output.

what you get:

A (yourfilename)TformsAbs.csv file with the absolute (relative to 0,0,0,) translations and rotations to drive your bones (in a Maya-friendly, framex16 matrix format)

Note: After you run through steps 1-7 in matlab, the variables markerIdx and ct are stored in the workspace. If you need to do subsequent reconstructions, simply type rigidBody(markerIdx,ct) at the matlab prompt. This will elimate steps 3-5.

Other details:

rigidBody calls 2 additional scripts: svdrigid and mayaMatrixFormat

svdrigid takes marker data for a single bone and outputs rotations and translations
mayaMatrixFormat converts the framex3x3 rotation matrices and framex3 translations and converts them to a framex16 rotation matrix in a Maya-friendly format