Saturday, March 24, 2007

Up & Down Translation Movie

Thursday, March 22, 2007

Registration Using Intensity Profiles





The preceding movies are of the registration using intensity profiles around the ellipse ring model that are used in the itk::ItensityProfileMetric to bring the ellipse to the skull brain boundary. The metric takes the intensities along coming from a normal from a face on the ellipse ring model and fits a parametric model to them. The model in most cases is a Gaussian followed by a logistic. The Gaussian represents the area of the skull where the intensities get very high and the logistic represents first the empty space between the skull and the brain and then a leveling off that represents the actual brain matter. Once the model is fit the metric will find the position between the Gaussian and the logistic of the data and compare that position to the optimal location of that point. Using that information it will decide what direction and magnitude to proceed to make the position of the point in between the Gaussian and logistic closer to the optimal position. This is done for all of the faces around the elliptical ring and those directions are multiplied by their magnitude and then added together to get the average direction that the intensity profiles are telling to proceed. The magnitudes of all the intensity profiles are also added together and their average is take and used and the magnitude of the metric. Both the magnitude and direction resulting from the metric are passed to the itk::VersorRigid3DtransformOptimizer as the value and derivative and are used to decide where to move the parameters of the ellipse next. The transform being used is the itk::VersorRigid3Dtransform.

The movies above show the ellipse iteratively moving to its optimal location. The arrows represent the direction and the magnitude that each of the intensity profiles is telling the optimizer to move. They were created by using vtkLineSource for the shaft of the arrows and vtkConeSource for the pointer part. They were all added into a vtkAssembly which was in turn fed into the vtkRenderer. The resolution was set to one to better facilitate the drawing of so many arrows on the display. The arrows start at the centroid of a face translated by whatever the parameters of the current iteration. Only the arrows in blue are being factored in the registration and direction of the optimizer. The red arrows were filtered by taking the mean magnitude of the intensity profiles and seeing which intensities had a magnitude much greater than that and filtering those out. In the future this could be improved by looking at the covariance of the intensity profiles and from that information deciding how the different intensity profiles should be factored in and to also weight how well of a fit the parametric models are to the data.

Another issue that could be causing problems in the directions of the normals of the mesh and how the intens_process class calculated the normals when getting intensities from the image. The graph at the bottom of the display focuses on one particular intensity process, in this case one at the bottom of the ellipse model. Intensities being displayed in the diagram seem to vacillate greatly and this may be caused by there being issues with the normals. This could be analyzed by analyzing what the normal directions are and visually inspecting what the data should look like. But overall the intensity profiles seem to work well at getting the ellipse into the correct position with an initial offset of about twenty pixels.