コード例 #1
0
        public static IResult <ObjectLayer> Detect(Bitmap image)
        {
            var result = new Result <ObjectLayer>();

            using (var source = image.Clone() as Bitmap)
            {
                var gpDAB = new SharpAccessory.Imaging.Filters.ColorDeconvolution().Get2ndStain(source, SharpAccessory.Imaging.Filters.ColorDeconvolution.KnownStain.HaematoxylinDAB);
                gpDAB.Dispose();
                result.DebugBitmaps.Add(Tuple.Create(gpDAB.Bitmap, "DAB"));
                var dabLayer = createLayer(gpDAB.Bitmap, DabThreshold, "DAB");
                result.DebugLayers.Add(dabLayer);
                result.DebugVariables.Add("DabThreshold", DabThreshold);
                ObjectPixels.ProcessLayer(dabLayer);
                var layer = dabLayer.CreateAbove((ImageObject io) => io.Features["ObjectPixels"].Value < 100);
                layer.Name = "Bud Results";
                result.DebugLayers.Add(layer);
                result.Value = layer;
            }
            return(result);
        }
コード例 #2
0
ファイル: Detector.cs プロジェクト: maiktheknife/MIP
        public static IResult <ObjectLayer> Execute(Bitmap bitmap)
        {
            var r     = new Result <ObjectLayer>();
            var layer = createLayer(bitmap, 128, "BUD DetektorLayer");

            // hier aufrufen & berechnen
            ObjectPixels.ProcessLayer(layer);
            AxesOfCorrespondingEllipse.ProcessLayer(layer);
            PixelsAtLayerBorder.ProcessLayer(layer);

            // r.DebugLayers.Add(layer);
            r.Value = layer.CreateAbove((ImageObject io) => {
                // bei zoomstufe 0.5

                // hier abrufen
                var minPixels = io.Features["ObjectPixels"].Value > 600;
                var maxPixels = io.Features["ObjectPixels"].Value < 14000;

                //if (!minPixels || !maxPixels) {
                //    return false;
                //}

                // Abstand bud zum Rand
                // wenn am Rand bzw abgeschnitten, dann nicht weiter betrachten
                var distance = io.Features["PixelsAtLayerBorder"].Value < 5;

                // findet ähnlichkeiten zur einer ellipse
                //var axesMa = io.Features["MajorAxisOfCorrespondingEllipse"].Value < 3;
                //var axesMi = io.Features["MinorAxisOfCorrespondingEllipse"].Value < 3;

                var result = minPixels && maxPixels && distance; // && axesMa && axesMi;
                Console.WriteLine("Wert: " + result);
                return(result);

                // markiere alles als Bud
                // return true;
            });

            r.DebugLayers.Add(r.Value);
            return(r);
        }
コード例 #3
0
        public static IResult <ObjectLayer> Execute(Bitmap bitmap)
        {
            var         r      = new Result <ObjectLayer>();
            var         layer  = createLayer(bitmap, 40, "first layer"); // Ein neues Layer wird gemacht
            ObjectLayer layer2 = null;                                   // Die Kachel wird in grayscale umgewandelt

            ObjectPixels.ProcessLayer(layer);
            AxesOfCorrespondingEllipse.ProcessLayer(layer);                // Gefundene Buds werden als Objecte mit Features bezeichnet
            r.DebugLayers.Add(layer);
            layer2 = layer.CreateAbove((ImageObject io) =>                 // Wenn ein Element den Parametern entspricht, wird er markiert
                                       io.Features["Area"].Value < 5000 && // und als Object auf neues Layer gespeichert
                                       io.Features["Area"].Value > 500 &&
                                       io.Features["AreaDiv"].Value < 1.55 //&&
                                                                           //io.Features["FormFactor"].Value<30
                                       );
            layer2.Name = "BUDs";
            r.DebugLayers.Add(layer2);

            r.Value = layer2;

            return(r);
        }