Pinpoint icon indicating copy to clipboard operation
Pinpoint copied to clipboard

Non-linear mesh warping

Open dbirman opened this issue 2 years ago • 2 comments

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();
;
        }
    }
}

dbirman avatar Nov 06 '22 16:11 dbirman