Beispiel #1
0
    // Procedures
    public void GetRegionOfAntennaAroundOfS1423C(HObject ho_Image, out HObject ho_FoundRegion,
                                                 HTuple hv_LightDark, HTuple hv_WidthMin, HTuple hv_WidthMax, HTuple hv_HeightMin,
                                                 HTuple hv_HeightMax, HTuple hv_SortMode, HTuple hv_Order, HTuple hv_RowOrCol,
                                                 HTuple hv_SelectIndex, HTuple hv_DilationWidth, HTuple hv_DilationHeight)
    {
        // Local iconic variables

        HObject ho_Region, ho_ConnectedRegions, ho_SelectedRegions;
        HObject ho_SelectedRegions1, ho_SortedRegions, ho_ObjectSelected;
        HObject ho_Rectangle;

        // Local control variables

        HTuple hv_UsedThreshold = null, hv_Row1 = null;
        HTuple hv_Column1 = null, hv_Row2 = null, hv_Column2 = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_FoundRegion);
        HOperatorSet.GenEmptyObj(out ho_Region);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions1);
        HOperatorSet.GenEmptyObj(out ho_SortedRegions);
        HOperatorSet.GenEmptyObj(out ho_ObjectSelected);
        HOperatorSet.GenEmptyObj(out ho_Rectangle);
        ho_Region.Dispose();
        HOperatorSet.BinaryThreshold(ho_Image, out ho_Region, "max_separability", hv_LightDark,
                                     out hv_UsedThreshold);

        ho_ConnectedRegions.Dispose();
        HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);
        ho_SelectedRegions.Dispose();
        HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "width",
                                 "and", hv_WidthMin, hv_WidthMax);
        ho_SelectedRegions1.Dispose();
        HOperatorSet.SelectShape(ho_SelectedRegions, out ho_SelectedRegions1, "height",
                                 "and", hv_HeightMin, hv_HeightMax);
        ho_SortedRegions.Dispose();
        HOperatorSet.SortRegion(ho_SelectedRegions1, out ho_SortedRegions, hv_SortMode,
                                hv_Order, hv_RowOrCol);
        ho_ObjectSelected.Dispose();
        HOperatorSet.SelectObj(ho_SortedRegions, out ho_ObjectSelected, hv_SelectIndex);
        HOperatorSet.SmallestRectangle1(ho_ObjectSelected, out hv_Row1, out hv_Column1,
                                        out hv_Row2, out hv_Column2);
        ho_Rectangle.Dispose();
        HOperatorSet.GenRectangle1(out ho_Rectangle, hv_Row1, hv_Column1, hv_Row2, hv_Column2);
        ho_FoundRegion.Dispose();
        HOperatorSet.DilationRectangle1(ho_Rectangle, out ho_FoundRegion, hv_DilationWidth,
                                        hv_DilationHeight);

        ho_Region.Dispose();
        ho_ConnectedRegions.Dispose();
        ho_SelectedRegions.Dispose();
        ho_SelectedRegions1.Dispose();
        ho_SortedRegions.Dispose();
        ho_ObjectSelected.Dispose();
        ho_Rectangle.Dispose();

        return;
    }
    // Procedures
    // Local procedures
    public void GetRegionOfLightOrDarkRect2(HObject ho_Image, out HObject ho_FoundRegion,
                                            HTuple hv_LightDark, HTuple hv_WidthMin, HTuple hv_WidthMax, HTuple hv_HeightMin,
                                            HTuple hv_HeightMax, HTuple hv_Rect2Len1, HTuple hv_Rect2Len2)
    {
        // Local iconic variables

        HObject ho_Region, ho_ConnectedRegions, ho_SelectedRegions;
        HObject ho_SelectedRegions1, ho_Rectangle;

        // Local control variables

        HTuple hv_UsedThreshold = null, hv_Row = null;
        HTuple hv_Column = null, hv_Phi = null, hv_Length1 = null;
        HTuple hv_Length2 = null, hv_Row1 = null, hv_Column1 = null;
        HTuple hv_Row2 = null, hv_Column2 = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_FoundRegion);
        HOperatorSet.GenEmptyObj(out ho_Region);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions1);
        HOperatorSet.GenEmptyObj(out ho_Rectangle);
        ho_Region.Dispose();
        HOperatorSet.BinaryThreshold(ho_Image, out ho_Region, "max_separability", hv_LightDark,
                                     out hv_UsedThreshold);

        ho_ConnectedRegions.Dispose();
        HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);
        ho_SelectedRegions.Dispose();
        HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "width",
                                 "and", hv_WidthMin, hv_WidthMax);
        ho_SelectedRegions1.Dispose();
        HOperatorSet.SelectShape(ho_SelectedRegions, out ho_SelectedRegions1, "height",
                                 "and", hv_HeightMin, hv_HeightMax);

        HOperatorSet.SmallestRectangle2(ho_SelectedRegions1, out hv_Row, out hv_Column,
                                        out hv_Phi, out hv_Length1, out hv_Length2);
        ho_Rectangle.Dispose();
        HOperatorSet.GenRectangle2(out ho_Rectangle, hv_Row, hv_Column, hv_Phi, hv_Rect2Len1,
                                   hv_Rect2Len2);
        HOperatorSet.SmallestRectangle1(ho_Rectangle, out hv_Row1, out hv_Column1, out hv_Row2,
                                        out hv_Column2);
        ho_FoundRegion.Dispose();
        HOperatorSet.GenRectangle1(out ho_FoundRegion, hv_Row1, hv_Column1, hv_Row2,
                                   hv_Column2);

        ho_Region.Dispose();
        ho_ConnectedRegions.Dispose();
        ho_SelectedRegions.Dispose();
        ho_SelectedRegions1.Dispose();
        ho_Rectangle.Dispose();

        return;
    }
    public void AutoThreshold()
    {
        if (ho_Dog == null)
        {
            MessageBox.Show("н╢╪стьхн╨нм╪ф╛");
            return;
        }

        HObject ho_Regions;
        HObject ho_Median;
        HTuple  UserThreshold;
        HObject ho_RegionMaxSeparabilityLight, ho_RegionMaxSeparabilityDark, ho_RegionSmoothHistoLight, ho_RegionSmoothHistoDark,
                ho_RegionDifference, ho_RegionThreshold;

        HOperatorSet.GenEmptyObj(out ho_Regions);
        HOperatorSet.GenEmptyObj(out ho_Median);
        HOperatorSet.Rgb1ToGray(ho_Dog, out ho_GrayImage);
        HOperatorSet.DispObj(ho_GrayImage, hv_ExpDefaultWinHandle);
        // HOperatorSet.MedianImage(ho_Dog, out ho_Regions, "circle", 3, "mirrored");
        HOperatorSet.BinaryThreshold(ho_GrayImage, out ho_RegionMaxSeparabilityLight, "max_separability", "light", out UserThreshold);
        //HOperatorSet.DispObj(ho_RegionMaxSeparabilityLight, hv_ExpDefaultWinHandle);

        HOperatorSet.BinaryThreshold(ho_GrayImage, out ho_RegionMaxSeparabilityDark, "max_separability", "dark", out UserThreshold);
        //HOperatorSet.DispObj(ho_RegionMaxSeparabilityDark, hv_ExpDefaultWinHandle);

        HOperatorSet.BinaryThreshold(ho_GrayImage, out ho_RegionSmoothHistoLight, "smooth_histo", "light", out UserThreshold);
        //HOperatorSet.DispObj(ho_RegionSmoothHistoLight, hv_ExpDefaultWinHandle);

        HOperatorSet.BinaryThreshold(ho_GrayImage, out ho_RegionSmoothHistoDark, "smooth_histo", "dark", out UserThreshold);
        //HOperatorSet.DispObj(ho_RegionSmoothHistoDark, hv_ExpDefaultWinHandle);

        HOperatorSet.SymmDifference(ho_RegionMaxSeparabilityDark, ho_RegionSmoothHistoDark, out ho_RegionDifference);
        HOperatorSet.DispObj(ho_RegionDifference, hv_ExpDefaultWinHandle);

        //HOperatorSet.Threshold(ho_GrayImage, out ho_RegionThreshold, 0, UserThreshold);
        //HOperatorSet.DispObj(ho_RegionThreshold, hv_ExpDefaultWinHandle);

        //HOperatorSet.SymmDifference(ho_RegionThreshold, ho_RegionSmoothHistoDark, out ho_RegionDifference);
        //HOperatorSet.DispObj(ho_RegionDifference, hv_ExpDefaultWinHandle);



        //HOperatorSet.AutoThreshold(ho_Regions, out ho_Median, 1.0);
        //HOperatorSet.DispObj(ho_Median, hv_ExpDefaultWinHandle);
    }
Beispiel #4
0
    // Procedures
    public void GetRegionOfRoiByBinaryThreshold(HObject ho_Image, out HObject ho_FoundRegion,
                                                HTuple hv_LightDark, HTuple hv_AreaMin, HTuple hv_AreaMax, HTuple hv_MoveRow,
                                                HTuple hv_MoveColumn)
    {
        // Local iconic variables

        HObject ho_Region, ho_ConnectedRegions, ho_SelectedRegions;

        // Local control variables

        HTuple hv_UsedThreshold = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_FoundRegion);
        HOperatorSet.GenEmptyObj(out ho_Region);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
        ho_Region.Dispose();
        HOperatorSet.BinaryThreshold(ho_Image, out ho_Region, "max_separability", hv_LightDark,
                                     out hv_UsedThreshold);

        ho_ConnectedRegions.Dispose();
        HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);
        ho_SelectedRegions.Dispose();
        HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area",
                                 "and", hv_AreaMin, hv_AreaMax);

        ho_FoundRegion.Dispose();
        HOperatorSet.MoveRegion(ho_SelectedRegions, out ho_FoundRegion, hv_MoveRow, hv_MoveColumn);

        ho_Region.Dispose();
        ho_ConnectedRegions.Dispose();
        ho_SelectedRegions.Dispose();

        return;
    }
Beispiel #5
0
    // Procedures
    public void GetRegionByBinaryThresholdRect(HObject ho_Image, out HObject ho_FoundRegion,
                                               HTuple hv_MeanMaskWidth, HTuple hv_MeanMaskHeight, HTuple hv_ScaleAdd, HTuple hv_LightDark,
                                               HTuple hv_AreaMin, HTuple hv_AreaMax, HTuple hv_OpeningWidth, HTuple hv_OpeningHeight,
                                               HTuple hv_ClosingWidth, HTuple hv_ClosingHeight, HTuple hv_DilationRadius)
    {
        // Stack for temporary objects
        HObject[] OTemp = new HObject[20];

        // Local iconic variables

        HObject ho_Domain, ho_ImageMean, ho_ImageScaled = null;
        HObject ho_Regions, ho_ConnectedRegions, ho_SelectedRegions;
        HObject ho_RegionFillUp, ho_RegionUnion;

        // Local control variables

        HTuple hv_Value = null, hv_UsedThreshold = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_FoundRegion);
        HOperatorSet.GenEmptyObj(out ho_Domain);
        HOperatorSet.GenEmptyObj(out ho_ImageMean);
        HOperatorSet.GenEmptyObj(out ho_ImageScaled);
        HOperatorSet.GenEmptyObj(out ho_Regions);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
        HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
        HOperatorSet.GenEmptyObj(out ho_RegionUnion);
        ho_Domain.Dispose();
        HOperatorSet.GetDomain(ho_Image, out ho_Domain);

        ho_ImageMean.Dispose();
        HOperatorSet.MeanImage(ho_Image, out ho_ImageMean, hv_MeanMaskWidth, hv_MeanMaskHeight);

        HOperatorSet.GrayFeatures(ho_Domain, ho_ImageMean, "mean", out hv_Value);

        if ((int)(new HTuple(hv_LightDark.TupleEqual("light"))) != 0)
        {
            ho_ImageScaled.Dispose();
            HOperatorSet.ScaleImage(ho_ImageMean, out ho_ImageScaled, 1, (255 - hv_Value) + hv_ScaleAdd);
        }
        else if ((int)(new HTuple(hv_LightDark.TupleEqual("dark"))) != 0)
        {
            ho_ImageScaled.Dispose();
            HOperatorSet.ScaleImage(ho_ImageMean, out ho_ImageScaled, 1, (-hv_Value) + hv_ScaleAdd);
        }

        ho_Regions.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageScaled, out ho_Regions, "max_separability",
                                     hv_LightDark, out hv_UsedThreshold);
        ho_ConnectedRegions.Dispose();
        HOperatorSet.Connection(ho_Regions, out ho_ConnectedRegions);
        ho_SelectedRegions.Dispose();
        HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area",
                                 "and", hv_AreaMin, hv_AreaMax);
        ho_RegionFillUp.Dispose();
        HOperatorSet.FillUp(ho_SelectedRegions, out ho_RegionFillUp);

        if ((int)((new HTuple(hv_OpeningWidth.TupleGreater(0))).TupleAnd(new HTuple(hv_OpeningHeight.TupleGreater(
                                                                                        0)))) != 0)
        {
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.OpeningRectangle1(ho_RegionFillUp, out ExpTmpOutVar_0, hv_OpeningWidth,
                                               hv_OpeningHeight);
                ho_RegionFillUp.Dispose();
                ho_RegionFillUp = ExpTmpOutVar_0;
            }
        }

        if ((int)((new HTuple(hv_ClosingWidth.TupleGreater(0))).TupleAnd(new HTuple(hv_ClosingHeight.TupleGreater(
                                                                                        0)))) != 0)
        {
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.ClosingRectangle1(ho_RegionFillUp, out ExpTmpOutVar_0, hv_ClosingWidth,
                                               hv_ClosingHeight);
                ho_RegionFillUp.Dispose();
                ho_RegionFillUp = ExpTmpOutVar_0;
            }
        }

        if ((int)(new HTuple(hv_DilationRadius.TupleGreater(0))) != 0)
        {
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.DilationCircle(ho_RegionFillUp, out ExpTmpOutVar_0, hv_DilationRadius);
                ho_RegionFillUp.Dispose();
                ho_RegionFillUp = ExpTmpOutVar_0;
            }
        }

        ho_RegionUnion.Dispose();
        HOperatorSet.Union1(ho_RegionFillUp, out ho_RegionUnion);
        ho_FoundRegion.Dispose();
        HOperatorSet.MoveRegion(ho_RegionUnion, out ho_FoundRegion, 0, 0);

        ho_Domain.Dispose();
        ho_ImageMean.Dispose();
        ho_ImageScaled.Dispose();
        ho_Regions.Dispose();
        ho_ConnectedRegions.Dispose();
        ho_SelectedRegions.Dispose();
        ho_RegionFillUp.Dispose();
        ho_RegionUnion.Dispose();

        return;
    }
Beispiel #6
0
        //DateTime t1, t2, t3, t4,t5,t6,t7;
        private void action()
        {
            HObject ho_Region1 = null, ho_RegionClosing = null;
            HObject ho_RegionErosion = null, ho_ImageReduced = null, ho_ImageMedian = null;
            HObject ho_ImageDeviation = null, ho_Region2 = null, ho_RegionErosion1 = null;
            HObject ho_ConnectedRegions = null, ho_SelectedRegions = null;
            HObject ho_RegionClosing1 = null, ho_Rectangle = null, ho_Rectangle1 = null;
            HObject ho_ImageReduced1 = null, ho_Edges = null, ho_ContoursSplit = null;
            HObject ho_UnionContours = null, ho_SelectedContours = null;

            // Local control variables

            HTuple hv_UsedThreshold = new HTuple(), hv_UsedThreshold1 = new HTuple(), hv_i = new HTuple();
            HTuple hv_Row1 = new HTuple(), hv_Column1 = new HTuple(), hv_Sorted = new HTuple();
            HTuple hv_Phi = new HTuple(), hv_Length1 = new HTuple();
            HTuple hv_Length2 = new HTuple(), hv_Mean = new HTuple();
            HTuple hv_Deviation = new HTuple(), hv_RowBegin = new HTuple();
            HTuple hv_ColBegin = new HTuple(), hv_RowEnd = new HTuple();
            HTuple hv_ColEnd = new HTuple(), hv_Nr = new HTuple();
            HTuple hv_Nc = new HTuple(), hv_Dist = new HTuple(), hv_RowBeginOut = new HTuple();
            HTuple hv_ColBeginOut = new HTuple(), hv_RowEndOut = new HTuple();
            HTuple hv_ColEndOut = new HTuple(), hv_Distance = new HTuple();

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Region1);
            HOperatorSet.GenEmptyObj(out ho_RegionClosing);
            HOperatorSet.GenEmptyObj(out ho_RegionErosion);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced);
            HOperatorSet.GenEmptyObj(out ho_ImageMedian);
            HOperatorSet.GenEmptyObj(out ho_ImageDeviation);
            HOperatorSet.GenEmptyObj(out ho_Region2);
            HOperatorSet.GenEmptyObj(out ho_RegionErosion1);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
            HOperatorSet.GenEmptyObj(out ho_RegionClosing1);
            HOperatorSet.GenEmptyObj(out ho_Rectangle);
            HOperatorSet.GenEmptyObj(out ho_Rectangle1);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced1);
            HOperatorSet.GenEmptyObj(out ho_Edges);
            HOperatorSet.GenEmptyObj(out ho_ContoursSplit);
            HOperatorSet.GenEmptyObj(out ho_UnionContours);
            HOperatorSet.GenEmptyObj(out ho_SelectedContours);
            HOperatorSet.Union1(algorithm.Region, out RegionToDisp);
            //t3 = DateTime.Now;
            try
            {
                ho_Region1.Dispose();
                HOperatorSet.BinaryThreshold(Image, out ho_Region1, "max_separability",
                                             "dark", out hv_UsedThreshold);
                ho_RegionClosing.Dispose();
                HOperatorSet.ClosingCircle(ho_Region1, out ho_RegionClosing, 35.5);
                ho_RegionErosion.Dispose();
                HOperatorSet.ErosionCircle(ho_RegionClosing, out ho_RegionErosion, 15.5);
                ho_ImageReduced.Dispose();
                HOperatorSet.ReduceDomain(Image, ho_RegionErosion, out ho_ImageReduced);
                ho_ImageMedian.Dispose();
                HOperatorSet.MedianImage(ho_ImageReduced, out ho_ImageMedian, "circle", 5,
                                         "mirrored");
                ho_ImageDeviation.Dispose();
                HOperatorSet.DeviationImage(ho_ImageMedian, out ho_ImageDeviation, 25, 25);
                ho_Region2.Dispose();
                HOperatorSet.BinaryThreshold(ho_ImageDeviation, out ho_Region2, "max_separability",
                                             "light", out hv_UsedThreshold1);
                ho_RegionErosion1.Dispose();
                HOperatorSet.ErosionCircle(ho_Region2, out ho_RegionErosion1, 3.5);
                ho_ConnectedRegions.Dispose();
                HOperatorSet.Connection(ho_RegionErosion1, out ho_ConnectedRegions);
                ho_SelectedRegions.Dispose();
                HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area",
                                         "and", 15000, 99999);
                ho_RegionClosing1.Dispose();
                HOperatorSet.ClosingCircle(ho_SelectedRegions, out ho_RegionClosing1, 35.5);
                HOperatorSet.SmallestRectangle2(ho_RegionClosing1, out hv_Row1, out hv_Column1,
                                                out hv_Phi, out hv_Length1, out hv_Length2);
                ho_Rectangle.Dispose();
                HOperatorSet.GenRectangle2(out ho_Rectangle, hv_Row1, hv_Column1, hv_Phi, hv_Length1,
                                           hv_Length2);
                ho_Rectangle1.Dispose();
                HOperatorSet.GenRectangle2(out ho_Rectangle1, c_Row1, c_Column1, c_Phi1, c_Length11,
                                           c_Length21);
                ho_ImageReduced1.Dispose();
                HOperatorSet.ReduceDomain(Image, ho_Rectangle1, out ho_ImageReduced1);
                HOperatorSet.Intensity(ho_Rectangle1, ho_ImageReduced1, out hv_Mean, out hv_Deviation);
                if ((int)(new HTuple(hv_Deviation.TupleGreater(7))) != 0)
                {
                    ho_Edges.Dispose();
                    HOperatorSet.EdgesSubPix(ho_ImageReduced1, out ho_Edges, "canny", 1, 20,
                                             40);
                    ho_ContoursSplit.Dispose();
                    HOperatorSet.SegmentContoursXld(ho_Edges, out ho_ContoursSplit, "lines_circles",
                                                    5, 4, 2);
                    ho_UnionContours.Dispose();
                    HOperatorSet.UnionCollinearContoursExtXld(ho_ContoursSplit, out ho_UnionContours,
                                                              2000, 20, 20, 0.2, 0, -1, 1, 1, 1, 1, 1, 0, "attr_keep");
                    ho_SelectedContours.Dispose();
                    HOperatorSet.SelectContoursXld(ho_UnionContours, out ho_SelectedContours,
                                                   "contour_length", 50, 20000, -0.5, 0.5);
                    HOperatorSet.FitLineContourXld(ho_SelectedContours, "tukey", -1, 0, 5, 2,
                                                   out hv_RowBegin, out hv_ColBegin, out hv_RowEnd, out hv_ColEnd, out hv_Nr,
                                                   out hv_Nc, out hv_Dist);
                    HOperatorSet.SelectLinesLongest(hv_RowBegin, hv_ColBegin, hv_RowEnd, hv_ColEnd,
                                                    1, out hv_RowBeginOut, out hv_ColBeginOut, out hv_RowEndOut, out hv_ColEndOut);
                    HOperatorSet.DistancePl(hv_Row1, hv_Column1, hv_RowBeginOut, hv_ColBeginOut,
                                            hv_RowEndOut, hv_ColEndOut, out hv_Distance);
                }
                HOperatorSet.Union1(ho_Rectangle, out RegionToDisp);
                if ((int)(new HTuple((new HTuple(hv_Distance.TupleLength())).TupleGreater(0))) != 0)
                {
                    HOperatorSet.TupleSort(hv_Distance, out hv_Sorted);
                    HTuple hv_result = GetHv_result();
                    for (hv_i = (new HTuple(hv_Sorted.TupleLength())) - 1; (int)hv_i >= 0; hv_i = (int)hv_i - 1)
                    {
                        hv_result = hv_result.TupleConcat("位置" + hv_i.I.ToString());
                        hv_result = hv_result.TupleConcat(hv_Sorted.TupleSelect(hv_i) * pixeldist);
                    }
                    result = hv_result.Clone();

                    //t4 = DateTime.Now;
                }
                else
                {
                    HTuple hv_result = GetHv_result();
                    for (hv_i = 0; (int)hv_i <= 10; hv_i = (int)hv_i + 1)
                    {
                        hv_result = hv_result.TupleConcat("位置" + hv_i.I.ToString());
                        hv_result = hv_result.TupleConcat(0);
                    }
                    result = hv_result.Clone();
                }
            }
            catch
            {
                HTuple hv_result = GetHv_result();
                for (hv_i = 0; (int)hv_i <= 10; hv_i = (int)hv_i + 1)
                {
                    hv_result = hv_result.TupleConcat("位置" + hv_i.I.ToString());
                    hv_result = hv_result.TupleConcat(0);
                }
                result = hv_result.Clone();
            }
            finally
            {
                ho_Region1.Dispose();
                ho_RegionClosing.Dispose();
                ho_RegionErosion.Dispose();
                ho_ImageReduced.Dispose();
                ho_ImageMedian.Dispose();
                ho_ImageDeviation.Dispose();
                ho_Region2.Dispose();
                ho_RegionErosion1.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_RegionClosing1.Dispose();
                ho_Rectangle.Dispose();
                ho_Rectangle1.Dispose();
                ho_ImageReduced1.Dispose();
                ho_Edges.Dispose();
                ho_ContoursSplit.Dispose();
                ho_UnionContours.Dispose();
                ho_SelectedContours.Dispose();
                algorithm.Region.Dispose();
            }
        }
        // Main procedure
        private void porosityHorizonatal()
        {
            // Local iconic variables
            HObject ho_Image = null, ho_Rectangle = null, ho_ImageReduced = null;
            HObject ho_ImageMean = null, ho_Region = null, ho_ConnectedRegions = null;
            HObject ho_RegionClosing = null, ho_SmallConnection = null;
            HObject ho_ContCircle = null;
            // Local control variables
            HTuple hv_AcqHandle = null, hv_found = null;
            HTuple hv_cnt = null, hv_bol = null, hv_porosity_area_px = null;
            HTuple hv_porosity_area_mm = null;
            HTuple hv_UsedThreshold = new HTuple(), hv_Circularity = new HTuple();
            HTuple hv_Area = new HTuple(), hv_Row = new HTuple(), hv_Column = new HTuple();
            HTuple hv_Length = new HTuple(), hv_circ_min = new HTuple();
            HTuple hv_area_min = new HTuple(), hv_index = new HTuple();
            HTuple hv_i = new HTuple();

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Image);
            HOperatorSet.GenEmptyObj(out ho_Rectangle);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced);
            HOperatorSet.GenEmptyObj(out ho_ImageMean);
            HOperatorSet.GenEmptyObj(out ho_Region);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_RegionClosing);
            HOperatorSet.GenEmptyObj(out ho_SmallConnection);
            HOperatorSet.GenEmptyObj(out ho_ContCircle);
            // Wait for CAM4 thread to be closed
            _waitHandleCam3.WaitOne();
            // Close te thread DOOR
            _waitHandleCam3.Reset();
            // Open camera frame
            HOperatorSet.OpenFramegrabber("GigEVision", 0, 0, 0, 0, 0, 0, "default", -1, "default", -1, "false", "default", "GC2591MP_CAM_3", 0, -1, out hv_AcqHandle);
            HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "ExposureTime", 35000.0); // 30 000
            // Information for PLC that frame is opened
            DetectionHorStart();
            hv_found = 0;
            hv_cnt   = 0;
            hv_bol   = 0;

            Porositydetectedhor = false;
            while (Porositydetectedhor == false)
            {
                ho_Image.Dispose();
                HOperatorSet.GrabImage(out ho_Image, hv_AcqHandle);
                ho_Rectangle.Dispose();
                //HOperatorSet.GenRectangle1(out ho_Rectangle, 520, 200, 1050, 700);
                //HOperatorSet.GenRectangle1(out ho_Rectangle, 1020, 200, 1460, 700);
                HOperatorSet.GenRectangle1(out ho_Rectangle, 900, 200, 1460, 700);
                //HOperatorSet.GenRectangle1(out ho_Rectangle, 1120, 200, 1630, 700);
                ho_ImageReduced.Dispose();
                HOperatorSet.ReduceDomain(ho_Image, ho_Rectangle, out ho_ImageReduced);
                ho_ImageMean.Dispose();
                HOperatorSet.MeanImage(ho_ImageReduced, out ho_ImageMean, 21, 21);
                ho_Region.Dispose();
                HOperatorSet.BinaryThreshold(ho_ImageMean, out ho_Region, "max_separability", "dark", out hv_UsedThreshold);
                ho_ConnectedRegions.Dispose();
                HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);
                ho_RegionClosing.Dispose();
                HOperatorSet.ClosingCircle(ho_ConnectedRegions, out ho_RegionClosing, 17);
                ho_SmallConnection.Dispose();
                HOperatorSet.Connection(ho_RegionClosing, out ho_SmallConnection);
                HOperatorSet.Circularity(ho_SmallConnection, out hv_Circularity);
                HOperatorSet.AreaCenter(ho_SmallConnection, out hv_Area, out hv_Row, out hv_Column);
                HOperatorSet.TupleLength(hv_Row, out hv_Length);
                // Criteria for porosity
                hv_circ_min = 0.5;
                hv_area_min = 300;  // 300 - HDev //1000
                hv_index    = 0;
                HTuple end_val36  = hv_Length;
                HTuple step_val36 = 1;

                for (hv_i = 1; hv_i.Continue(end_val36, step_val36); hv_i = hv_i.TupleAdd(step_val36))
                {
                    if ((int)((new HTuple(((hv_Circularity.TupleSelect(hv_i - 1))).TupleGreater(
                                              hv_circ_min))).TupleAnd(new HTuple(((hv_Area.TupleSelect(hv_i - 1))).TupleGreater(
                                                                                     hv_area_min)))) != 0)
                    {
                        hv_index = hv_i - 1;
                        hv_found = hv_found + 1;
                        hv_bol   = 1;
                        break;
                    }
                    else
                    {
                        hv_bol = 0;
                    }
                }
                //HOperatorSet.ClearWindow(hv_porosityWinHandle);
                //HOperatorSet.DispObj(ho_Image, hv_porosityWinHandle);
                if ((int)((new HTuple(hv_found.TupleGreater(0))).TupleAnd(new HTuple(hv_bol.TupleEqual(
                                                                                         1)))) != 0)
                {
                    PorosityIsDetected();
                    ho_ContCircle.Dispose();
                    //HOperatorSet.GenCircleContourXld(out ho_ContCircle, hv_Row.TupleSelect(hv_index),
                    //    hv_Column.TupleSelect(hv_index), 50, 0, 6.28318, "positive", 1);
                    //HOperatorSet.DispObj(ho_ContCircle, hv_porosityWinHandle);
                    hv_found            = 0;
                    hv_cnt              = 0;
                    Porositydetectedhor = true;
                }
                hv_cnt = hv_cnt + 1;
            }

            //HOperatorSet.ClearWindow(hv_porosityWinHandle);
            HOperatorSet.CloseFramegrabber(hv_AcqHandle);
            // Open the thread DOOR
            _waitHandleCam3.Set();
            // Dispose all iconic variables
            ho_Image.Dispose();
            ho_Rectangle.Dispose();
            ho_ImageReduced.Dispose();
            ho_ImageMean.Dispose();
            ho_Region.Dispose();
            ho_ConnectedRegions.Dispose();
            ho_RegionClosing.Dispose();
            ho_SmallConnection.Dispose();
            ho_ContCircle.Dispose();
        }
Beispiel #8
0
    // Procedures
    // Local procedures
    public void EnhanceEdgeAreaByScaleDual(HObject ho_InputImage, out HObject ho_EnhancedImage,
                                           out HObject ho_EnhancedEdge, HTuple hv_MeanMaskWidth, HTuple hv_MeanMaskHeight,
                                           HTuple hv_EdgeAreaLightDark, HTuple hv_SelectAreaMin, HTuple hv_SelectAreaMax,
                                           HTuple hv_EdgeLightDark, HTuple hv_ScaleAdd1, HTuple hv_EmpMaskWidth, HTuple hv_EmpMaskHeight,
                                           HTuple hv_EmpFactor, HTuple hv_ScaleAdd2, HTuple hv_OpeningWidth, HTuple hv_OpeningHeight,
                                           HTuple hv_ClosingWidth, HTuple hv_ClosingHeight)
    {
        // Local iconic variables

        HObject ho_Domain, ho_ImageMean, ho_Region;
        HObject ho_ConnectedRegions, ho_SelectedRegions, ho_RegionUnion;
        HObject ho_RegionTrans, ho_ImageReduced, ho_Domain1, ho_ImageScaled = null;
        HObject ho_ImageScaleMax, ho_Region2, ho_ImageReduced1;
        HObject ho_ImageEmphasize, ho_ImageScaled2 = null, ho_ImageScaleMax2;
        HObject ho_Region1, ho_RegionOpening, ho_RegionFillUp, ho_ImageNew;
        HObject ho_RegionComplement;

        // Local control variables

        HTuple hv_Width = null, hv_Height = null, hv_UsedThreshold = null;
        HTuple hv_Value = null, hv_UsedThreshold2 = null, hv_UsedThreshold1 = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_EnhancedImage);
        HOperatorSet.GenEmptyObj(out ho_EnhancedEdge);
        HOperatorSet.GenEmptyObj(out ho_Domain);
        HOperatorSet.GenEmptyObj(out ho_ImageMean);
        HOperatorSet.GenEmptyObj(out ho_Region);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
        HOperatorSet.GenEmptyObj(out ho_RegionUnion);
        HOperatorSet.GenEmptyObj(out ho_RegionTrans);
        HOperatorSet.GenEmptyObj(out ho_ImageReduced);
        HOperatorSet.GenEmptyObj(out ho_Domain1);
        HOperatorSet.GenEmptyObj(out ho_ImageScaled);
        HOperatorSet.GenEmptyObj(out ho_ImageScaleMax);
        HOperatorSet.GenEmptyObj(out ho_Region2);
        HOperatorSet.GenEmptyObj(out ho_ImageReduced1);
        HOperatorSet.GenEmptyObj(out ho_ImageEmphasize);
        HOperatorSet.GenEmptyObj(out ho_ImageScaled2);
        HOperatorSet.GenEmptyObj(out ho_ImageScaleMax2);
        HOperatorSet.GenEmptyObj(out ho_Region1);
        HOperatorSet.GenEmptyObj(out ho_RegionOpening);
        HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
        HOperatorSet.GenEmptyObj(out ho_ImageNew);
        HOperatorSet.GenEmptyObj(out ho_RegionComplement);
        ho_Domain.Dispose();
        HOperatorSet.GetDomain(ho_InputImage, out ho_Domain);
        HOperatorSet.RegionFeatures(ho_Domain, "width", out hv_Width);
        HOperatorSet.RegionFeatures(ho_Domain, "height", out hv_Height);

        ho_ImageMean.Dispose();
        HOperatorSet.MeanImage(ho_InputImage, out ho_ImageMean, hv_MeanMaskWidth, hv_MeanMaskHeight);

        ho_Region.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageMean, out ho_Region, "max_separability",
                                     hv_EdgeAreaLightDark, out hv_UsedThreshold);

        ho_ConnectedRegions.Dispose();
        HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);
        ho_SelectedRegions.Dispose();
        HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area",
                                 "and", hv_SelectAreaMin, hv_SelectAreaMax);
        ho_RegionUnion.Dispose();
        HOperatorSet.Union1(ho_SelectedRegions, out ho_RegionUnion);
        ho_RegionTrans.Dispose();
        HOperatorSet.ShapeTrans(ho_RegionUnion, out ho_RegionTrans, "convex");
        ho_ImageReduced.Dispose();
        HOperatorSet.ReduceDomain(ho_ImageMean, ho_RegionTrans, out ho_ImageReduced);

        ho_Domain1.Dispose();
        HOperatorSet.GetDomain(ho_ImageReduced, out ho_Domain1);
        HOperatorSet.GrayFeatures(ho_Domain1, ho_ImageReduced, "mean", out hv_Value);
        if ((int)(new HTuple(hv_EdgeLightDark.TupleEqual("dark"))) != 0)
        {
            ho_ImageScaled.Dispose();
            HOperatorSet.ScaleImage(ho_ImageReduced, out ho_ImageScaled, 1, (255 - hv_Value) + hv_ScaleAdd1);
        }
        else if ((int)(new HTuple(hv_EdgeLightDark.TupleEqual("light"))) != 0)
        {
            ho_ImageScaled.Dispose();
            HOperatorSet.ScaleImage(ho_ImageReduced, out ho_ImageScaled, 1, (-hv_Value) + hv_ScaleAdd1);
        }
        ho_ImageScaleMax.Dispose();
        HOperatorSet.ScaleImageMax(ho_ImageScaled, out ho_ImageScaleMax);

        ho_Region2.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageScaleMax, out ho_Region2, "max_separability",
                                     hv_EdgeLightDark, out hv_UsedThreshold2);
        ho_ImageReduced1.Dispose();
        HOperatorSet.ReduceDomain(ho_ImageScaleMax, ho_Region2, out ho_ImageReduced1);

        ho_ImageEmphasize.Dispose();
        HOperatorSet.Emphasize(ho_ImageReduced1, out ho_ImageEmphasize, hv_EmpMaskWidth,
                               hv_EmpMaskHeight, hv_EmpFactor);

        HOperatorSet.GrayFeatures(ho_Region2, ho_ImageEmphasize, "mean", out hv_Value);
        if ((int)(new HTuple(hv_EdgeLightDark.TupleEqual("dark"))) != 0)
        {
            ho_ImageScaled2.Dispose();
            HOperatorSet.ScaleImage(ho_ImageEmphasize, out ho_ImageScaled2, 1, (255 - hv_Value) + hv_ScaleAdd2);
        }
        else if ((int)(new HTuple(hv_EdgeLightDark.TupleEqual("light"))) != 0)
        {
            ho_ImageScaled2.Dispose();
            HOperatorSet.ScaleImage(ho_ImageEmphasize, out ho_ImageScaled2, 1, (-hv_Value) + hv_ScaleAdd2);
        }
        ho_ImageScaleMax2.Dispose();
        HOperatorSet.ScaleImageMax(ho_ImageScaled2, out ho_ImageScaleMax2);

        ho_Region1.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageScaleMax2, out ho_Region1, "max_separability",
                                     hv_EdgeLightDark, out hv_UsedThreshold1);
        ho_RegionOpening.Dispose();
        HOperatorSet.OpeningRectangle1(ho_Region1, out ho_RegionOpening, hv_OpeningWidth,
                                       hv_MeanMaskHeight);
        ho_EnhancedEdge.Dispose();
        HOperatorSet.ClosingRectangle1(ho_RegionOpening, out ho_EnhancedEdge, hv_ClosingWidth,
                                       hv_ClosingHeight);
        ho_RegionFillUp.Dispose();
        HOperatorSet.FillUp(ho_EnhancedEdge, out ho_RegionFillUp);

        ho_ImageNew.Dispose();
        HOperatorSet.ChangeDomain(ho_InputImage, ho_Domain, out ho_ImageNew);
        ho_RegionComplement.Dispose();
        HOperatorSet.Complement(ho_RegionFillUp, out ho_RegionComplement);
        ho_EnhancedImage.Dispose();
        HOperatorSet.PaintRegion(ho_RegionFillUp, ho_ImageNew, out ho_EnhancedImage,
                                 255, "fill");
        HOperatorSet.OverpaintRegion(ho_EnhancedImage, ho_RegionComplement, 0, "fill");

        ho_Domain.Dispose();
        ho_ImageMean.Dispose();
        ho_Region.Dispose();
        ho_ConnectedRegions.Dispose();
        ho_SelectedRegions.Dispose();
        ho_RegionUnion.Dispose();
        ho_RegionTrans.Dispose();
        ho_ImageReduced.Dispose();
        ho_Domain1.Dispose();
        ho_ImageScaled.Dispose();
        ho_ImageScaleMax.Dispose();
        ho_Region2.Dispose();
        ho_ImageReduced1.Dispose();
        ho_ImageEmphasize.Dispose();
        ho_ImageScaled2.Dispose();
        ho_ImageScaleMax2.Dispose();
        ho_Region1.Dispose();
        ho_RegionOpening.Dispose();
        ho_RegionFillUp.Dispose();
        ho_ImageNew.Dispose();
        ho_RegionComplement.Dispose();

        return;
    }
Beispiel #9
0
    // Procedures
    public void GetRegionOfRoughWithSobelMean(HObject ho_Image, out HObject ho_FoundRegion,
                                              HTuple hv_ThresholdMinGray, HTuple hv_ThresholdMaxGray, HTuple hv_RoughAreaMinPercent,
                                              HTuple hv_MinMaxGrayPercent, HTuple hv_HatWidth, HTuple hv_HatHeight, HTuple hv_SelectAreaMin,
                                              HTuple hv_SelectAreaMax, HTuple hv_RoughAreaClosingWidth, HTuple hv_RoughAreaClosingHeight,
                                              HTuple hv_RoughAreaOpeningWidth, HTuple hv_RoughAreaOpeningHeight, HTuple hv_SobelAmpSize,
                                              HTuple hv_SobelAmpMeanMin, HTuple hv_SobelAmpThresholdMinGray)
    {
        // Local iconic variables

        HObject ho_Domain, ho_Region, ho_ImageScaled;
        HObject ho_SE, ho_ImageTopHat, ho_ImageScaled4, ho_ImageBotHat;
        HObject ho_ImageScaled5, ho_ImageResult, ho_ImageScaled5And6;
        HObject ho_Region1, ho_RegionClosing1, ho_RegionOpening;
        HObject ho_ConnectedRegions1, ho_SelectedRegions2, ho_RegionFillUp;
        HObject ho_RegionClosing10, ho_RegionOpening12, ho_ImageReduced;
        HObject ho_EdgeAmplitude, ho_Region2, ho_RegionClosing22;
        HObject ho_ConnectedRegions2, ho_RegionFillUp2, ho_SelectedRegions3;
        HObject ho_RegionFillUp1, ho_RegionClosing21, ho_RegionOpening22;
        HObject ho_RegionIntersection, ho_ConnectedRegions3;

        // Local control variables

        HTuple hv_Width = null, hv_Height = null, hv_DomainArea = null;
        HTuple hv_Number = null, hv_AreaValue = null, hv_RoughAreaPercent = null;
        HTuple hv_Min = null, hv_Max = null, hv_Range = null, hv_UsedThreshold2 = null;
        HTuple hv_Mean = null, hv_Deviation = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_FoundRegion);
        HOperatorSet.GenEmptyObj(out ho_Domain);
        HOperatorSet.GenEmptyObj(out ho_Region);
        HOperatorSet.GenEmptyObj(out ho_ImageScaled);
        HOperatorSet.GenEmptyObj(out ho_SE);
        HOperatorSet.GenEmptyObj(out ho_ImageTopHat);
        HOperatorSet.GenEmptyObj(out ho_ImageScaled4);
        HOperatorSet.GenEmptyObj(out ho_ImageBotHat);
        HOperatorSet.GenEmptyObj(out ho_ImageScaled5);
        HOperatorSet.GenEmptyObj(out ho_ImageResult);
        HOperatorSet.GenEmptyObj(out ho_ImageScaled5And6);
        HOperatorSet.GenEmptyObj(out ho_Region1);
        HOperatorSet.GenEmptyObj(out ho_RegionClosing1);
        HOperatorSet.GenEmptyObj(out ho_RegionOpening);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions1);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions2);
        HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
        HOperatorSet.GenEmptyObj(out ho_RegionClosing10);
        HOperatorSet.GenEmptyObj(out ho_RegionOpening12);
        HOperatorSet.GenEmptyObj(out ho_ImageReduced);
        HOperatorSet.GenEmptyObj(out ho_EdgeAmplitude);
        HOperatorSet.GenEmptyObj(out ho_Region2);
        HOperatorSet.GenEmptyObj(out ho_RegionClosing22);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions2);
        HOperatorSet.GenEmptyObj(out ho_RegionFillUp2);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions3);
        HOperatorSet.GenEmptyObj(out ho_RegionFillUp1);
        HOperatorSet.GenEmptyObj(out ho_RegionClosing21);
        HOperatorSet.GenEmptyObj(out ho_RegionOpening22);
        HOperatorSet.GenEmptyObj(out ho_RegionIntersection);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions3);
        ho_Domain.Dispose();
        HOperatorSet.GetDomain(ho_Image, out ho_Domain);
        HOperatorSet.RegionFeatures(ho_Domain, "width", out hv_Width);
        HOperatorSet.RegionFeatures(ho_Domain, "height", out hv_Height);
        HOperatorSet.RegionFeatures(ho_Domain, "area", out hv_DomainArea);



        ho_Region.Dispose();
        HOperatorSet.Threshold(ho_Image, out ho_Region, hv_ThresholdMinGray, hv_ThresholdMaxGray);

        HOperatorSet.CountObj(ho_Region, out hv_Number);
        if ((int)(new HTuple(hv_Number.TupleEqual(0))) != 0)
        {
            ho_FoundRegion.Dispose();
            HOperatorSet.GenEmptyRegion(out ho_FoundRegion);
            ho_Domain.Dispose();
            ho_Region.Dispose();
            ho_ImageScaled.Dispose();
            ho_SE.Dispose();
            ho_ImageTopHat.Dispose();
            ho_ImageScaled4.Dispose();
            ho_ImageBotHat.Dispose();
            ho_ImageScaled5.Dispose();
            ho_ImageResult.Dispose();
            ho_ImageScaled5And6.Dispose();
            ho_Region1.Dispose();
            ho_RegionClosing1.Dispose();
            ho_RegionOpening.Dispose();
            ho_ConnectedRegions1.Dispose();
            ho_SelectedRegions2.Dispose();
            ho_RegionFillUp.Dispose();
            ho_RegionClosing10.Dispose();
            ho_RegionOpening12.Dispose();
            ho_ImageReduced.Dispose();
            ho_EdgeAmplitude.Dispose();
            ho_Region2.Dispose();
            ho_RegionClosing22.Dispose();
            ho_ConnectedRegions2.Dispose();
            ho_RegionFillUp2.Dispose();
            ho_SelectedRegions3.Dispose();
            ho_RegionFillUp1.Dispose();
            ho_RegionClosing21.Dispose();
            ho_RegionOpening22.Dispose();
            ho_RegionIntersection.Dispose();
            ho_ConnectedRegions3.Dispose();

            return;
        }

        HOperatorSet.RegionFeatures(ho_Region, "area", out hv_AreaValue);
        if ((int)(new HTuple(hv_AreaValue.TupleEqual(0))) != 0)
        {
            ho_FoundRegion.Dispose();
            HOperatorSet.GenEmptyRegion(out ho_FoundRegion);
            ho_Domain.Dispose();
            ho_Region.Dispose();
            ho_ImageScaled.Dispose();
            ho_SE.Dispose();
            ho_ImageTopHat.Dispose();
            ho_ImageScaled4.Dispose();
            ho_ImageBotHat.Dispose();
            ho_ImageScaled5.Dispose();
            ho_ImageResult.Dispose();
            ho_ImageScaled5And6.Dispose();
            ho_Region1.Dispose();
            ho_RegionClosing1.Dispose();
            ho_RegionOpening.Dispose();
            ho_ConnectedRegions1.Dispose();
            ho_SelectedRegions2.Dispose();
            ho_RegionFillUp.Dispose();
            ho_RegionClosing10.Dispose();
            ho_RegionOpening12.Dispose();
            ho_ImageReduced.Dispose();
            ho_EdgeAmplitude.Dispose();
            ho_Region2.Dispose();
            ho_RegionClosing22.Dispose();
            ho_ConnectedRegions2.Dispose();
            ho_RegionFillUp2.Dispose();
            ho_SelectedRegions3.Dispose();
            ho_RegionFillUp1.Dispose();
            ho_RegionClosing21.Dispose();
            ho_RegionOpening22.Dispose();
            ho_RegionIntersection.Dispose();
            ho_ConnectedRegions3.Dispose();

            return;
        }

        hv_RoughAreaPercent = (hv_AreaValue / hv_DomainArea) * 100;
        if ((int)(new HTuple(hv_RoughAreaPercent.TupleLess(hv_RoughAreaMinPercent))) != 0)
        {
            ho_FoundRegion.Dispose();
            HOperatorSet.GenEmptyRegion(out ho_FoundRegion);
            ho_Domain.Dispose();
            ho_Region.Dispose();
            ho_ImageScaled.Dispose();
            ho_SE.Dispose();
            ho_ImageTopHat.Dispose();
            ho_ImageScaled4.Dispose();
            ho_ImageBotHat.Dispose();
            ho_ImageScaled5.Dispose();
            ho_ImageResult.Dispose();
            ho_ImageScaled5And6.Dispose();
            ho_Region1.Dispose();
            ho_RegionClosing1.Dispose();
            ho_RegionOpening.Dispose();
            ho_ConnectedRegions1.Dispose();
            ho_SelectedRegions2.Dispose();
            ho_RegionFillUp.Dispose();
            ho_RegionClosing10.Dispose();
            ho_RegionOpening12.Dispose();
            ho_ImageReduced.Dispose();
            ho_EdgeAmplitude.Dispose();
            ho_Region2.Dispose();
            ho_RegionClosing22.Dispose();
            ho_ConnectedRegions2.Dispose();
            ho_RegionFillUp2.Dispose();
            ho_SelectedRegions3.Dispose();
            ho_RegionFillUp1.Dispose();
            ho_RegionClosing21.Dispose();
            ho_RegionOpening22.Dispose();
            ho_RegionIntersection.Dispose();
            ho_ConnectedRegions3.Dispose();

            return;
        }



        HOperatorSet.MinMaxGray(ho_Region, ho_Image, hv_MinMaxGrayPercent, out hv_Min,
                                out hv_Max, out hv_Range);
        ho_ImageScaled.Dispose();
        HOperatorSet.ScaleImage(ho_Image, out ho_ImageScaled, 255 / (hv_Max - hv_Min), (-(255 / (hv_Max - hv_Min))) * hv_Min);

        //
        ho_SE.Dispose();
        HOperatorSet.GenDiscSe(out ho_SE, "byte", hv_HatWidth, hv_HatHeight, 0);

        //
        ho_ImageTopHat.Dispose();
        HOperatorSet.GrayTophat(ho_ImageScaled, ho_SE, out ho_ImageTopHat);
        HOperatorSet.MinMaxGray(ho_Region, ho_ImageTopHat, hv_MinMaxGrayPercent, out hv_Min,
                                out hv_Max, out hv_Range);
        ho_ImageScaled4.Dispose();
        HOperatorSet.ScaleImage(ho_ImageTopHat, out ho_ImageScaled4, 255 / (hv_Max - hv_Min),
                                (-(255 / (hv_Max - hv_Min))) * hv_Min);

        ho_ImageBotHat.Dispose();
        HOperatorSet.GrayBothat(ho_ImageScaled, ho_SE, out ho_ImageBotHat);
        HOperatorSet.MinMaxGray(ho_Region, ho_ImageBotHat, hv_MinMaxGrayPercent, out hv_Min,
                                out hv_Max, out hv_Range);
        ho_ImageScaled5.Dispose();
        HOperatorSet.ScaleImage(ho_ImageBotHat, out ho_ImageScaled5, 255 / (hv_Max - hv_Min),
                                (-(255 / (hv_Max - hv_Min))) * hv_Min);

        ho_ImageResult.Dispose();
        HOperatorSet.AddImage(ho_ImageScaled4, ho_ImageScaled5, out ho_ImageResult, 0.5,
                              0);
        HOperatorSet.MinMaxGray(ho_Region, ho_ImageResult, hv_MinMaxGrayPercent, out hv_Min,
                                out hv_Max, out hv_Range);
        ho_ImageScaled5And6.Dispose();
        HOperatorSet.ScaleImage(ho_ImageResult, out ho_ImageScaled5And6, 255 / (hv_Max - hv_Min),
                                (-(255 / (hv_Max - hv_Min))) * hv_Min);

        //
        ho_Region1.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageScaled5And6, out ho_Region1, "max_separability",
                                     "light", out hv_UsedThreshold2);
        ho_RegionClosing1.Dispose();
        HOperatorSet.ClosingRectangle1(ho_Region1, out ho_RegionClosing1, hv_HatWidth,
                                       hv_HatHeight);

        ho_RegionOpening.Dispose();
        HOperatorSet.OpeningRectangle1(ho_RegionClosing1, out ho_RegionOpening, hv_HatWidth * 2,
                                       hv_HatHeight * 2);
        ho_ConnectedRegions1.Dispose();
        HOperatorSet.Connection(ho_RegionOpening, out ho_ConnectedRegions1);
        ho_SelectedRegions2.Dispose();
        HOperatorSet.SelectShape(ho_ConnectedRegions1, out ho_SelectedRegions2, "area",
                                 "and", hv_SelectAreaMin, hv_SelectAreaMax);

        ho_RegionFillUp.Dispose();
        HOperatorSet.FillUp(ho_SelectedRegions2, out ho_RegionFillUp);

        ho_RegionClosing10.Dispose();
        HOperatorSet.ClosingRectangle1(ho_RegionFillUp, out ho_RegionClosing10, hv_RoughAreaClosingWidth,
                                       hv_RoughAreaClosingHeight);
        ho_RegionOpening12.Dispose();
        HOperatorSet.OpeningRectangle1(ho_RegionClosing10, out ho_RegionOpening12, hv_RoughAreaOpeningWidth,
                                       hv_RoughAreaOpeningHeight);


        //sobel
        ho_ImageReduced.Dispose();
        HOperatorSet.ReduceDomain(ho_Image, ho_Region, out ho_ImageReduced);
        ho_EdgeAmplitude.Dispose();
        HOperatorSet.SobelAmp(ho_Image, out ho_EdgeAmplitude, "sum_abs", hv_SobelAmpSize);
        HOperatorSet.Intensity(ho_Region, ho_EdgeAmplitude, out hv_Mean, out hv_Deviation);
        if ((int)(new HTuple(hv_Mean.TupleLess(hv_SobelAmpMeanMin))) != 0)
        {
            ho_FoundRegion.Dispose();
            HOperatorSet.GenEmptyRegion(out ho_FoundRegion);
            ho_Domain.Dispose();
            ho_Region.Dispose();
            ho_ImageScaled.Dispose();
            ho_SE.Dispose();
            ho_ImageTopHat.Dispose();
            ho_ImageScaled4.Dispose();
            ho_ImageBotHat.Dispose();
            ho_ImageScaled5.Dispose();
            ho_ImageResult.Dispose();
            ho_ImageScaled5And6.Dispose();
            ho_Region1.Dispose();
            ho_RegionClosing1.Dispose();
            ho_RegionOpening.Dispose();
            ho_ConnectedRegions1.Dispose();
            ho_SelectedRegions2.Dispose();
            ho_RegionFillUp.Dispose();
            ho_RegionClosing10.Dispose();
            ho_RegionOpening12.Dispose();
            ho_ImageReduced.Dispose();
            ho_EdgeAmplitude.Dispose();
            ho_Region2.Dispose();
            ho_RegionClosing22.Dispose();
            ho_ConnectedRegions2.Dispose();
            ho_RegionFillUp2.Dispose();
            ho_SelectedRegions3.Dispose();
            ho_RegionFillUp1.Dispose();
            ho_RegionClosing21.Dispose();
            ho_RegionOpening22.Dispose();
            ho_RegionIntersection.Dispose();
            ho_ConnectedRegions3.Dispose();

            return;
        }
        ho_Region2.Dispose();
        HOperatorSet.Threshold(ho_EdgeAmplitude, out ho_Region2, hv_SobelAmpThresholdMinGray,
                               255);
        ho_RegionClosing22.Dispose();
        HOperatorSet.ClosingRectangle1(ho_Region2, out ho_RegionClosing22, hv_HatWidth,
                                       hv_HatHeight);
        ho_ConnectedRegions2.Dispose();
        HOperatorSet.Connection(ho_RegionClosing22, out ho_ConnectedRegions2);
        ho_RegionFillUp2.Dispose();
        HOperatorSet.FillUp(ho_ConnectedRegions2, out ho_RegionFillUp2);
        ho_SelectedRegions3.Dispose();
        HOperatorSet.SelectShape(ho_RegionFillUp2, out ho_SelectedRegions3, "area", "and",
                                 hv_SelectAreaMin, 99999999);
        ho_RegionFillUp1.Dispose();
        HOperatorSet.FillUp(ho_SelectedRegions3, out ho_RegionFillUp1);
        ho_RegionClosing21.Dispose();
        HOperatorSet.ClosingRectangle1(ho_RegionFillUp1, out ho_RegionClosing21, hv_RoughAreaClosingWidth,
                                       hv_RoughAreaClosingHeight);
        //opening_rectangle1 (RegionClosing21, RegionOpening22, RoughAreaOpeningWidth, RoughAreaOpeningHeight)
        ho_RegionOpening22.Dispose();
        HOperatorSet.OpeningRectangle1(ho_RegionClosing21, out ho_RegionOpening22, hv_RoughAreaClosingWidth,
                                       hv_RoughAreaClosingHeight);
        //shape_trans (RegionOpening22, RegionTrans, 'rectangle2')

        //intersection
        ho_RegionIntersection.Dispose();
        HOperatorSet.Intersection(ho_RegionOpening22, ho_RegionOpening12, out ho_RegionIntersection
                                  );
        ho_ConnectedRegions3.Dispose();
        HOperatorSet.Connection(ho_RegionIntersection, out ho_ConnectedRegions3);
        ho_SelectedRegions3.Dispose();
        HOperatorSet.SelectShape(ho_ConnectedRegions3, out ho_SelectedRegions3, "area",
                                 "and", hv_SelectAreaMin, hv_SelectAreaMax);


        ho_FoundRegion.Dispose();
        HOperatorSet.MoveRegion(ho_SelectedRegions3, out ho_FoundRegion, 0, 0);

        ho_Domain.Dispose();
        ho_Region.Dispose();
        ho_ImageScaled.Dispose();
        ho_SE.Dispose();
        ho_ImageTopHat.Dispose();
        ho_ImageScaled4.Dispose();
        ho_ImageBotHat.Dispose();
        ho_ImageScaled5.Dispose();
        ho_ImageResult.Dispose();
        ho_ImageScaled5And6.Dispose();
        ho_Region1.Dispose();
        ho_RegionClosing1.Dispose();
        ho_RegionOpening.Dispose();
        ho_ConnectedRegions1.Dispose();
        ho_SelectedRegions2.Dispose();
        ho_RegionFillUp.Dispose();
        ho_RegionClosing10.Dispose();
        ho_RegionOpening12.Dispose();
        ho_ImageReduced.Dispose();
        ho_EdgeAmplitude.Dispose();
        ho_Region2.Dispose();
        ho_RegionClosing22.Dispose();
        ho_ConnectedRegions2.Dispose();
        ho_RegionFillUp2.Dispose();
        ho_SelectedRegions3.Dispose();
        ho_RegionFillUp1.Dispose();
        ho_RegionClosing21.Dispose();
        ho_RegionOpening22.Dispose();
        ho_RegionIntersection.Dispose();
        ho_ConnectedRegions3.Dispose();

        return;
    }
    // Procedures
    public void GetRegionBySobelAmp2(HObject ho_Image, out HObject ho_FoundRegion,
                                     HTuple hv_MedianRadius, HTuple hv_MeanMaskWidth, HTuple hv_MeanMaskHeight, HTuple hv_SobelAmpSize,
                                     HTuple hv_ScaleMult, HTuple hv_ScaleAdd, HTuple hv_AreaMin, HTuple hv_AreaMax,
                                     HTuple hv_OpeningWidth, HTuple hv_OpeningHeight, HTuple hv_ClosingWidth, HTuple hv_ClosingHeight,
                                     HTuple hv_ErosionWidth, HTuple hv_ErosionHeight, HTuple hv_DilationWidth, HTuple hv_DilationHeight)
    {
        // Stack for temporary objects
        HObject[] OTemp = new HObject[20];

        // Local iconic variables

        HObject ho_Domain, ho_ImageMedian, ho_ImageMean;
        HObject ho_EdgeAmplitude, ho_ImageScaled1, ho_ImageScaled;
        HObject ho_Region, ho_ConnectedRegions, ho_SelectedRegions;
        HObject ho_RegionFillUp, ho_RegionUnion;

        // Local control variables

        HTuple hv_Value = null, hv_UsedThreshold = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_FoundRegion);
        HOperatorSet.GenEmptyObj(out ho_Domain);
        HOperatorSet.GenEmptyObj(out ho_ImageMedian);
        HOperatorSet.GenEmptyObj(out ho_ImageMean);
        HOperatorSet.GenEmptyObj(out ho_EdgeAmplitude);
        HOperatorSet.GenEmptyObj(out ho_ImageScaled1);
        HOperatorSet.GenEmptyObj(out ho_ImageScaled);
        HOperatorSet.GenEmptyObj(out ho_Region);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
        HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
        HOperatorSet.GenEmptyObj(out ho_RegionUnion);
        ho_Domain.Dispose();
        HOperatorSet.GetDomain(ho_Image, out ho_Domain);

        ho_ImageMedian.Dispose();
        HOperatorSet.MedianImage(ho_Image, out ho_ImageMedian, "circle", hv_MedianRadius,
                                 "mirrored");
        ho_ImageMean.Dispose();
        HOperatorSet.MeanImage(ho_ImageMedian, out ho_ImageMean, hv_MeanMaskWidth, hv_MeanMaskHeight);

        ho_EdgeAmplitude.Dispose();
        HOperatorSet.SobelAmp(ho_ImageMean, out ho_EdgeAmplitude, "sum_abs", hv_SobelAmpSize);

        HOperatorSet.GrayFeatures(ho_Domain, ho_EdgeAmplitude, "mean", out hv_Value);
        ho_ImageScaled1.Dispose();
        HOperatorSet.ScaleImage(ho_EdgeAmplitude, out ho_ImageScaled1, 1, -hv_Value);

        ho_ImageScaled.Dispose();
        HOperatorSet.ScaleImage(ho_ImageScaled1, out ho_ImageScaled, hv_ScaleMult, hv_ScaleAdd);

        ho_Region.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageScaled, out ho_Region, "max_separability",
                                     "dark", out hv_UsedThreshold);

        ho_ConnectedRegions.Dispose();
        HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);
        ho_SelectedRegions.Dispose();
        HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area",
                                 "and", hv_AreaMin, hv_AreaMax);
        ho_RegionFillUp.Dispose();
        HOperatorSet.FillUp(ho_SelectedRegions, out ho_RegionFillUp);

        if ((int)((new HTuple(hv_OpeningWidth.TupleGreater(0))).TupleAnd(new HTuple(hv_OpeningHeight.TupleGreater(
                                                                                        0)))) != 0)
        {
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.OpeningRectangle1(ho_RegionFillUp, out ExpTmpOutVar_0, hv_OpeningWidth,
                                               hv_OpeningHeight);
                ho_RegionFillUp.Dispose();
                ho_RegionFillUp = ExpTmpOutVar_0;
            }
        }

        if ((int)((new HTuple(hv_ClosingWidth.TupleGreater(0))).TupleAnd(new HTuple(hv_ClosingHeight.TupleGreater(
                                                                                        0)))) != 0)
        {
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.ClosingRectangle1(ho_RegionFillUp, out ExpTmpOutVar_0, hv_ClosingWidth,
                                               hv_ClosingHeight);
                ho_RegionFillUp.Dispose();
                ho_RegionFillUp = ExpTmpOutVar_0;
            }
        }

        if ((int)((new HTuple(hv_ErosionWidth.TupleGreater(0))).TupleAnd(new HTuple(hv_ErosionHeight.TupleGreater(
                                                                                        0)))) != 0)
        {
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.ErosionRectangle1(ho_RegionFillUp, out ExpTmpOutVar_0, hv_ErosionWidth,
                                               hv_ErosionHeight);
                ho_RegionFillUp.Dispose();
                ho_RegionFillUp = ExpTmpOutVar_0;
            }
        }

        if ((int)((new HTuple(hv_DilationWidth.TupleGreater(0))).TupleAnd(new HTuple(hv_DilationHeight.TupleGreater(
                                                                                         0)))) != 0)
        {
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.DilationRectangle1(ho_RegionFillUp, out ExpTmpOutVar_0, hv_DilationWidth,
                                                hv_DilationHeight);
                ho_RegionFillUp.Dispose();
                ho_RegionFillUp = ExpTmpOutVar_0;
            }
        }

        ho_RegionUnion.Dispose();
        HOperatorSet.Union1(ho_RegionFillUp, out ho_RegionUnion);
        ho_FoundRegion.Dispose();
        HOperatorSet.MoveRegion(ho_RegionUnion, out ho_FoundRegion, 0, 0);

        ho_Domain.Dispose();
        ho_ImageMedian.Dispose();
        ho_ImageMean.Dispose();
        ho_EdgeAmplitude.Dispose();
        ho_ImageScaled1.Dispose();
        ho_ImageScaled.Dispose();
        ho_Region.Dispose();
        ho_ConnectedRegions.Dispose();
        ho_SelectedRegions.Dispose();
        ho_RegionFillUp.Dispose();
        ho_RegionUnion.Dispose();

        return;
    }
Beispiel #11
0
    // Procedures
    public void image_seg_paper(HObject ho_Image, out HObject ho_Image_rectified,
                                HTuple hv_WindowHandle, HTuple hv_factorScale)
    {
        // Local iconic variables

        HObject ho_Region, ho_RegionFill, ho_ConnectedRegions;
        HObject ho_Paper, ho_Image_trans, ho_Rectangle, ho_Mask;

        // Local control variables

        HTuple hv_Width = new HTuple(), hv_Height = new HTuple();
        HTuple hv_UsedThreshold = new HTuple(), hv_Area = new HTuple();
        HTuple hv_Row = new HTuple(), hv_Column = new HTuple();
        HTuple hv_Rows = new HTuple(), hv_Cols = new HTuple();
        HTuple hv_DistanceHeight = new HTuple(), hv_DistanceRMax = new HTuple();
        HTuple hv_DistanceWidth = new HTuple(), hv_DistanceCMax = new HTuple();
        HTuple hv_XCoordCorners = new HTuple(), hv_YCoordCorners = new HTuple();
        HTuple hv_paperHeight = new HTuple(), hv_paperWidth = new HTuple();
        HTuple hv_HomMat2D = new HTuple();

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_Image_rectified);
        HOperatorSet.GenEmptyObj(out ho_Region);
        HOperatorSet.GenEmptyObj(out ho_RegionFill);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
        HOperatorSet.GenEmptyObj(out ho_Paper);
        HOperatorSet.GenEmptyObj(out ho_Image_trans);
        HOperatorSet.GenEmptyObj(out ho_Rectangle);
        HOperatorSet.GenEmptyObj(out ho_Mask);
        //** Prog
        hv_Width.Dispose(); hv_Height.Dispose();
        HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
        //对饱和度图像进行二值化

        //* Detecting Paper
        //auto_threshold (Saturation, Regions, 20)
        ho_Region.Dispose(); hv_UsedThreshold.Dispose();
        HOperatorSet.BinaryThreshold(ho_Image, out ho_Region, "max_separability", "light",
                                     out hv_UsedThreshold);
        ho_RegionFill.Dispose();
        HOperatorSet.FillUpShape(ho_Region, out ho_RegionFill, "area", 1, 40000);
        ho_ConnectedRegions.Dispose();
        HOperatorSet.Connection(ho_RegionFill, out ho_ConnectedRegions);

        hv_Area.Dispose(); hv_Row.Dispose(); hv_Column.Dispose();
        HOperatorSet.AreaCenter(ho_ConnectedRegions, out hv_Area, out hv_Row, out hv_Column);
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
            ho_Paper.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_Paper, "area", "and", hv_Area.TupleMax()
                                     , 9999999);
        }


        //* Detecting Corner

        hv_Rows.Dispose(); hv_Cols.Dispose();
        region_get_corner(ho_Image, ho_Paper, hv_WindowHandle, out hv_Rows, out hv_Cols);
        //计算分割角点质检距离
        //Distance := []
        //for Index := 1 to 4 by 1
        //if (Index == 4)
        //distance_pp (Rows[Index], Cols[Index], Rows[1], Cols[1], Distance)
        //break
        //endif
        //distance_pp (Rows[Index], Cols[Index], Rows[Index+1], Cols[Index+1], Distance)
        //endfor
        //dev_set_colored (12)
        //for Index := 1 to 4 by 1
        //disp_circle (WindowHandle, Rows[Index], Cols[Index], 64)
        //endfor
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
            hv_DistanceHeight.Dispose(); hv_DistanceRMax.Dispose();
            HOperatorSet.DistanceSs(hv_Rows.TupleSelect(1), hv_Cols.TupleSelect(1), hv_Rows.TupleSelect(
                                        2), hv_Cols.TupleSelect(2), hv_Rows.TupleSelect(3), hv_Cols.TupleSelect(3),
                                    hv_Rows.TupleSelect(4), hv_Cols.TupleSelect(4), out hv_DistanceHeight, out hv_DistanceRMax);
        }
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
            hv_DistanceWidth.Dispose(); hv_DistanceCMax.Dispose();
            HOperatorSet.DistanceSs(hv_Rows.TupleSelect(2), hv_Cols.TupleSelect(2), hv_Rows.TupleSelect(
                                        3), hv_Cols.TupleSelect(3), hv_Rows.TupleSelect(1), hv_Cols.TupleSelect(1),
                                    hv_Rows.TupleSelect(4), hv_Cols.TupleSelect(4), out hv_DistanceWidth, out hv_DistanceCMax);
        }



        hv_XCoordCorners.Dispose();
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
            hv_XCoordCorners = new HTuple();
            hv_XCoordCorners = hv_XCoordCorners.TupleConcat(hv_Rows.TupleSelect(
                                                                2));
            hv_XCoordCorners = hv_XCoordCorners.TupleConcat(hv_Rows.TupleSelect(
                                                                3));
            hv_XCoordCorners = hv_XCoordCorners.TupleConcat(hv_Rows.TupleSelect(
                                                                4));
            hv_XCoordCorners = hv_XCoordCorners.TupleConcat(hv_Rows.TupleSelect(
                                                                1));
        }
        hv_YCoordCorners.Dispose();
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
            hv_YCoordCorners = new HTuple();
            hv_YCoordCorners = hv_YCoordCorners.TupleConcat(hv_Cols.TupleSelect(
                                                                2));
            hv_YCoordCorners = hv_YCoordCorners.TupleConcat(hv_Cols.TupleSelect(
                                                                3));
            hv_YCoordCorners = hv_YCoordCorners.TupleConcat(hv_Cols.TupleSelect(
                                                                4));
            hv_YCoordCorners = hv_YCoordCorners.TupleConcat(hv_Cols.TupleSelect(
                                                                1));
        }

        //factorScale := 0.5
        hv_paperHeight.Dispose();
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
            hv_paperHeight = hv_factorScale * hv_DistanceHeight;
        }
        hv_paperWidth.Dispose();
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
            hv_paperWidth = hv_factorScale * hv_DistanceWidth;
        }

        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
            hv_HomMat2D.Dispose();
            HOperatorSet.HomVectorToProjHomMat2d(hv_XCoordCorners, hv_YCoordCorners, (((new HTuple(1)).TupleConcat(
                                                                                           1)).TupleConcat(1)).TupleConcat(1), (((((new HTuple(0)).TupleConcat(hv_paperHeight))).TupleConcat(
                                                                                                                                     hv_paperHeight))).TupleConcat(0), ((((new HTuple(0)).TupleConcat(0)).TupleConcat(
                                                                                                                                                                             hv_paperWidth))).TupleConcat(hv_paperWidth), (((new HTuple(1)).TupleConcat(
                                                                                                                                                                                                                                1)).TupleConcat(1)).TupleConcat(1), "normalized_dlt", out hv_HomMat2D);
        }
        ho_Image_trans.Dispose();
        HOperatorSet.ProjectiveTransImage(ho_Image, out ho_Image_trans, hv_HomMat2D,
                                          "bilinear", "false", "false");
        ho_Rectangle.Dispose();
        HOperatorSet.GenRectangle1(out ho_Rectangle, 0, 0, hv_paperHeight, hv_paperWidth);
        ho_Mask.Dispose();
        HOperatorSet.ReduceDomain(ho_Image_trans, ho_Rectangle, out ho_Mask);
        ho_Image_rectified.Dispose();
        HOperatorSet.CropDomain(ho_Mask, out ho_Image_rectified);
        ho_Region.Dispose();
        ho_RegionFill.Dispose();
        ho_ConnectedRegions.Dispose();
        ho_Paper.Dispose();
        ho_Image_trans.Dispose();
        ho_Rectangle.Dispose();
        ho_Mask.Dispose();

        hv_Width.Dispose();
        hv_Height.Dispose();
        hv_UsedThreshold.Dispose();
        hv_Area.Dispose();
        hv_Row.Dispose();
        hv_Column.Dispose();
        hv_Rows.Dispose();
        hv_Cols.Dispose();
        hv_DistanceHeight.Dispose();
        hv_DistanceRMax.Dispose();
        hv_DistanceWidth.Dispose();
        hv_DistanceCMax.Dispose();
        hv_XCoordCorners.Dispose();
        hv_YCoordCorners.Dispose();
        hv_paperHeight.Dispose();
        hv_paperWidth.Dispose();
        hv_HomMat2D.Dispose();

        return;
    }
Beispiel #12
0
    // Procedures
    public void GetRegionByBinaryThreshold(HObject ho_Image, out HObject ho_FoundRegion,
                                           HTuple hv_MedianRadius, HTuple hv_EmpWidth, HTuple hv_EmpHeight, HTuple hv_EmpFactor,
                                           HTuple hv_LightDark, HTuple hv_AreaMin, HTuple hv_AreaMax, HTuple hv_ClosingRadius,
                                           HTuple hv_DilationRadius)
    {
        // Stack for temporary objects
        HObject[] OTemp = new HObject[20];

        // Local iconic variables

        HObject ho_ImageMedian, ho_ImageEmphasize;
        HObject ho_Regions, ho_ConnectedRegions, ho_SelectedRegions;
        HObject ho_RegionFillUp, ho_RegionUnion;

        // Local control variables

        HTuple hv_UsedThreshold = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_FoundRegion);
        HOperatorSet.GenEmptyObj(out ho_ImageMedian);
        HOperatorSet.GenEmptyObj(out ho_ImageEmphasize);
        HOperatorSet.GenEmptyObj(out ho_Regions);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
        HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
        HOperatorSet.GenEmptyObj(out ho_RegionUnion);
        ho_ImageMedian.Dispose();
        HOperatorSet.MedianImage(ho_Image, out ho_ImageMedian, "circle", hv_MedianRadius,
                                 "continued");
        ho_ImageEmphasize.Dispose();
        HOperatorSet.Emphasize(ho_ImageMedian, out ho_ImageEmphasize, hv_EmpWidth, hv_EmpHeight,
                               hv_EmpFactor);
        ho_Regions.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageEmphasize, out ho_Regions, "max_separability",
                                     hv_LightDark, out hv_UsedThreshold);
        ho_ConnectedRegions.Dispose();
        HOperatorSet.Connection(ho_Regions, out ho_ConnectedRegions);
        ho_SelectedRegions.Dispose();
        HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area",
                                 "and", hv_AreaMin, hv_AreaMax);
        ho_RegionFillUp.Dispose();
        HOperatorSet.FillUp(ho_SelectedRegions, out ho_RegionFillUp);

        if ((int)(new HTuple(hv_ClosingRadius.TupleGreater(0))) != 0)
        {
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.ClosingCircle(ho_RegionFillUp, out ExpTmpOutVar_0, hv_ClosingRadius);
                ho_RegionFillUp.Dispose();
                ho_RegionFillUp = ExpTmpOutVar_0;
            }
        }

        if ((int)(new HTuple(hv_DilationRadius.TupleGreater(0))) != 0)
        {
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.DilationCircle(ho_RegionFillUp, out ExpTmpOutVar_0, hv_DilationRadius);
                ho_RegionFillUp.Dispose();
                ho_RegionFillUp = ExpTmpOutVar_0;
            }
        }

        ho_RegionUnion.Dispose();
        HOperatorSet.Union1(ho_RegionFillUp, out ho_RegionUnion);
        ho_FoundRegion.Dispose();
        HOperatorSet.MoveRegion(ho_RegionUnion, out ho_FoundRegion, 0, 0);

        ho_ImageMedian.Dispose();
        ho_ImageEmphasize.Dispose();
        ho_Regions.Dispose();
        ho_ConnectedRegions.Dispose();
        ho_SelectedRegions.Dispose();
        ho_RegionFillUp.Dispose();
        ho_RegionUnion.Dispose();

        return;
    }
Beispiel #13
0
        public void ForeignMaterial(HObject ho_GrayImage, out HObject ho_Contours, HTuple hv_Row,
                                    HTuple hv_Column, out HTuple hv_string, out HTuple hv_flag)
        {
            // Local iconic variables

            HObject ho_Rectangle_cut, ho_ImageReduced_cut;
            HObject ho_Region, ho_RegionErosion1, ho_ConnectedRegions1;
            HObject ho_RegionFillUp2, ho_SelectedRegions, ho_RegionDilation1;
            HObject ho_RegionFillUp, ho_RegionErosion, ho_ConnectedRegions;
            HObject ho_SelectedRegions1, ho_RegionUnion, ho_ImageReduced1;
            HObject ho_Region1;

            // Local control variables

            HTuple hv_Row_st = null, hv_Col_st = null;
            HTuple hv_UsedThreshold = null, hv_Area = null, hv_Row1 = null;
            HTuple hv_Column1 = null, hv_area = null;

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Contours);
            HOperatorSet.GenEmptyObj(out ho_Rectangle_cut);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced_cut);
            HOperatorSet.GenEmptyObj(out ho_Region);
            HOperatorSet.GenEmptyObj(out ho_RegionErosion1);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_RegionFillUp2);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation1);
            HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
            HOperatorSet.GenEmptyObj(out ho_RegionErosion);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_RegionUnion);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced1);
            HOperatorSet.GenEmptyObj(out ho_Region1);
            hv_string = "";
            hv_flag   = 0;
            hv_Row_st = hv_Row.Clone();
            hv_Col_st = hv_Column.Clone();
            ho_Rectangle_cut.Dispose();
            HOperatorSet.GenRectangle1(out ho_Rectangle_cut, hv_Row_st - 150, hv_Col_st - 200,
                                       hv_Row_st + 180, hv_Col_st + 230);
            ho_ImageReduced_cut.Dispose();
            HOperatorSet.ReduceDomain(ho_GrayImage, ho_Rectangle_cut, out ho_ImageReduced_cut
                                      );
            ho_Region.Dispose();
            HOperatorSet.BinaryThreshold(ho_ImageReduced_cut, out ho_Region, "max_separability",
                                         "light", out hv_UsedThreshold);
            ho_RegionErosion1.Dispose();
            HOperatorSet.ErosionRectangle1(ho_Region, out ho_RegionErosion1, 5, 1);
            ho_ConnectedRegions1.Dispose();
            HOperatorSet.Connection(ho_RegionErosion1, out ho_ConnectedRegions1);
            ho_RegionFillUp2.Dispose();
            HOperatorSet.FillUp(ho_ConnectedRegions1, out ho_RegionFillUp2);
            ho_SelectedRegions.Dispose();
            HOperatorSet.SelectShape(ho_RegionFillUp2, out ho_SelectedRegions, (new HTuple("width")).TupleConcat(
                                         "area"), "and", (new HTuple(100)).TupleConcat(2000), (new HTuple(400)).TupleConcat(
                                         999999));
            ho_RegionDilation1.Dispose();
            HOperatorSet.DilationCircle(ho_SelectedRegions, out ho_RegionDilation1, 3);
            ho_RegionFillUp.Dispose();
            HOperatorSet.FillUp(ho_RegionDilation1, out ho_RegionFillUp);
            ho_RegionErosion.Dispose();
            HOperatorSet.ErosionCircle(ho_RegionFillUp, out ho_RegionErosion, 7);
            ho_ConnectedRegions.Dispose();
            HOperatorSet.Connection(ho_RegionErosion, out ho_ConnectedRegions);
            ho_SelectedRegions1.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions1, (new HTuple("width")).TupleConcat(
                                         "area"), "and", (new HTuple(100)).TupleConcat(2000), (new HTuple(400)).TupleConcat(
                                         999999));
            ho_RegionUnion.Dispose();
            HOperatorSet.Union1(ho_SelectedRegions1, out ho_RegionUnion);
            ho_ImageReduced1.Dispose();
            HOperatorSet.ReduceDomain(ho_GrayImage, ho_RegionUnion, out ho_ImageReduced1);
            ho_Region1.Dispose();
            HOperatorSet.Threshold(ho_ImageReduced1, out ho_Region1, 0, 40);
            HOperatorSet.AreaCenter(ho_Region1, out hv_Area, out hv_Row1, out hv_Column1);
            ho_Contours.Dispose();
            HOperatorSet.GenContourRegionXld(ho_Region1, out ho_Contours, "border");
            hv_area = hv_Area.TupleSum();
            if ((int)(new HTuple(hv_area.TupleGreater(100))) != 0)
            {
                hv_string = "Foreign material";
                hv_flag   = 2;

                //错误2:外来物检测
            }
            else
            {
                hv_flag = 1;
            }
            ho_Rectangle_cut.Dispose();
            ho_ImageReduced_cut.Dispose();
            ho_Region.Dispose();
            ho_RegionErosion1.Dispose();
            ho_ConnectedRegions1.Dispose();
            ho_RegionFillUp2.Dispose();
            ho_SelectedRegions.Dispose();
            ho_RegionDilation1.Dispose();
            ho_RegionFillUp.Dispose();
            ho_RegionErosion.Dispose();
            ho_ConnectedRegions.Dispose();
            ho_SelectedRegions1.Dispose();
            ho_RegionUnion.Dispose();
            ho_ImageReduced1.Dispose();
            ho_Region1.Dispose();

            return;
        }
        // Main procedure
        private void action(HObject x)
        {
            ho_Image = x;
            //ho_Image.Dispose();
            //Local iconic variables 定义图像变量
            //HObject ho_Image, ho_GrayImage, ho_Regions;
            //HObject ho_Connection, ho_RegionResult, ho_SelectedRegions;
            //HObject ho_RegionFillUp, ho_RegionDilation, ho_RegionUnion;
            //HObject ho_ImageReduced, ho_Regions1, ho_RegionErosion;
            //HObject ho_ConnectedRegions, ho_SelectedRegions1, ho_RegionDilation1;
            //HObject ho_SortedRegions, ho_ObjectSelected_1 = null;

            //// Local control variables 定义控制变量

            //HTuple hv_Width = null, hv_Height = null, hv_WindowHandle = new HTuple();
            //HTuple hv_UsedThreshold = null, hv_UsedThreshold1 = null;
            //HTuple hv_Number = null, hv_Area = null, hv_Row = null;
            //HTuple hv_Column = null, hv_i = null, hv_Area1 = null;
            //HTuple hv_Row1 = null, hv_Column1 = null, hv_Area2 = null;
            //HTuple hv_area = null, hv_bizhong = null;
            // Initialize local and output iconic variables 初始化本地图像变量和输出图像变量
            HOperatorSet.GenEmptyObj(out ho_Image);
            HOperatorSet.GenEmptyObj(out ho_GrayImage);
            HOperatorSet.GenEmptyObj(out ho_Regions);
            HOperatorSet.GenEmptyObj(out ho_Connection);
            HOperatorSet.GenEmptyObj(out ho_RegionResult);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
            HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation);
            HOperatorSet.GenEmptyObj(out ho_RegionUnion);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced);
            HOperatorSet.GenEmptyObj(out ho_Regions1);
            HOperatorSet.GenEmptyObj(out ho_RegionErosion);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation1);
            HOperatorSet.GenEmptyObj(out ho_SortedRegions);
            HOperatorSet.GenEmptyObj(out ho_ObjectSelected_1);

            //程序开始
            HOperatorSet.SetDraw(hv_ExpDefaultWinHandle, "fill");
            HOperatorSet.SetColored(hv_ExpDefaultWinHandle, 12);
            //读取图片
            ho_Image.Dispose();
            HOperatorSet.ReadImage(out ho_Image, "E:/WORKS/halcon/zhao_jobs/zhao_jobs/1-500-2.JPG");
            //dev_close_window(...);
            HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
            //获取图像窗口
            //dev_open_window(...);
            //彩色图转成灰度图
            ho_GrayImage.Dispose();
            HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
            //阈值处理
            ho_Regions.Dispose();
            HOperatorSet.BinaryThreshold(ho_GrayImage, out ho_Regions, "max_separability",
                                         "dark", out hv_UsedThreshold);
            //求图像联通域
            ho_Connection.Dispose();
            HOperatorSet.Connection(ho_Regions, out ho_Connection);
            //将区域闭合
            ho_RegionResult.Dispose();
            HOperatorSet.CloseEdges(ho_Connection, ho_GrayImage, out ho_RegionResult, 16);
            //选择合适的区域
            ho_SelectedRegions.Dispose();
            HOperatorSet.SelectShape(ho_RegionResult, out ho_SelectedRegions, "area", "and", 2040.82, 200000);
            //填充区域孔洞
            ho_RegionFillUp.Dispose();
            HOperatorSet.FillUp(ho_SelectedRegions, out ho_RegionFillUp);
            //区域膨胀处理
            ho_RegionDilation.Dispose();
            HOperatorSet.DilationCircle(ho_RegionFillUp, out ho_RegionDilation, 15.5);
            //将区域群合成一个区域
            ho_RegionUnion.Dispose();
            HOperatorSet.Union2(ho_RegionDilation, ho_RegionDilation, out ho_RegionUnion);
            // 获取刚兴趣区域图像
            ho_ImageReduced.Dispose();
            HOperatorSet.ReduceDomain(ho_GrayImage, ho_RegionUnion, out ho_ImageReduced);
            //对感兴趣区域图像进行阈值处理
            ho_Regions1.Dispose();
            HOperatorSet.BinaryThreshold(ho_ImageReduced, out ho_Regions1, "max_separability", "dark", out hv_UsedThreshold1);
            //区域腐蚀处理,用于去除区域之间的粘结
            ho_RegionErosion.Dispose();
            HOperatorSet.ErosionCircle(ho_Regions1, out ho_RegionErosion, 1.5);
            //求图像连通域
            ho_ConnectedRegions.Dispose();
            HOperatorSet.Connection(ho_RegionErosion, out ho_ConnectedRegions);
            //选择合适的颗粒,去除无用的杂物
            ho_SelectedRegions1.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions1, "area", "and", 2000, 9999999);
            //对颗粒进行膨胀处理
            ho_RegionDilation1.Dispose();
            HOperatorSet.DilationCircle(ho_SelectedRegions1, out ho_RegionDilation1, 10.5);
            //数颗粒的个数
            HOperatorSet.CountObj(ho_RegionDilation1, out hv_Number);
            //对颗粒按照第一个点的行坐标进行排序
            ho_SortedRegions.Dispose();
            HOperatorSet.SortRegion(ho_RegionDilation1, out ho_SortedRegions, "first_point", "false", "row");
            //求颗粒的面积和中心坐标
            HOperatorSet.AreaCenter(ho_SortedRegions, out hv_Area, out hv_Row, out hv_Column);
            //显示图像和选中的颗粒
            HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
            HOperatorSet.DispObj(ho_SortedRegions, hv_ExpDefaultWinHandle);
            //显示图像的代码
            HTuple end_val47  = hv_Number;
            HTuple step_val47 = 1;

            for (hv_i = 1; hv_i.Continue(end_val47, step_val47); hv_i = hv_i.TupleAdd(step_val47))
            {
                ho_ObjectSelected_1.Dispose();
                HOperatorSet.SelectObj(ho_SortedRegions, out ho_ObjectSelected_1, hv_i);
                HOperatorSet.SetColor(hv_ExpDefaultWinHandle, "red");
                HOperatorSet.DispObj(ho_ObjectSelected_1, hv_ExpDefaultWinHandle);
                HOperatorSet.SetTposition(hv_ExpDefaultWinHandle, hv_Row.TupleSelect(hv_i - 1),
                                          hv_Column.TupleSelect(hv_i - 1));
                HOperatorSet.SetColor(hv_ExpDefaultWinHandle, "white");
                HOperatorSet.WriteString(hv_ExpDefaultWinHandle, hv_i);
                //write_string (WindowHandle, Area[i-1])
            }
            //求面积占比
            HOperatorSet.AreaCenter(ho_Regions, out hv_Area1, out hv_Row1, out hv_Column1);
            hv_Area2   = hv_Area1.TupleReal();
            hv_area    = ((hv_Width * hv_Height)).TupleReal();
            hv_bizhong = hv_Area2 / hv_area;
            bizhong    = hv_bizhong;
            //decompose3 (Image, Image1, Image2, Image3)
            ho_Image.Dispose();
            ho_GrayImage.Dispose();
            ho_Regions.Dispose();
            ho_Connection.Dispose();
            ho_RegionResult.Dispose();
            ho_SelectedRegions.Dispose();
            ho_RegionFillUp.Dispose();
            ho_RegionDilation.Dispose();
            ho_RegionUnion.Dispose();
            ho_ImageReduced.Dispose();
            ho_Regions1.Dispose();
            ho_RegionErosion.Dispose();
            ho_ConnectedRegions.Dispose();
            ho_SelectedRegions1.Dispose();
            ho_RegionDilation1.Dispose();
            ho_SortedRegions.Dispose();
            ho_ObjectSelected_1.Dispose();
        }
    // Procedures
    // Local procedures
    public void EnhanceEdgeAreaByBinaryThresholdWithMean(HObject ho_InputImage, out HObject ho_EnhancedImage,
                                                         out HObject ho_EnhancedRegion, HTuple hv_MeanMaskWidth, HTuple hv_MeanMaskHeight,
                                                         HTuple hv_EmpWidth, HTuple hv_EmpHeight, HTuple hv_EmpFactor, HTuple hv_LightDark,
                                                         HTuple hv_AreaMin, HTuple hv_AreaMax, HTuple hv_ClosingWidth, HTuple hv_ClosingHeight,
                                                         HTuple hv_DilationRadius)
    {
        // Stack for temporary objects
        HObject[] OTemp = new HObject[20];

        // Local iconic variables

        HObject ho_Domain, ho_ImageMean, ho_ImageEmphasize;
        HObject ho_Regions, ho_ConnectedRegions, ho_SelectedRegions;
        HObject ho_RegionFillUp, ho_RegionUnion, ho_ImageNew, ho_RegionComplement;

        // Local control variables

        HTuple hv_Width = null, hv_Height = null, hv_UsedThreshold = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_EnhancedImage);
        HOperatorSet.GenEmptyObj(out ho_EnhancedRegion);
        HOperatorSet.GenEmptyObj(out ho_Domain);
        HOperatorSet.GenEmptyObj(out ho_ImageMean);
        HOperatorSet.GenEmptyObj(out ho_ImageEmphasize);
        HOperatorSet.GenEmptyObj(out ho_Regions);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
        HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
        HOperatorSet.GenEmptyObj(out ho_RegionUnion);
        HOperatorSet.GenEmptyObj(out ho_ImageNew);
        HOperatorSet.GenEmptyObj(out ho_RegionComplement);
        ho_Domain.Dispose();
        HOperatorSet.GetDomain(ho_InputImage, out ho_Domain);
        HOperatorSet.RegionFeatures(ho_Domain, "width", out hv_Width);
        HOperatorSet.RegionFeatures(ho_Domain, "height", out hv_Height);

        ho_ImageMean.Dispose();
        HOperatorSet.MeanImage(ho_InputImage, out ho_ImageMean, hv_MeanMaskWidth, hv_MeanMaskHeight);
        ho_ImageEmphasize.Dispose();
        HOperatorSet.Emphasize(ho_ImageMean, out ho_ImageEmphasize, hv_EmpWidth, hv_EmpHeight,
                               hv_EmpFactor);
        ho_Regions.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageEmphasize, out ho_Regions, "max_separability",
                                     hv_LightDark, out hv_UsedThreshold);
        ho_ConnectedRegions.Dispose();
        HOperatorSet.Connection(ho_Regions, out ho_ConnectedRegions);
        ho_SelectedRegions.Dispose();
        HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area",
                                 "and", hv_AreaMin, hv_AreaMax);
        ho_RegionFillUp.Dispose();
        HOperatorSet.FillUp(ho_SelectedRegions, out ho_RegionFillUp);

        if ((int)((new HTuple(hv_ClosingWidth.TupleGreater(0))).TupleAnd(new HTuple(hv_ClosingHeight.TupleGreater(
                                                                                        0)))) != 0)
        {
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.ClosingRectangle1(ho_RegionFillUp, out ExpTmpOutVar_0, hv_ClosingWidth,
                                               hv_ClosingHeight);
                ho_RegionFillUp.Dispose();
                ho_RegionFillUp = ExpTmpOutVar_0;
            }
        }

        if ((int)(new HTuple(hv_DilationRadius.TupleGreater(0))) != 0)
        {
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.DilationCircle(ho_RegionFillUp, out ExpTmpOutVar_0, hv_DilationRadius);
                ho_RegionFillUp.Dispose();
                ho_RegionFillUp = ExpTmpOutVar_0;
            }
        }

        ho_RegionUnion.Dispose();
        HOperatorSet.Union1(ho_RegionFillUp, out ho_RegionUnion);
        ho_EnhancedRegion.Dispose();
        HOperatorSet.MoveRegion(ho_RegionUnion, out ho_EnhancedRegion, 0, 0);

        ho_ImageNew.Dispose();
        HOperatorSet.ChangeDomain(ho_InputImage, ho_Domain, out ho_ImageNew);
        ho_RegionComplement.Dispose();
        HOperatorSet.Complement(ho_RegionFillUp, out ho_RegionComplement);
        ho_EnhancedImage.Dispose();
        HOperatorSet.PaintRegion(ho_RegionFillUp, ho_ImageNew, out ho_EnhancedImage,
                                 255, "fill");
        HOperatorSet.OverpaintRegion(ho_EnhancedImage, ho_RegionComplement, 0, "fill");

        ho_Domain.Dispose();
        ho_ImageMean.Dispose();
        ho_ImageEmphasize.Dispose();
        ho_Regions.Dispose();
        ho_ConnectedRegions.Dispose();
        ho_SelectedRegions.Dispose();
        ho_RegionFillUp.Dispose();
        ho_RegionUnion.Dispose();
        ho_ImageNew.Dispose();
        ho_RegionComplement.Dispose();

        return;
    }
        //

        private void read_button_Click(object sender, EventArgs e)
        {
            //程序开始
            HOperatorSet.SetDraw(hv_ExpDefaultWinHandle, "fill");
            HOperatorSet.SetColored(hv_ExpDefaultWinHandle, 12);
            //读取图片
            //ho_Image.Dispose();
            //HOperatorSet.ReadImage(out ho_Image, "E:/WORKS/halcon/zhao_jobs/zhao_jobs/1-500-2.JPG");
            //dev_close_window(...);
            HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
            //获取图像窗口
            //dev_open_window(...);
            //彩色图转成灰度图
            ho_GrayImage.Dispose();
            HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
            //阈值处理
            ho_Regions.Dispose();
            HOperatorSet.BinaryThreshold(ho_GrayImage, out ho_Regions, "max_separability",
                                         "dark", out hv_UsedThreshold);
            //求图像联通域
            ho_Connection.Dispose();
            HOperatorSet.Connection(ho_Regions, out ho_Connection);
            //将区域闭合
            ho_RegionResult.Dispose();
            HOperatorSet.CloseEdges(ho_Connection, ho_GrayImage, out ho_RegionResult, 16);
            //选择合适的区域
            ho_SelectedRegions.Dispose();
            HOperatorSet.SelectShape(ho_RegionResult, out ho_SelectedRegions, "area", "and", 2040.82, 200000);
            //填充区域孔洞
            ho_RegionFillUp.Dispose();
            HOperatorSet.FillUp(ho_SelectedRegions, out ho_RegionFillUp);
            //区域膨胀处理
            ho_RegionDilation.Dispose();
            HOperatorSet.DilationCircle(ho_RegionFillUp, out ho_RegionDilation, 15.5);
            //将区域群合成一个区域
            ho_RegionUnion.Dispose();
            HOperatorSet.Union2(ho_RegionDilation, ho_RegionDilation, out ho_RegionUnion);
            // 获取刚兴趣区域图像
            ho_ImageReduced.Dispose();
            HOperatorSet.ReduceDomain(ho_GrayImage, ho_RegionUnion, out ho_ImageReduced);
            //对感兴趣区域图像进行阈值处理
            ho_Regions1.Dispose();
            HOperatorSet.BinaryThreshold(ho_ImageReduced, out ho_Regions1, "max_separability", "dark", out hv_UsedThreshold1);
            //区域腐蚀处理,用于去除区域之间的粘结
            ho_RegionErosion.Dispose();
            HOperatorSet.ErosionCircle(ho_Regions1, out ho_RegionErosion, 1.5);
            //求图像连通域
            ho_ConnectedRegions.Dispose();
            HOperatorSet.Connection(ho_RegionErosion, out ho_ConnectedRegions);
            //选择合适的颗粒,去除无用的杂物
            ho_SelectedRegions1.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions1, "area", "and", 2000, 9999999);
            //对颗粒进行膨胀处理
            ho_RegionDilation1.Dispose();
            HOperatorSet.DilationCircle(ho_SelectedRegions1, out ho_RegionDilation1, 10.5);
            //数颗粒的个数
            HOperatorSet.CountObj(ho_RegionDilation1, out hv_Number);
            //对颗粒按照第一个点的行坐标进行排序
            ho_SortedRegions.Dispose();
            HOperatorSet.SortRegion(ho_RegionDilation1, out ho_SortedRegions, "first_point", "false", "row");
            //求颗粒的面积和中心坐标
            HOperatorSet.AreaCenter(ho_SortedRegions, out hv_Area, out hv_Row, out hv_Column);
            //显示图像和选中的颗粒
            HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
            HOperatorSet.DispObj(ho_SortedRegions, hv_ExpDefaultWinHandle);
            //显示图像的代码
            HTuple end_val47  = hv_Number;
            HTuple step_val47 = 1;

            for (hv_i = 1; hv_i.Continue(end_val47, step_val47); hv_i = hv_i.TupleAdd(step_val47))
            {
                ho_ObjectSelected_1.Dispose();
                HOperatorSet.SelectObj(ho_SortedRegions, out ho_ObjectSelected_1, hv_i);
                HOperatorSet.SetColor(hv_ExpDefaultWinHandle, "red");
                HOperatorSet.DispObj(ho_ObjectSelected_1, hv_ExpDefaultWinHandle);
                HOperatorSet.SetTposition(hv_ExpDefaultWinHandle, hv_Row.TupleSelect(hv_i - 1),
                                          hv_Column.TupleSelect(hv_i - 1));
                HOperatorSet.SetColor(hv_ExpDefaultWinHandle, "white");
                HOperatorSet.WriteString(hv_ExpDefaultWinHandle, hv_i);
                //write_string (WindowHandle, Area[i-1])
            }
            //求面积占比
            HOperatorSet.AreaCenter(ho_Regions, out hv_Area1, out hv_Row1, out hv_Column1);
            hv_Area2   = hv_Area1.TupleReal();
            hv_area    = ((hv_Width * hv_Height)).TupleReal();
            hv_bizhong = hv_Area2 / hv_area;
            //计算颗粒的长度
            HOperatorSet.Contlength(ho_SortedRegions, out hv_ContLength);
            //计算颗粒的圆度
            HOperatorSet.Circularity(ho_SortedRegions, out hv_Circularity);
            //计算颗粒等效椭圆的长短轴
            HOperatorSet.EllipticAxis(ho_SortedRegions, out hv_Ra, out hv_Rb, out hv_Phi);
            //求长短轴之比
            HOperatorSet.TupleDiv(hv_Ra, hv_Rb, out hv_Quot);
            //定义总个数
            hv_all = 0;
            //定义圆形颗粒个数
            hv_ro = 0;
            //定义条形颗粒个数
            hv_ti = 0;
            //定义片状颗粒个数
            hv_pi = 0;
            HTuple end_val78  = hv_Number - 1;
            HTuple step_val78 = 1;

            for (hv_i = 0; hv_i.Continue(end_val78, step_val78); hv_i = hv_i.TupleAdd(step_val78))
            {
                if ((int)((new HTuple(((hv_ContLength.TupleSelect(hv_i))).TupleGreater(200))).TupleAnd(new HTuple(((hv_ContLength.TupleSelect(hv_i))).TupleLess(80000)))) != 0)
                {
                    hv_all = hv_all + 1;
                    if ((int)(new HTuple(((hv_Circularity.TupleSelect(hv_i))).TupleGreater(0.65))) != 0)
                    {
                        hv_ro = hv_ro + 1;
                    }
                    if ((int)(new HTuple(((hv_Quot.TupleSelect(hv_i))).TupleGreater(3))) != 0)
                    {
                        hv_ti = hv_ti + 1;
                    }
                    else
                    {
                        hv_pi = hv_pi + 1;
                    }
                }
            }
            //decompose3 (Image, Image1, Image2, Image3)
            ho_Image.Dispose();
            ho_GrayImage.Dispose();
            ho_Regions.Dispose();
            ho_Connection.Dispose();
            ho_RegionResult.Dispose();
            ho_SelectedRegions.Dispose();
            ho_RegionFillUp.Dispose();
            ho_RegionDilation.Dispose();
            ho_RegionUnion.Dispose();
            ho_ImageReduced.Dispose();
            ho_Regions1.Dispose();
            ho_RegionErosion.Dispose();
            ho_ConnectedRegions.Dispose();
            ho_SelectedRegions1.Dispose();
            ho_RegionDilation1.Dispose();
            ho_SortedRegions.Dispose();
            ho_ObjectSelected_1.Dispose();
            MessageBox.Show("占图比重为:" + hv_bizhong + "\n颗粒个数:" + hv_Number + "\n圆形颗粒个数:" + hv_ro + "\n条形颗粒个数" + hv_ti + "\n片形颗粒个数" + hv_pi);
        }
    // Procedures
    public void GetRegionOfAntennaOfS1423(HObject ho_Image, out HObject ho_FoundRegion,
                                          HTuple hv_GrayOpeningMaskHeight, HTuple hv_GrayOpeningMaskWidth, HTuple hv_GrayDilationMaskHeight,
                                          HTuple hv_GrayDilationMaskWidth, HTuple hv_LightDark, HTuple hv_AreaMin, HTuple hv_AreaMax,
                                          HTuple hv_OpeningWidth, HTuple hv_OpeningHeight, HTuple hv_ClosingWidth, HTuple hv_ClosingHeight)
    {
        // Local iconic variables

        HObject ho_Domain, ho_ImageOpening = null, ho_ImageMax;
        HObject ho_ImageSub, ho_Region1, ho_ConnectedRegions, ho_SelectedRegions;
        HObject ho_RegionOpening;

        // Local control variables

        HTuple hv_DomainWidth = null, hv_DomainHeight = null;
        HTuple hv_UsedThreshold = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_FoundRegion);
        HOperatorSet.GenEmptyObj(out ho_Domain);
        HOperatorSet.GenEmptyObj(out ho_ImageOpening);
        HOperatorSet.GenEmptyObj(out ho_ImageMax);
        HOperatorSet.GenEmptyObj(out ho_ImageSub);
        HOperatorSet.GenEmptyObj(out ho_Region1);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
        HOperatorSet.GenEmptyObj(out ho_RegionOpening);
        ho_Domain.Dispose();
        HOperatorSet.GetDomain(ho_Image, out ho_Domain);
        HOperatorSet.RegionFeatures(ho_Domain, "width", out hv_DomainWidth);
        HOperatorSet.RegionFeatures(ho_Domain, "height", out hv_DomainHeight);

        if ((int)(new HTuple(hv_GrayOpeningMaskHeight.TupleLessEqual(0))) != 0)
        {
            ho_ImageOpening.Dispose();
            HOperatorSet.GrayOpeningRect(ho_Image, out ho_ImageOpening, hv_DomainHeight,
                                         hv_GrayOpeningMaskWidth);
        }
        else if ((int)(new HTuple(hv_GrayOpeningMaskWidth.TupleLessEqual(0))) != 0)
        {
            ho_ImageOpening.Dispose();
            HOperatorSet.GrayOpeningRect(ho_Image, out ho_ImageOpening, hv_GrayOpeningMaskHeight,
                                         hv_DomainWidth);
        }
        else
        {
            ho_ImageOpening.Dispose();
            HOperatorSet.GrayOpeningRect(ho_Image, out ho_ImageOpening, hv_GrayOpeningMaskHeight,
                                         hv_GrayOpeningMaskWidth);
        }


        ho_ImageMax.Dispose();
        HOperatorSet.GrayDilationRect(ho_ImageOpening, out ho_ImageMax, hv_GrayDilationMaskHeight,
                                      hv_GrayDilationMaskWidth);

        ho_ImageSub.Dispose();
        HOperatorSet.SubImage(ho_Image, ho_ImageMax, out ho_ImageSub, 1, 0);
        //scale_image_max (ImageSub, ImageScaleMax)
        ho_Region1.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageSub, out ho_Region1, "max_separability",
                                     hv_LightDark, out hv_UsedThreshold);

        ho_ConnectedRegions.Dispose();
        HOperatorSet.Connection(ho_Region1, out ho_ConnectedRegions);
        ho_SelectedRegions.Dispose();
        HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area",
                                 "and", hv_AreaMin, hv_AreaMax);

        ho_RegionOpening.Dispose();
        HOperatorSet.OpeningRectangle1(ho_SelectedRegions, out ho_RegionOpening, hv_OpeningWidth,
                                       hv_OpeningHeight);
        ho_FoundRegion.Dispose();
        HOperatorSet.ClosingRectangle1(ho_RegionOpening, out ho_FoundRegion, hv_ClosingWidth,
                                       hv_ClosingHeight);

        ho_Domain.Dispose();
        ho_ImageOpening.Dispose();
        ho_ImageMax.Dispose();
        ho_ImageSub.Dispose();
        ho_Region1.Dispose();
        ho_ConnectedRegions.Dispose();
        ho_SelectedRegions.Dispose();
        ho_RegionOpening.Dispose();

        return;
    }
    // Procedures
    public void EnhanceEdgeAreaByScale(HObject ho_InputImage, out HObject ho_EnhancedImage,
                                       out HObject ho_EnhancedEdge, HTuple hv_MeanMaskWidth, HTuple hv_MeanMaskHeight,
                                       HTuple hv_EdgeAreaLightDark, HTuple hv_ScaleAdd, HTuple hv_OpeningWidth, HTuple hv_OpeningHeight,
                                       HTuple hv_ClosingWidth, HTuple hv_ClosingHeight)
    {
        // Local iconic variables

        HObject ho_Domain, ho_ImageMean, ho_Region;
        HObject ho_ImageReduced, ho_ImageScaled = null, ho_Region1;
        HObject ho_RegionOpening, ho_RegionFillUp, ho_ImageNew;
        HObject ho_RegionComplement;

        // Local control variables

        HTuple hv_Width = null, hv_Height = null, hv_UsedThreshold = null;
        HTuple hv_Value = null, hv_UsedThreshold1 = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_EnhancedImage);
        HOperatorSet.GenEmptyObj(out ho_EnhancedEdge);
        HOperatorSet.GenEmptyObj(out ho_Domain);
        HOperatorSet.GenEmptyObj(out ho_ImageMean);
        HOperatorSet.GenEmptyObj(out ho_Region);
        HOperatorSet.GenEmptyObj(out ho_ImageReduced);
        HOperatorSet.GenEmptyObj(out ho_ImageScaled);
        HOperatorSet.GenEmptyObj(out ho_Region1);
        HOperatorSet.GenEmptyObj(out ho_RegionOpening);
        HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
        HOperatorSet.GenEmptyObj(out ho_ImageNew);
        HOperatorSet.GenEmptyObj(out ho_RegionComplement);
        ho_Domain.Dispose();
        HOperatorSet.GetDomain(ho_InputImage, out ho_Domain);
        HOperatorSet.RegionFeatures(ho_Domain, "width", out hv_Width);
        HOperatorSet.RegionFeatures(ho_Domain, "height", out hv_Height);

        ho_ImageMean.Dispose();
        HOperatorSet.MeanImage(ho_InputImage, out ho_ImageMean, hv_MeanMaskWidth, hv_MeanMaskHeight);

        ho_Region.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageMean, out ho_Region, "max_separability",
                                     hv_EdgeAreaLightDark, out hv_UsedThreshold);
        ho_ImageReduced.Dispose();
        HOperatorSet.ReduceDomain(ho_ImageMean, ho_Region, out ho_ImageReduced);

        HOperatorSet.GrayFeatures(ho_Region, ho_ImageReduced, "mean", out hv_Value);

        if ((int)(new HTuple(hv_EdgeAreaLightDark.TupleEqual("dark"))) != 0)
        {
            ho_ImageScaled.Dispose();
            HOperatorSet.ScaleImage(ho_ImageReduced, out ho_ImageScaled, 1, (-hv_Value) + hv_ScaleAdd);
        }
        else if ((int)(new HTuple(hv_EdgeAreaLightDark.TupleEqual("light"))) != 0)
        {
            ho_ImageScaled.Dispose();
            HOperatorSet.ScaleImage(ho_ImageReduced, out ho_ImageScaled, 1, (255 - hv_Value) + hv_ScaleAdd);
        }

        ho_Region1.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageScaled, out ho_Region1, "max_separability",
                                     hv_EdgeAreaLightDark, out hv_UsedThreshold1);

        ho_RegionOpening.Dispose();
        HOperatorSet.OpeningRectangle1(ho_Region1, out ho_RegionOpening, hv_OpeningWidth,
                                       hv_MeanMaskHeight);
        ho_EnhancedEdge.Dispose();
        HOperatorSet.ClosingRectangle1(ho_RegionOpening, out ho_EnhancedEdge, hv_ClosingWidth,
                                       hv_ClosingHeight);
        ho_RegionFillUp.Dispose();
        HOperatorSet.FillUp(ho_EnhancedEdge, out ho_RegionFillUp);

        ho_ImageNew.Dispose();
        HOperatorSet.ChangeDomain(ho_InputImage, ho_Domain, out ho_ImageNew);
        ho_RegionComplement.Dispose();
        HOperatorSet.Complement(ho_RegionFillUp, out ho_RegionComplement);
        ho_EnhancedImage.Dispose();
        HOperatorSet.PaintRegion(ho_RegionFillUp, ho_ImageNew, out ho_EnhancedImage,
                                 255, "fill");
        HOperatorSet.OverpaintRegion(ho_EnhancedImage, ho_RegionComplement, 0, "fill");

        ho_Domain.Dispose();
        ho_ImageMean.Dispose();
        ho_Region.Dispose();
        ho_ImageReduced.Dispose();
        ho_ImageScaled.Dispose();
        ho_Region1.Dispose();
        ho_RegionOpening.Dispose();
        ho_RegionFillUp.Dispose();
        ho_ImageNew.Dispose();
        ho_RegionComplement.Dispose();

        return;
    }
Beispiel #19
0
    // Procedures
    public void EnhanceEdgeAreaH1403(HObject ho_Image, out HObject ho_EnhancedImage,
                                     out HObject ho_EnhancedEdge, HTuple hv_AreaLightDark, HTuple hv_WidthMin, HTuple hv_WidthMax,
                                     HTuple hv_HeightMin, HTuple hv_HeightMax, HTuple hv_SortMode, HTuple hv_Order,
                                     HTuple hv_RowOrCol, HTuple hv_SelectIndex, HTuple hv_MeanMaskWidth, HTuple hv_MeanMaskHeight)
    {
        // Local iconic variables

        HObject ho_Region, ho_ConnectedRegions, ho_SelectedRegions = null;
        HObject ho_SelectedRegions1 = null, ho_SortedRegions, ho_ObjectSelected;
        HObject ho_ImageReduced, ho_ImageMean, ho_ImageScaled = null;
        HObject ho_ImageScaleMax;

        // Local control variables

        HTuple hv_Width = null, hv_Height = null, hv_UsedThreshold = null;
        HTuple hv_Value = null, hv_UsedThreshold1 = null;

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_EnhancedImage);
        HOperatorSet.GenEmptyObj(out ho_EnhancedEdge);
        HOperatorSet.GenEmptyObj(out ho_Region);
        HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
        HOperatorSet.GenEmptyObj(out ho_SelectedRegions1);
        HOperatorSet.GenEmptyObj(out ho_SortedRegions);
        HOperatorSet.GenEmptyObj(out ho_ObjectSelected);
        HOperatorSet.GenEmptyObj(out ho_ImageReduced);
        HOperatorSet.GenEmptyObj(out ho_ImageMean);
        HOperatorSet.GenEmptyObj(out ho_ImageScaled);
        HOperatorSet.GenEmptyObj(out ho_ImageScaleMax);
        HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);

        ho_Region.Dispose();
        HOperatorSet.BinaryThreshold(ho_Image, out ho_Region, "max_separability", hv_AreaLightDark,
                                     out hv_UsedThreshold);
        ho_ConnectedRegions.Dispose();
        HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);

        if ((int)((new HTuple(hv_WidthMin.TupleNotEqual(0))).TupleAnd(new HTuple(hv_HeightMin.TupleNotEqual(
                                                                                     0)))) != 0)
        {
            ho_SelectedRegions.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "width",
                                     "and", hv_WidthMin, hv_WidthMax);
            ho_SelectedRegions1.Dispose();
            HOperatorSet.SelectShape(ho_SelectedRegions, out ho_SelectedRegions1, "height",
                                     "and", hv_HeightMin, hv_HeightMax);
        }
        else if ((int)((new HTuple(hv_WidthMin.TupleEqual(0))).TupleAnd(new HTuple(hv_HeightMin.TupleNotEqual(
                                                                                       0)))) != 0)
        {
            ho_SelectedRegions1.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions1, "height",
                                     "and", hv_HeightMin, hv_HeightMax);
        }
        else if ((int)((new HTuple(hv_WidthMin.TupleNotEqual(0))).TupleAnd(new HTuple(hv_HeightMin.TupleEqual(
                                                                                          0)))) != 0)
        {
            ho_SelectedRegions1.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions1, "width",
                                     "and", hv_WidthMin, hv_WidthMax);
        }

        ho_SortedRegions.Dispose();
        HOperatorSet.SortRegion(ho_SelectedRegions1, out ho_SortedRegions, hv_SortMode,
                                hv_Order, hv_RowOrCol);
        ho_ObjectSelected.Dispose();
        HOperatorSet.SelectObj(ho_SortedRegions, out ho_ObjectSelected, hv_SelectIndex);

        ho_ImageReduced.Dispose();
        HOperatorSet.ReduceDomain(ho_Image, ho_ObjectSelected, out ho_ImageReduced);
        ho_ImageMean.Dispose();
        HOperatorSet.MeanImage(ho_ImageReduced, out ho_ImageMean, hv_MeanMaskWidth, hv_MeanMaskHeight);
        HOperatorSet.GrayFeatures(ho_ObjectSelected, ho_ImageMean, "mean", out hv_Value);

        if ((int)(new HTuple(hv_AreaLightDark.TupleEqual("light"))) != 0)
        {
            ho_ImageScaled.Dispose();
            HOperatorSet.ScaleImage(ho_ImageMean, out ho_ImageScaled, 1, 255 - hv_Value);
        }
        else
        {
            ho_ImageScaled.Dispose();
            HOperatorSet.ScaleImage(ho_ImageMean, out ho_ImageScaled, 1, -hv_Value);
        }

        ho_ImageScaleMax.Dispose();
        HOperatorSet.ScaleImageMax(ho_ImageScaled, out ho_ImageScaleMax);
        ho_EnhancedEdge.Dispose();
        HOperatorSet.BinaryThreshold(ho_ImageScaleMax, out ho_EnhancedEdge, "max_separability",
                                     hv_AreaLightDark, out hv_UsedThreshold1);

        ho_EnhancedImage.Dispose();
        HOperatorSet.RegionToBin(ho_EnhancedEdge, out ho_EnhancedImage, 255, 0, hv_Width,
                                 hv_Height);

        ho_Region.Dispose();
        ho_ConnectedRegions.Dispose();
        ho_SelectedRegions.Dispose();
        ho_SelectedRegions1.Dispose();
        ho_SortedRegions.Dispose();
        ho_ObjectSelected.Dispose();
        ho_ImageReduced.Dispose();
        ho_ImageMean.Dispose();
        ho_ImageScaled.Dispose();
        ho_ImageScaleMax.Dispose();

        return;
    }
Beispiel #20
0
        public void WireNum(HObject ho_GrayImage, out HObject ho_Contours2, out HObject ho_SelectedRegions1,
                            HTuple hv_Row, HTuple hv_Column, out HTuple hv_string, out HTuple hv_flag)
        {
            // Local iconic variables

            HObject ho_Rectangle, ho_ImageReduced, ho_Region;
            HObject ho_RegionOpening, ho_ConnectedRegions;

            // Local control variables

            HTuple hv_UsedThreshold = null, hv_Number = null;

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Contours2);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_Rectangle);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced);
            HOperatorSet.GenEmptyObj(out ho_Region);
            HOperatorSet.GenEmptyObj(out ho_RegionOpening);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            hv_string = new HTuple();
            hv_flag   = new HTuple();
            ho_Rectangle.Dispose();
            HOperatorSet.GenRectangle1(out ho_Rectangle, hv_Row + 53, hv_Column - 20, hv_Row + 65,
                                       hv_Column + 70);
            ho_ImageReduced.Dispose();
            HOperatorSet.ReduceDomain(ho_GrayImage, ho_Rectangle, out ho_ImageReduced);

            ho_Region.Dispose();
            HOperatorSet.BinaryThreshold(ho_ImageReduced, out ho_Region, "max_separability",
                                         "dark", out hv_UsedThreshold);

            ho_RegionOpening.Dispose();
            HOperatorSet.OpeningRectangle1(ho_Region, out ho_RegionOpening, 1, 4);
            ho_ConnectedRegions.Dispose();
            HOperatorSet.Connection(ho_RegionOpening, out ho_ConnectedRegions);
            ho_SelectedRegions1.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions1, (new HTuple("area")).TupleConcat(
                                         "height"), "and", (new HTuple(10)).TupleConcat(10), (new HTuple(150)).TupleConcat(
                                         50));
            HOperatorSet.CountObj(ho_SelectedRegions1, out hv_Number);

            if ((int)(new HTuple(hv_Number.TupleEqual(3))) != 0)
            {
                hv_string = "ok";
                hv_flag   = 1;
            }
            else
            {
                hv_string = "Wrong wire num";
                hv_flag   = 5;
                ho_Contours2.Dispose();
                HOperatorSet.GenContourRegionXld(ho_Rectangle, out ho_Contours2, "border");
                //错误5:线数量NG
            }
            ho_Rectangle.Dispose();
            ho_ImageReduced.Dispose();
            ho_Region.Dispose();
            ho_RegionOpening.Dispose();
            ho_ConnectedRegions.Dispose();

            return;
        }
        public int myOcrSplit(HObject ho_inImage, HObject ho_inRegion, HTuple hv_ocrClassifier,
                              HTuple hv_standardText, HTuple hv_charCount, HTuple hv_returnPunctuation, HTuple hv_lightOnDark,
                              out HTuple hv_Word)
        {
            // Local iconic variables

            HObject ho_Timg1 = null, ho_ImageReduced, ho_Region = null;
            HObject ho_Characters = null;

            // Local control variables

            HTuple hv_step = null, hv_stepMax = null, hv_useEnhanced = null;
            HTuple hv_TextModel = null, hv_OCRHandle = null, hv_RegularExpression = null;
            HTuple hv_UsedThreshold = new HTuple(), hv_Area = new HTuple();
            HTuple hv_Row = new HTuple(), hv_Column = new HTuple();
            HTuple hv_Area1 = new HTuple(), hv_Row1 = new HTuple();
            HTuple hv_Column1 = new HTuple(), hv_findText = new HTuple();
            HTuple hv_bufferCount = new HTuple(), hv_bufferMincontrast = new HTuple();
            HTuple hv_Index = new HTuple(), hv_add = new HTuple();
            HTuple hv_TextResultID = new HTuple(), hv_Class = new HTuple();
            HTuple hv_Confidence = new HTuple(), hv_Score = new HTuple();
            HTuple hv_Number = new HTuple(), hv_ScoreSum = new HTuple();
            HTuple hv_Index1 = new HTuple(), hv_Length = new HTuple();

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Timg1);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced);
            HOperatorSet.GenEmptyObj(out ho_Region);
            HOperatorSet.GenEmptyObj(out ho_Characters);
            hv_Word = new HTuple();

            ho_Timg1.Dispose();
            ho_Timg1 = ho_inImage.CopyObj(1, -1);

            ho_ImageReduced.Dispose();
            HOperatorSet.ReduceDomain(ho_Timg1, ho_inRegion, out ho_ImageReduced);
            hv_step        = 3;
            hv_stepMax     = 25;
            hv_useEnhanced = 1;
            HOperatorSet.CreateTextModelReader("auto", hv_ocrClassifier, out hv_TextModel);
            HOperatorSet.ReadOcrClassCnn(hv_ocrClassifier, out hv_OCRHandle);
            HOperatorSet.SetTextModelParam(hv_TextModel, "separate_touching_chars", "enhanced");

            HOperatorSet.SetTextModelParam(hv_TextModel, "return_separators", "true");
            HOperatorSet.SetTextModelParam(hv_TextModel, "add_fragments", "true");
            HOperatorSet.SetTextModelParam(hv_TextModel, "return_punctuation", hv_returnPunctuation == 0 ? "false" : "true");
            //RegularExpression := ''

            //字符串转正则表达式
            myStringToRegular(hv_standardText, out hv_RegularExpression);
            hv_RegularExpression = ("(" + hv_RegularExpression) + ")";


            //判断是否需要反转颜色
            if ((int)(new HTuple(hv_lightOnDark.TupleEqual(1))) != 0)
            {
                HObject ExpTmpOutVar_0;
                HOperatorSet.InvertImage(ho_ImageReduced, out ExpTmpOutVar_0);
                ho_ImageReduced.Dispose();
                ho_ImageReduced = ExpTmpOutVar_0;
            }
            else if ((int)(new HTuple(hv_lightOnDark.TupleEqual(2))) != 0)
            {
                //自动判断是否反转颜色,金工之前的项目中并未使用该功能
                ho_Region.Dispose();
                HOperatorSet.BinaryThreshold(ho_ImageReduced, out ho_Region, "max_separability",
                                             "dark", out hv_UsedThreshold);
                HOperatorSet.AreaCenter(ho_ImageReduced, out hv_Area, out hv_Row, out hv_Column);
                HOperatorSet.AreaCenter(ho_Region, out hv_Area1, out hv_Row1, out hv_Column1);
                if ((int)(new HTuple(hv_Area1.TupleGreater(hv_Area / 2))) != 0)
                {
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.InvertImage(ho_ImageReduced, out ExpTmpOutVar_0);
                        ho_ImageReduced.Dispose();
                        ho_ImageReduced = ExpTmpOutVar_0;
                    }
                }
            }
            //以置信度最高为分割目标
            if ((int)(new HTuple(hv_charCount.TupleEqual(0))) != 0)
            {
                hv_findText          = 0;
                hv_bufferCount       = 0;
                hv_bufferMincontrast = 5;
                HTuple end_val52  = hv_stepMax;
                HTuple step_val52 = 1;
                for (hv_Index = 1; hv_Index.Continue(end_val52, step_val52); hv_Index = hv_Index.TupleAdd(step_val52))
                {
                    hv_add = hv_step * hv_Index;
                    HOperatorSet.SetTextModelParam(hv_TextModel, "min_contrast", hv_add);
                    HOperatorSet.FindText(ho_ImageReduced, hv_TextModel, out hv_TextResultID);
                    ho_Characters.Dispose();
                    HOperatorSet.GetTextObject(out ho_Characters, hv_TextResultID, "all_lines");
                    HOperatorSet.DoOcrWordCnn(ho_Characters, ho_ImageReduced, hv_OCRHandle, hv_RegularExpression,
                                              3, 10, out hv_Class, out hv_Confidence, out hv_Word, out hv_Score);
                    HOperatorSet.CountObj(ho_Characters, out hv_Number);
                    HOperatorSet.TupleSum(hv_Confidence, out hv_ScoreSum);
                    HOperatorSet.TupleFindFirst(hv_Class, "\x1A", out hv_Index1);
                    if ((int)((new HTuple(hv_bufferCount.TupleLess(hv_ScoreSum))).TupleAnd(new HTuple(hv_Index1.TupleEqual(
                                                                                                          -1)))) != 0)
                    {
                        hv_findText          = 1;
                        hv_bufferCount       = hv_ScoreSum.Clone();
                        hv_bufferMincontrast = hv_add.Clone();
                    }
                }
                HOperatorSet.SetTextModelParam(hv_TextModel, "min_contrast", hv_bufferMincontrast);
                HOperatorSet.FindText(ho_ImageReduced, hv_TextModel, out hv_TextResultID);
                ho_Characters.Dispose();
                HOperatorSet.GetTextObject(out ho_Characters, hv_TextResultID, "all_lines");
                HOperatorSet.DoOcrWordCnn(ho_Characters, ho_ImageReduced, hv_OCRHandle, hv_RegularExpression,
                                          3, 10, out hv_Class, out hv_Confidence, out hv_Word, out hv_Score);
            }


            //以识别字符为固定长度为分割目标
            if ((int)(new HTuple(hv_charCount.TupleGreater(0))) != 0)
            {
                hv_findText          = 0;
                hv_bufferCount       = 0;
                hv_bufferMincontrast = 5;
                HTuple end_val86  = hv_stepMax;
                HTuple step_val86 = 1;
                for (hv_Index = 1; hv_Index.Continue(end_val86, step_val86); hv_Index = hv_Index.TupleAdd(step_val86))
                {
                    hv_add = hv_step * hv_Index;
                    HOperatorSet.SetTextModelParam(hv_TextModel, "min_contrast", hv_add);
                    HOperatorSet.FindText(ho_ImageReduced, hv_TextModel, out hv_TextResultID);
                    ho_Characters.Dispose();
                    HOperatorSet.GetTextObject(out ho_Characters, hv_TextResultID, "all_lines");

                    HOperatorSet.CountObj(ho_Characters, out hv_Number);

                    if ((int)(new HTuple(hv_charCount.TupleEqual(hv_Number))) != 0)
                    {
                        hv_findText = 1;
                        //
                        HOperatorSet.DoOcrWordCnn(ho_Characters, ho_ImageReduced, hv_OCRHandle,
                                                  hv_RegularExpression, 3, 10, out hv_Class, out hv_Confidence, out hv_Word,
                                                  out hv_Score);
                        HOperatorSet.TupleSum(hv_Confidence, out hv_ScoreSum);
                        HOperatorSet.TupleFindFirst(hv_Class, "\x1A", out hv_Index1);
                        if ((int)((new HTuple(hv_bufferCount.TupleLess(hv_ScoreSum))).TupleAnd(
                                      new HTuple(hv_Index1.TupleEqual(-1)))) != 0)
                        {
                            hv_findText          = 1;
                            hv_bufferCount       = hv_ScoreSum.Clone();
                            hv_bufferMincontrast = hv_add.Clone();
                        }
                    }
                }
                //以置信度最高为分割目标 再识别一次
                //if (findText == 0)
                HOperatorSet.SetTextModelParam(hv_TextModel, "min_contrast", hv_bufferMincontrast);
                HOperatorSet.FindText(ho_ImageReduced, hv_TextModel, out hv_TextResultID);
                ho_Characters.Dispose();
                HOperatorSet.GetTextObject(out ho_Characters, hv_TextResultID, "all_lines");
                HOperatorSet.DoOcrWordCnn(ho_Characters, ho_ImageReduced, hv_OCRHandle, hv_RegularExpression,
                                          3, 10, out hv_Class, out hv_Confidence, out hv_Word, out hv_Score);
                //endif
            }

            //使用标准文本对比
            if ((int)(new HTuple(hv_charCount.TupleLess(0))) != 0)
            {
                //判断是否和标准文本一致

                hv_findText          = 0;
                hv_bufferCount       = 0;
                hv_bufferMincontrast = 5;
                HTuple end_val130  = hv_stepMax;
                HTuple step_val130 = 1;
                for (hv_Index = 1; hv_Index.Continue(end_val130, step_val130); hv_Index = hv_Index.TupleAdd(step_val130))
                {
                    hv_add = hv_step * hv_Index;
                    HOperatorSet.SetTextModelParam(hv_TextModel, "min_contrast", hv_add);
                    HOperatorSet.FindText(ho_ImageReduced, hv_TextModel, out hv_TextResultID);
                    ho_Characters.Dispose();
                    HOperatorSet.GetTextObject(out ho_Characters, hv_TextResultID, "all_lines");
                    HOperatorSet.CountObj(ho_Characters, out hv_Number);
                    HOperatorSet.TupleStrlen(hv_standardText, out hv_Length);
                    if ((int)(new HTuple(hv_Length.TupleNotEqual(hv_Number))) != 0)
                    {
                        continue;
                    }
                    HOperatorSet.DoOcrWordCnn(ho_Characters, ho_ImageReduced, hv_OCRHandle, hv_RegularExpression,
                                              5, 10, out hv_Class, out hv_Confidence, out hv_Word, out hv_Score);

                    if ((int)(new HTuple(hv_Word.TupleEqual(hv_standardText))) != 0)
                    {
                        hv_findText = 1;
                        break;
                    }

                    HOperatorSet.TupleSum(hv_Confidence, out hv_ScoreSum);
                    HOperatorSet.TupleFindFirst(hv_Class, "\x1A", out hv_Index1);
                    if ((int)((new HTuple(hv_bufferCount.TupleLess(hv_ScoreSum))).TupleAnd(new HTuple(hv_Index1.TupleEqual(
                                                                                                          -1)))) != 0)
                    {
                        hv_bufferCount       = hv_ScoreSum.Clone();
                        hv_bufferMincontrast = hv_add.Clone();
                    }
                }
                //以置信度最高为分割目标 再识别一次
                if ((int)(new HTuple(hv_findText.TupleEqual(0))) != 0)
                {
                    HOperatorSet.SetTextModelParam(hv_TextModel, "min_contrast", hv_bufferMincontrast);
                    HOperatorSet.FindText(ho_ImageReduced, hv_TextModel, out hv_TextResultID);
                    ho_Characters.Dispose();
                    HOperatorSet.GetTextObject(out ho_Characters, hv_TextResultID, "all_lines");
                    HOperatorSet.DoOcrWordCnn(ho_Characters, ho_ImageReduced, hv_OCRHandle, hv_RegularExpression,
                                              5, 10, out hv_Class, out hv_Confidence, out hv_Word, out hv_Score);
                }
            }
            HOperatorSet.ClearTextModel(hv_TextModel);
            HOperatorSet.ClearOcrClassCnn(hv_OCRHandle);
            ho_Timg1.Dispose();
            ho_ImageReduced.Dispose();
            ho_Region.Dispose();
            ho_Characters.Dispose();

            int nRet = 1;

            if (hv_findText == 1)
            {
                nRet = 0;
            }
            return(nRet);
        }