Pinpoint
Pinpoint copied to clipboard
Non-linear mesh warping
https://sourceforge.net/projects/simpleitk/files/SimpleITK/1.2.4/CSharp/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using sitk = itk.simple.SimpleITK;
using simple = itk.simple;
namespace CoordinateTransforms
{
public class ANTsTransform : CoordinateTransform
{
string affineFileName = "C:/Users/yoni.browning/OneDrive - Allen Institute/Desktop/PaxinosAlignment/FromCodeOcean/results/twentyfive_um_resolution0GenericAffine.mat";
string forwardFileName = "C:/Users/yoni.browning/OneDrive - Allen Institute/Desktop/PaxinosAlignment/FromCodeOcean/results/twentyfive_um_resolution1Warp.nii.gz";
string inverseFileName = "C:/Users/yoni.browning/OneDrive - Allen Institute/Desktop/PaxinosAlignment/FromCodeOcean/results/twentyfive_um_resolution1InverseWarp.nii.gz";
simple.Transform affineTransform;
simple.DisplacementFieldTransform forwardWarping;
simple.DisplacementFieldTransform inverseWarping;
public override string Name { get { return "ANTs"; } }
public override string Prefix { get { return "an"; } }
// Start is called before the first frame update
public ANTsTransform()
{
Debug.Log("Fitting Affine");
affineTransform = sitk.ReadTransform(affineFileName);
simple.CastImageFilter castFilter = new simple.CastImageFilter();
castFilter.SetOutputPixelType(simple.PixelIDValueEnum.sitkFloat64);
Debug.Log("Fitting FWD");
simple.Image forwardImage = sitk.ReadImage(forwardFileName);
forwardImage = sitk.Cast(forwardImage,simple.PixelIDValueEnum.sitkVectorFloat64);
forwardWarping = new simple.DisplacementFieldTransform(3);
forwardWarping.SetDisplacementField(forwardImage);
Debug.Log("Fitting INV");
simple.Image inverseImage = sitk.ReadImage(inverseFileName);
inverseImage = sitk.Cast(inverseImage,simple.PixelIDValueEnum.sitkVectorFloat64);
inverseWarping = new simple.DisplacementFieldTransform(3);
inverseWarping.SetDisplacementField(inverseImage);
Debug.Log("Done");
}
public override Vector3 Transform2Space(Vector3 coord)
{
List<double> point = new List<double>();
point.Add(coord.x);
point.Add(coord.y);
point.Add(coord.z);
simple.VectorDouble transform_pt = new simple.VectorDouble(point);
transform_pt = forwardWarping.TransformPoint(transform_pt);
transform_pt = affineTransform.TransformPoint(transform_pt);
return new Vector3((float)transform_pt[0],(float)transform_pt[1],(float)transform_pt[2]);
}
public override Vector3 Space2Transform(Vector3 coord)
{
List<double> point = new List<double>();
point.Add(coord.x);
point.Add(coord.y);
point.Add(coord.z);
simple.VectorDouble transform_pt = new simple.VectorDouble(point);
transform_pt = affineTransform.TransformPoint(transform_pt);
transform_pt = inverseWarping.TransformPoint(transform_pt);
return new Vector3((float)transform_pt[0],(float)transform_pt[1],(float)transform_pt[2]); }
public override Vector3 Transform2SpaceRot(Vector3 coordTransformed)
{
throw new System.NotImplementedException();
}
public override Vector3 Space2TransformRot(Vector3 coordSpace)
{
throw new System.NotImplementedException();
;
}
}
}