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