/// <summary>
        /// Get the coefficient map of inner structures of tissue for the transform rigidity penalty term.
        /// </summary>
        /// <param name="filename">image filename</param>
        /// <returns>return coefficient map filename</returns>
        private string GetInnerStructureSegmentationsAsCoefficientMap(string filename)
        {
            InnerTissueSegmentation innerSegImage = GetInnerStructureSegmentation(filename);

            string filenameCoefficientMap = ReadWriteUtils.GetOutputDirectory(_parameters, _parameters.Iteration) + Constants.cCoefficientFilename;

            ReadWriteUtils.WriteUMatToFile(filenameCoefficientMap, innerSegImage.GetOutput().FirstOrDefault());
            innerSegImage.Dispose();

            // rescale image
            sitk.Image           img        = ReadWriteUtils.ReadITKImageFromFile(filenameCoefficientMap);
            sitk.CastImageFilter castFilter = new sitk.CastImageFilter();
            castFilter.SetOutputPixelType(sitk.PixelIDValueEnum.sitkFloat32);
            img = castFilter.Execute(img);
            sitk.RescaleIntensityImageFilter filter = new sitk.RescaleIntensityImageFilter();
            filter.SetOutputMinimum(0.0);
            filter.SetOutputMaximum(1.0);
            sitk.Image coefficientMap = filter.Execute(img);

            // save as mhd
            filenameCoefficientMap = ReadWriteUtils.GetOutputDirectory(_parameters, _parameters.Iteration) + Constants.cCoefficientFilename;
            ReadWriteUtils.WriteSitkImage(coefficientMap, filenameCoefficientMap);
            coefficientMap.Dispose();
            return(filenameCoefficientMap);
        }
        /// <summary>
        /// Get filename of the inner structures mask of an image.
        /// </summary>
        /// <param name="filename">filename of the image</param>
        /// <returns>filename of the masked image</returns>
        private string GetInnerStructureSegmentationFilename(string filename)
        {
            string outputFilename       = ReadWriteUtils.GetOutputDirectory(_parameters, _parameters.Iteration) + "\\mask_" + Path.GetFileName(filename);
            InnerTissueSegmentation seg = GetInnerStructureSegmentation(filename);

            seg.GetOutput()[1].Save(filename);
            seg.Dispose();
            return(filename);
        }
        /// <summary>
        /// Get image of the inner structures mask of an image.
        /// </summary>
        /// <param name="filename">filename of the image</param>
        /// <returns>masked image</returns>
        private sitk.Image GetInnerStructureMask(string filename)
        {
            string outputFilename       = ReadWriteUtils.GetOutputDirectory(_parameters, _parameters.Iteration) + "\\mask_" + Path.GetFileName(filename);
            InnerTissueSegmentation seg = GetInnerStructureSegmentation(filename);

            seg.GetOutput()[1].Save(outputFilename);
            seg.Dispose();
            sitk.Image mask = ReadWriteUtils.ReadITKImageFromFile(outputFilename);

            return(mask);
        }
        private string DoInnerTissueSegmentation(Image <Bgr, byte> img, Image <Gray, byte> mask, string filename)
        {
            InnerTissueSegmentation seg = new InnerTissueSegmentation(img.Clone(), mask.Clone(), registrationParameters.InnerStructuresSegParams);

            seg.Execute();
            UMat innerMask = seg.GetOutput()[0].Clone();

            seg.Dispose();
            string filepathResult = registrationParameters.OutputDirectory + filename;

            ReadWriteUtils.WriteUMatToFile(filepathResult, innerMask);
            return(filepathResult);
        }
        /// <summary>
        /// Do segmentation of inner structures of the tissue for a given image.
        /// </summary>
        /// <param name="filename">image filename</param>
        /// <param name="parameters">registration parameters containing segmentation params</param>
        /// <returns>returns the segmentation instance</returns>
        private InnerTissueSegmentation GetInnerStructureSegmentation(string filename)
        {
            Image <Bgr, byte> image = ReadWriteUtils.ReadOpenCVImageFromFile <Bgr, byte>(filename);

            WholeTissueSegmentation segImage = new WholeTissueSegmentation(image, _parameters.WholeTissueSegParams);

            segImage.Execute();
            Image <Gray, byte> wholeMask = segImage.GetOutput().Clone();

            segImage.Dispose();

            InnerTissueSegmentation innerSegImage = new InnerTissueSegmentation(image, wholeMask, _parameters.InnerStructuresSegParams);

            innerSegImage.Execute();
            return(innerSegImage);
        }
Beispiel #6
0
        private void buttonPreview_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;

            if (image != null)
            {
                WholeTissueSegmentation segImage = new WholeTissueSegmentation(image, segmentationParametersWholeTissue);
                segImage.Execute();
                Image <Gray, byte> mask = segImage.GetOutput().Clone();
                segImage.Dispose();

                if (mask != null)
                {
                    InnerTissueSegmentation seg = new InnerTissueSegmentation(image.Clone(), mask.Clone(), segmentationParametersInnerTissue);
                    seg.Execute();
                    List <UMat> result = seg.GetOutput();
                    UMat        a      = new UMat();
                    result[0].Clone().ConvertTo(a, Emgu.CV.CvEnum.DepthType.Cv8U);
                    UMat b = new UMat();
                    result[1].Clone().ConvertTo(b, Emgu.CV.CvEnum.DepthType.Cv8U);
                    seg.Dispose();

                    if (pictureBoxSegmentation1.Image != null)
                    {
                        this.Invoke(new MethodInvoker(delegate() {
                            pictureBoxSegmentation1.Image.Dispose();
                            pictureBoxSegmentation1.Image = null;
                        }));
                    }
                    pictureBoxSegmentation1.Image = a.Bitmap;

                    if (pictureBoxSegmentation2.Image != null)
                    {
                        this.Invoke(new MethodInvoker(delegate() {
                            pictureBoxSegmentation2.Image.Dispose();
                            pictureBoxSegmentation2.Image = null;
                        }));
                    }
                    pictureBoxSegmentation2.Image = b.Bitmap;
                }
            }

            Cursor.Current = Cursors.Default;
        }