Exemplo n.º 1
0
        private VerificationStatus VerifyElasto(ref Elastogram workingElasto, out ElastoBlob workingBlob)
        {
            workingElasto.GetFibroLine();
            _fibroline = workingElasto.Fibroline;
            workingElasto.PaintOverFibroline();
            workingElasto = new Elastogram(new SimpleGrayImage(workingElasto.Image.Bitmap.GrayscaleKuwahara(KuwaharaKernel)));

            _workingElasto = new Elastogram(new SimpleGrayImage(_workingElasto.Image.Bitmap.MorphologyNiblackBinarization(
                                                                    MorphologyBin_K, MorphologyBinLocalRadius, MorphologyBinGlobalRadius, MorphologyBinThreshold)));

            workingElasto.RemoveEdgeObjects(LeftEdgeDistance1, LeftCentralEdgeDist1,
                                            LeftEdgeDistance2, LeftCentralEdgeDist2,
                                            RightEdgeDistance, RightCentralEdgeDist);

            workingElasto = new Elastogram(new SimpleGrayImage(workingElasto.Image.Bitmap.MorphologyOpening(MorphologyOpeningKernel)));

            workingElasto.CropObjects(CropSteps, CropDistance);

            workingElasto.ChooseContour(AreaProportion, AreaMinLimit, HeightProportion);

            workingBlob = workingElasto.TargetObject;

            if (workingBlob == null)
            {
                return(VerificationStatus.NotCalculated);
            }

            workingBlob.Approximate(ElastogramTopIndention, SampleShare, OutliersShare, RansacIterations);
            return((new OldElastoClassificator()).Classiffy(workingBlob, _fibroline));
        }
        public VerificationStatus Classiffy(ElastoBlob targetObject, Segment fibroLine)
        {
            TargetObject = targetObject;
            FibroLine    = fibroLine;
            if (CheckForNull())
            {
                return(VerificationStatus.NotCalculated);
            }
            int area = TargetObject.Blob.Area;
            ReflectionedLine leftLine     = TargetObject.LeftApproximation;
            ReflectionedLine rightLine    = TargetObject.RightApproximation;
            double           rSquareLeft  = TargetObject.RSquareLeft;
            double           rSquareRight = TargetObject.RSquareRight;
            double           aLeft        = TargetObject.RelativeEstimationLeft;
            double           aRight       = TargetObject.RelativeEstimationRight;

            if (area < 4000)
            {
                return(VerificationStatus.Uncertain);
            }

            if (area < 6000)
            {
                if ((IsStrongAngleClose(leftLine, fibroLine.Equation)) &&
                    IsStrongAngleClose(leftLine, rightLine) &&
                    (IsGoodTilt(leftLine)) &&
                    IsGoodApproximation(leftLine, rSquareLeft, aLeft) &&
                    IsGoodApproximation(rightLine, rSquareRight, aRight))
                {
                    return(VerificationStatus.Correct);
                }
                return(VerificationStatus.Uncertain);
            }

            if (area < 12000)
            {
                if (!IsGoodApproximation(leftLine, rSquareLeft, aLeft) ||
                    !IsGoodApproximation(rightLine, rSquareRight, aRight))
                {
                    return(VerificationStatus.Uncertain);
                }
                if ((IsWeakAngleClose(leftLine, fibroLine.Equation)) &&
                    IsWeakAngleClose(leftLine, rightLine) &&
                    (IsGoodTilt(leftLine)))
                {
                    return(VerificationStatus.Correct);
                }
                return(VerificationStatus.Incorrect);
            }

            if (area < 21000)
            {
                if (IsGoodApproximation(leftLine, rSquareLeft, aLeft) &&
                    IsGoodApproximation(rightLine, rSquareRight, aRight))
                {
                    return(VerificationStatus.Incorrect);
                }
                return(VerificationStatus.Uncertain);
            }

            return(VerificationStatus.Uncertain);

            //Reserved code for classify
            if ((area < 8000) || (area > 6000))
            {
                if (IsGoodApproximation(leftLine, rSquareLeft, aLeft) &&
                    IsGoodApproximation(rightLine, rSquareRight, aRight))
                {
                    return(VerificationStatus.Correct);
                }

                return(VerificationStatus.Incorrect);
            }

            if ((area < 17500) || (area > 12000))
            {
                if (IsGoodApproximation(leftLine, rSquareLeft, aLeft) &&
                    IsGoodApproximation(rightLine, rSquareRight, aRight))
                {
                    return(VerificationStatus.Uncertain);
                }
                return(VerificationStatus.Incorrect);
            }
        }