/// <summary>
        /// Only for debug / evaluation use.
        /// </summary>
        /// <param name="fixedMask"></param>
        /// <param name="movingMask"></param>
        private void CalculateMetrics(sitk.Image fixedMask, sitk.Image movingMask)
        {
            if (fixedMask != null && movingMask != null)
            {
                sitk.LabelOverlapMeasuresImageFilter overlapFilter = VisualizationEvaluationUtils.GetOverlapImageFilter(fixedMask, movingMask);

                if (overlapFilter != null)
                {
                    double diceCoef      = overlapFilter.GetDiceCoefficient();
                    double falseNegative = overlapFilter.GetFalseNegativeError();
                    double falsePositive = overlapFilter.GetFalsePositiveError();
                    double jaccard       = overlapFilter.GetJaccardCoefficient();
                    double meanOverlap   = overlapFilter.GetMeanOverlap();
                    double unionOverlap  = overlapFilter.GetUnionOverlap();

                    string dice   = diceCoef.ToString("0.##");
                    string jacc   = jaccard.ToString("0.##");
                    string negPos = string.Format("{0} / {1}", falseNegative.ToString("0.##"), falsePositive.ToString("0.##"));

                    Console.WriteLine("### Metrics ###");
                    Console.WriteLine("Dice: " + dice);
                    Console.WriteLine("Jaccard: " + jacc);
                    Console.WriteLine("False negative / false positive: " + negPos);
                }
            }
        }
        private void buttonCalcMetrics_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            try
            {
                string key = comboBoxMoving.SelectedValue.ToString();
                List <sitk.VectorOfParameterMap> map = registrationParameters.TransformationParameterMap[key];

                /*string parametersFilename = registrationParameters.OutputDirectory + "\\1\\TransformParameters.0.txt";
                 * List<sitk.VectorOfParameterMap> map = new List<sitk.VectorOfParameterMap>();
                 * map.Add(InvertTransformParameters(parametersFilename));*/

                registrationParameters.MovingImagePointSetFilename = filenameMovingPointSet;
                registrationParameters.FixedImagePointSetFilename  = filenameFixedPointSet;

                string filenameOutputPoints  = VisualizationEvaluationUtils.TransfromPointSet(map, registrationParameters);
                var    movingPointsDict      = ReadWriteUtils.ReadFixedPointSet(filenameMovingPointSet).Values.ToList();
                var    transformedPointsDict = ReadWriteUtils.ReadTransformedPointSets(filenameOutputPoints).Values.ToList();

                RegistrationError registrationError = VisualizationEvaluationUtils.GetRegistrationError(movingPointsDict, transformedPointsDict);

                labelMeanDiff.Text = registrationError.MeanRegistrationError.ToString("0.###");
                labelStdDev.Text   = registrationError.StdDevRegistrationError.ToString("0.###");
                labelMax.Text      = registrationError.MaximumRegistrationError.ToString("0.###");
            } catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            Cursor.Current = Cursors.Default;
        }
 private static sitk.LabelOverlapMeasuresImageFilter GetOverlapImageFilter(string mask01iFn, string mask02iFn)
 {
     sitk.LabelOverlapMeasuresImageFilter overlapFilter;
     sitk.Image sImg01 = ReadWriteUtils.ReadITKImageFromFile(mask01iFn);
     sitk.Image sImg02 = ReadWriteUtils.ReadITKImageFromFile(mask02iFn);
     overlapFilter = VisualizationEvaluationUtils.GetOverlapImageFilter(sImg01, sImg02);
     sImg01.Dispose();
     sImg02.Dispose();
     return(overlapFilter);
 }
 /// <summary>
 /// Only for debug / evaluation use.
 /// </summary>
 /// <param name="pointsetFixed"></param>
 /// <param name="pointsetMov"></param>
 private void CalculateTRE(string pointsetFixed, string pointsetMov)
 {
     var fixedPointsDict = ReadWriteUtils.ReadFixedPointSet(pointsetFixed).Values.ToList();
     var movPointsDict   = ReadWriteUtils.ReadFixedPointSet(pointsetMov).Values.ToList();
     RegistrationError registrationError = VisualizationEvaluationUtils.GetRegistrationError(fixedPointsDict, movPointsDict);
     //Console.WriteLine(string.Format("Absolute TRE: {0}", registrationError.AbsoluteRegistrationError));
     //Console.WriteLine(string.Format("Max TRE: {0}", registrationError.MaximumRegistrationError));
     //Console.WriteLine(string.Format("Mean TRE: {0}", registrationError.MeanRegistrationError));
     //Console.WriteLine(string.Format("Std deviation RE: {0}", registrationError.StdDevRegistrationError));
 }
        private void buttonTransformFixed_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            try
            {
                string key = comboBoxMoving.SelectedValue.ToString();
                List <sitk.VectorOfParameterMap> map = registrationParameters.TransformationParameterMap[key];

                VisualizationEvaluationUtils.TransfromPointSet(map, filenameFixedPointSet, ApplicationContext.OutputPath);
            } catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            Cursor.Current = Cursors.Default;
        }
        private void buttonDiffImage_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;

            string fixedImageFilename  = registrationParameters.FixedImageFilename;
            string movingImageFilename = comboBoxMovingImage.SelectedValue.ToString();

            // read images
            var img01      = ReadWriteUtils.ReadITKImageFromFile(fixedImageFilename);
            var img02      = ReadWriteUtils.ReadITKImageFromFile(movingImageFilename);
            var difference = VisualizationEvaluationUtils.GetTotalDifferenceImage(img01, img02);

            ReadWriteUtils.WriteSitkImage(difference, registrationParameters.OutputDirectory + "\\difference.png");
            img01.Dispose();
            img02.Dispose();
            difference.Dispose();

            Cursor.Current = Cursors.Default;
        }
        private void buttonCheckerBoard_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;

            string fixedImageFilename  = registrationParameters.FixedImageFilename;
            string movingImageFilename = comboBoxMovingImage.SelectedValue.ToString();
            uint   size = (uint)numericUpDownCheckerSize.Value;

            // read images
            //var img01 = ReadWriteUtils.ReadITKImageFromFile(fixedImageFilename);
            //var img02 = ReadWriteUtils.ReadITKImageFromFile(movingImageFilename);
            var checkerboard = VisualizationEvaluationUtils.GetCheckerBoardV2(fixedImageFilename, movingImageFilename, size);

            ReadWriteUtils.WriteSitkImage(checkerboard, registrationParameters.OutputDirectory + "\\checkerboard.png");
            //img01.Dispose();
            //img02.Dispose();
            checkerboard.Dispose();

            Cursor.Current = Cursors.Default;
        }