示例#1
0
        public override int Measure(HObject ho_Image)                                 //测量
        {
            measureResult = Result.OK;                                                //测量结果初始OK
            try { ho_ROI.Dispose(); } catch (Exception) { }//释放ho_ROI资源
            Rectangle2 ROI = parameter.rectangle2.GetShapePositioned() as Rectangle2; //获取ROI矩形

            ho_ROI = Func_HalconFunction.GenRectangle2(ROI);                          //创建ROI
            //灰度处理,并选出最大面积
            try { ho_SelectedRegions.Dispose(); } catch (Exception) { }//释放ho_SelectedRegions资源
            ho_SelectedRegions = Func_ImageProcessing.Threshold_SelectMaxRegion(ho_Image, ho_ROI, parameter.hv_MinGray, parameter.hv_MaxGray);
            if (ROI.hv_Phi.D != 0)//角度不为零?
            {
                //hv_HomMat2D;//变换矩阵
                HOperatorSet.VectorAngleToRigid(ROI.hv_Row, ROI.hv_Column, 0, ROI.hv_Row, ROI.hv_Column, -ROI.hv_Phi, out HTuple hv_HomMat2D); //将区域旋转为水平的变换矩阵
                // ho_RegionRotate;//水平后的Region
                HOperatorSet.AffineTransRegion(ho_SelectedRegions, out HObject ho_RegionRotate, hv_HomMat2D, "nearest_neighbor");              //应用变换
                SetLine(Func_ImageProcessing.getLine_FromRegion(ho_RegionRotate, TPLR, b, AngularPoint));                                      //从区域获取线
                HOperatorSet.VectorAngleToRigid(ROI.hv_Row, ROI.hv_Column, 0, ROI.hv_Row, ROI.hv_Column, ROI.hv_Phi, out hv_HomMat2D);         //将线从水平变回原角度的变换矩阵
                HOperatorSet.AffineTransPixel(hv_HomMat2D, hv_Row1, hv_Column1, out hv_Row1, out hv_Column1);                                  //应用变换
                HOperatorSet.AffineTransPixel(hv_HomMat2D, hv_Row2, hv_Column2, out hv_Row2, out hv_Column2);                                  //应用变换
            }
            else
            {
                SetLine(Func_ImageProcessing.getLine_FromRegion(ho_SelectedRegions, TPLR, b, AngularPoint));//从区域获取线
            }
            if (DP == null)
            {
                DP = new Point(0, 0);
            }
            DP.hv_Column = (hv_Column1);
            DP.hv_Row    = (hv_Row1);
            AxByC0       = AxByC0.GetAxByC(this); //求该线的一半直线方程
            MeasureDone  = true;                  //已测量标志为true
            return(Convert.ToInt32(measureResult));
        }
示例#2
0
        public override bool analyze_show(HWindow hwin, string Key, ref Dictionary <string, object> _dictionary_resulte)
        {
            bool ok = false;

            /***********************处理***************************************/
            HObject ho_ImageReduced_;

            HOperatorSet.GenEmptyObj(out ho_ImageReduced_);

            HTuple hv_ModMat2D_;

            HObject ho_Rectangle_;

            HOperatorSet.GenEmptyObj(out ho_Rectangle_);
            ho_Rectangle_.Dispose();

            HOperatorSet.GenRectangle2(out ho_Rectangle_, IOutSide.Mid_row_y, IOutSide.Mid_col_x, -IOutSide.Phi, IOutSide.Len1, IOutSide.Len2);
            if (IrectShuJuPianYi != null)//判断有无定位
            {
                HOperatorSet.VectorAngleToRigid(GenSuiDian_Y_Row, GeuSuiDian_X_Col, GenSuiDian_A, IrectShuJuPianYi.Row, IrectShuJuPianYi.Column, IrectShuJuPianYi.Angle, out hv_ModMat2D_);
                HOperatorSet.AffineTransRegion(ho_Rectangle_, out ho_Rectangle_, hv_ModMat2D_, "nearest_neighbor");
            }
            HOperatorSet.ReduceDomain(this.ImageFather.Ho_image, ho_Rectangle_, out ho_ImageReduced_);

            this.GenSuiDianYuDingWeiDianDeBianHuanRegion.Dispose();
            this.GenSuiDianYuDingWeiDianDeBianHuanRegion = ho_Rectangle_;

            HOperatorSet.Threshold(ho_ImageReduced_, out ho_ImageReduced_, this.MinGray, this.MaxGray);
            HOperatorSet.Connection(ho_ImageReduced_, out ho_ImageReduced_);
            HOperatorSet.SelectShape(ho_ImageReduced_, out ho_ImageReduced_, this.Features, this.Operation, this.Min, this.Max);

            this.SelectRegion.Dispose();
            this.SelectRegion = ho_ImageReduced_;

            HOperatorSet.AreaCenter(ho_ImageReduced_, out this._result._area, out this._result._row_y, out this._result._col_x);

            /**********************************数据分析***************************/
            Key = "blob_" + Key;
            this._result._tolatName = Key;

            if (this._result._area.Length > 0)
            {
                this._result._tolatResult = true;
            }
            else
            {
                this._result._tolatResult = false;
            }
            _dictionary_resulte.Add(Key, this._result);

            /**********显示******************/
            this.show(hwin);

            ok = this._result._tolatResult;

            return(ok);
        }
        private void btnRunmannual_Click(object sender, EventArgs e)
        {
            HOperatorSet.FindScaledShapeModel(Img, ModelID, -0.39, 0.79, 0.8, 1.0, 0.5, 0, 0.5, "least_squares", 5, 0.8, out HTuple Row, out HTuple Column, out HTuple Angle, out HTuple Scales, out HTuple Score);
            HOperatorSet.HomMat2dIdentity(out HTuple HM2D);
            HOperatorSet.HomMat2dTranslate(HM2D, Row[0], Column[0], out HTuple HM2DTranslate);
            HOperatorSet.HomMat2dRotate(HM2DTranslate, Angle[0], Row[0], Column[0], out HTuple Homat2DRotary);
            HOperatorSet.HomMat2dScale(Homat2DRotary, Scales[0], Scales[0], Row[0], Column[0], out HTuple HM2DALL);
            HOperatorSet.GetShapeModelContours(out HObject ModelContour, ModelID, 1);
            HOperatorSet.AffineTransContourXld(ModelContour, out HObject ContourAffine, HM2DALL);
            window.SetColor("green");
            window.SetDraw("margin");
            window.SetLineWidth(3);
            ContourAffine.DispObj(window);
            //ModelContour.DispObj(window);


            //DataTable dt = Lib.GetTableData(string.Format("select * from TrainModel where Roi = '{0}'", "Roi3"));
            //double _X = Lib.ToDouble(dt.Rows[0]["X"]);
            //double _Y = Lib.ToDouble(dt.Rows[0]["Y"]);
            //double _L1 = Lib.ToDouble(dt.Rows[0]["L1"]);
            //double _L2 = Lib.ToDouble(dt.Rows[0]["L2"]);
            //double _Theta = Lib.ToDouble(dt.Rows[0]["Theta"]);

            datatrain dtRec  = lstDataTrain.FirstOrDefault(o => o.Roi == "Roi3");
            double    _X     = dtRec.X;
            double    _Y     = dtRec.Y;
            double    _L1    = dtRec.L1;
            double    _L2    = dtRec.L2;
            double    _Theta = dtRec.Theta;



            datatrain dttMaster    = lstDataTrain.FirstOrDefault(o => o.Roi == "Master");
            double    _XMaster     = dttMaster.X;
            double    _YMaster     = dttMaster.Y;
            double    _L1Master    = dttMaster.L1;
            double    _L2Master    = dttMaster.L2;
            double    _ThetaMaster = dttMaster.Theta;


            HOperatorSet.GenRectangle2(out HObject RoiCheck, _X, _Y, _Theta, _L1, _L2);

            //HOperatorSet.AffineTransRegion(RoiCheck, out HObject RoicheckAffine, HM2DALL, "nearest_neighbor");
            //HOperatorSet.HomMat2dIdentity(out HTuple Homat2D);
            //HOperatorSet.HomMat2dTranslate(Homat2D, -_X, -_Y, out HTuple Homat2DTrans);
            //HOperatorSet.AffineTransRegion(RoicheckAffine, out HObject RoicheckFinal, Homat2DTrans, "nearest_neighbor");
            //RoicheckFinal.DispObj(window);


            HOperatorSet.VectorAngleToRigid(_XMaster, _YMaster, _ThetaMaster, Row[0], Column[0], Angle[0], out HTuple HM2DMaster);
            HOperatorSet.AffineTransRegion(RoiCheck, out HObject RoiCheckTrans, HM2DMaster, "nearest_neighbor");
            RoiCheck.DispObj(window);
            RoiCheckTrans.DispObj(window);
        }
示例#4
0
        public bool FindTab(HTuple hv_HomMat2D)
        {
            if (ho_Image == null)
            {
                errorFlag = true;
                return(false);
            }
            if (ho_Region == null)
            {
                errorFlag = true;
                return(false);
            }
            HObject mho_Region = null;

            HOperatorSet.AffineTransRegion(ho_Region, out mho_Region, hv_HomMat2D, "constant");

            try
            {
                HObject ho_ImageReduced = null;
                HOperatorSet.ReduceDomain(ho_Image, mho_Region, out ho_ImageReduced);

                //string imagePath = AppDomain.CurrentDomain.BaseDirectory + "Parameters\\AAA.bmp";
                //HOperatorSet.WriteImage(ho_Image, "bmp",0, imagePath);

                //string regionPath = AppDomain.CurrentDomain.BaseDirectory + "Parameters\\AAA.hobj";
                //HOperatorSet.WriteRegion(mho_Region, regionPath);

                HObject ho_Regions = null;
                HOperatorSet.Threshold(ho_ImageReduced, out ho_Regions, hv_MinGray, hv_MaxGray);

                HObject ho_ConnectedRegions = null;
                HOperatorSet.Connection(ho_Regions, out ho_ConnectedRegions);

                HObject ho_SelectedRegions = null;
                HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area", "and", hv_Min, hv_Max);

                HTuple hv_mNumber = new HTuple();
                HOperatorSet.CountObj(ho_SelectedRegions, out hv_mNumber);

                ho_Region_Find = ho_SelectedRegions;
                if (hv_mNumber < hv_Number)
                {
                    errorFlag = true;
                    return(false);
                }
                errorFlag = false;
                return(true);
            }
            catch (Exception exc)
            {
                errorFlag = true;
                return(false);
            }
        }
        public override void Show(HObject inImage, HTuple homMat2D, out HObject resultImage)
        {
            HObject tmpImage;
            HObject regionAffineTrans;

            HOperatorSet.AffineTransRegion(ho_inRegion, out regionAffineTrans, homMat2D, "nearest_neighbor");
            PaintOkNgRegion(inImage, regionAffineTrans, out tmpImage, result, 11);
            HOperatorSet.ShapeTrans(regionAffineTrans, out regionAffineTrans, "rectangle1");
            HOperatorSet.HeightWidthRatio(regionAffineTrans, out HTuple height, out HTuple width, out _);
            CutImage(tmpImage, regionAffineTrans, out resultImage, height.D / 4, width.D / 4);

            tmpImage.Dispose();
            regionAffineTrans.Dispose();
        }
示例#6
0
        /// <summary>
        /// 由点获取轮廓
        /// </summary>
        /// <param name="isLeft">是否在左边</param>
        /// <param name="IgnorePoints">起始结束忽略点数</param>
        /// <param name="Row">输入轮廓行坐标</param>
        /// <param name="Col">输入轮廓列坐标</param>
        /// <param name="RowNew">输出转换后轮廓列坐标</param>
        /// <param name="ColNew">输出转换后轮廓行坐标</param>
        /// <param name="Region">输处转换后轮廓Region</param>
        /// <returns></returns>
        public string GenProfile(bool isLeft, HTuple Row, HTuple Col, out HTuple RowNew, out HTuple ColNew, out HObject Region, out HObject Contour)
        {
            RowNew  = new HTuple(); ColNew = new HTuple(); Region = new HObject();
            Contour = new HObject();
            try
            {
                HTuple Lenr = Row.Length;
                HTuple Lenc = Col.Length;
                HTuple min  = Lenr.TupleMin2(Lenc);
                Row = -Row.TupleSelectRange(0, min.I - 1);
                Col = Col.TupleSelectRange(0, min.I - 1);
                HOperatorSet.GenContourPolygonXld(out Contour, Row, Col);
                //HOperatorSet.WriteObject(Contour, "1.hobj");
                HTuple hommat2DIdentity = new HTuple(); HTuple Hommat2DRotate = new HTuple();
                HTuple Hommat2DTranslate = new HTuple();
                HOperatorSet.HomMat2dIdentity(out hommat2DIdentity);
                //HOperatorSet.HomMat2dRotate(hommat2DIdentity, 1.57, 0, 0, out Hommat2DRotate);
                //HObject tempContour = new HObject();
                //HOperatorSet.AffineTransContourXld(Contour, out tempContour, Hommat2DRotate);
                //HOperatorSet.GetContourXld(tempContour, out Row, out Col);
                HTuple ColMin = Col.TupleMin();

                HOperatorSet.HomMat2dTranslate(hommat2DIdentity, 500, -ColMin + 500, out Hommat2DTranslate);
                HOperatorSet.AffineTransContourXld(Contour, out Contour, Hommat2DTranslate);
                //HOperatorSet.WriteObject(Contour, "2.hobj");
                HOperatorSet.GetContourXld(Contour, out RowNew, out ColNew);
                HOperatorSet.GenRegionPoints(out Region, RowNew, ColNew);

                if (isLeft == false)
                {
                    //找到最高点进行镜像变换
                    HTuple Rowmin = RowNew.TupleMin();
                    HTuple minInd = RowNew.TupleFindFirst(Rowmin);
                    HTuple HomMat2DId = new HTuple(); HTuple HomMat2dReflect = new HTuple();
                    HOperatorSet.HomMat2dIdentity(out HomMat2DId);
                    HOperatorSet.HomMat2dReflect(HomMat2DId, Rowmin, ColNew[minInd] + 50, Rowmin + 100, ColNew[minInd] + 50, out HomMat2dReflect);
                    HOperatorSet.AffineTransContourXld(Contour, out Contour, HomMat2dReflect);
                    HOperatorSet.AffineTransRegion(Region, out Region, HomMat2dReflect, "nearest_neighbor");
                    HOperatorSet.GetContourXld(Contour, out RowNew, out ColNew);
                    HOperatorSet.GenRegionPoints(out Region, RowNew, ColNew);
                    //HOperatorSet.WriteObject(Region, "4.hobj");
                }
                return("OK");
            }
            catch (Exception ex)
            {
                return("GenProfile error " + ex.Message);
            }
        }
示例#7
0
        public override bool analyze_show(HWindow hwin, string Key, ref Dictionary <string, object> _dictionary_resulte)
        {
            bool ok = false;
            /*********************************************处理***********************************************/
            HObject ho_ImageReduced_;

            HOperatorSet.GenEmptyObj(out ho_ImageReduced_);
            HTuple  hv_ModMat2D_;
            HObject ho_Rectangle_;

            HOperatorSet.GenEmptyObj(out ho_Rectangle_);
            ho_Rectangle_.Dispose();
            HOperatorSet.GenRectangle2(out ho_Rectangle_, IOutSide.Mid_row_y, IOutSide.Mid_col_x, -IOutSide.Phi, IOutSide.Len1, IOutSide.Len2);
            if (IrectShuJuPianYi != null)
            {
                HOperatorSet.VectorAngleToRigid(GenSuiDian_Y_Row, GeuSuiDian_X_Col, GenSuiDian_A, IrectShuJuPianYi.Row, IrectShuJuPianYi.Column, IrectShuJuPianYi.Angle, out hv_ModMat2D_);
                HOperatorSet.AffineTransRegion(ho_Rectangle_, out ho_Rectangle_, hv_ModMat2D_, "nearest_neighbor");
            }
            HOperatorSet.ReduceDomain(this.ImageFather.Ho_image, ho_Rectangle_, out ho_ImageReduced_);
            HOperatorSet.FindText(ho_ImageReduced_, this.TextMode, out this._result.TextResult);

            this._result.TextLines.Dispose();
            HOperatorSet.GetTextObject(out this._result.TextLines, this._result.TextResult, this.ResultName);
            HOperatorSet.GetTextResult(this._result.TextResult, "class", out this._result.SingleCharacters);

            /**************************数据保存及数据分析**************************************/

            Key = "OCRWenBen_" + Key;
            this._result._tolatName = Key;

            if (this._result.SingleCharacters.Length > 0)
            {
                this._result._tolatResult = true;
                ok = true;
            }
            else
            {
                this._result._tolatResult = false;
            }

            _dictionary_resulte.Add(Key, this._result);

            /****************显示*******************/
            show(hwin);

            return(ok);
        }
示例#8
0
        public bool FindTab()
        {
            if (tabParams.ho_Image == null)
            {
                MessageBox.Show("图像为空!");
                return(false);
            }
            Show2HWindow(tabParams.ho_Image);
            if (tabParams.ho_Region == null)
            {
                MessageBox.Show("区域为空!");
                return(false);
            }
            try
            {
                HObject ho_ImageReduced = null;
                HOperatorSet.ReduceDomain(tabParams.ho_Image, tabParams.ho_Region, out ho_ImageReduced);

                HObject ho_Regions = null;
                HOperatorSet.Threshold(ho_ImageReduced, out ho_Regions, tabParams.hv_MinGray, tabParams.hv_MaxGray);

                HObject ho_ConnectedRegions = null;
                HOperatorSet.Connection(ho_Regions, out ho_ConnectedRegions);

                HObject ho_SelectedRegions = null;
                HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area", "and", tabParams.hv_Min, tabParams.hv_Max);

                HTuple hv_Number = new HTuple();
                HOperatorSet.CountObj(ho_SelectedRegions, out hv_Number);
                if (hv_Number < tabParams.hv_Number)
                {
                    MessageBox.Show("匹配数量过少");
                    return(false);
                }
                HOperatorSet.AffineTransRegion(ho_SelectedRegions, out ho_SelectedRegions, hv_XldHomMat2D, hv_Interpolate);

                HOperatorSet.SetColor(hv_ImageWindow, "red");
                HOperatorSet.DispObj(ho_SelectedRegions, hv_ImageWindow);
                MessageBox.Show("检测成功,检测匹配个数:" + hv_Number.ToString() + "!");
                return(true);
            }
            catch (Exception exc)
            {
                MessageBox.Show("检测失败!" + exc.ToString());
                return(false);
            }
        }
示例#9
0
 /// <summary>
 /// 让处理框跟着定位框走
 /// </summary>
 public static void AffineModel(HObject RecRegion, out HObject TransContours)
 {
     HOperatorSet.GenEmptyObj(out TransContours);
     for (int i = 0; i < Row.TupleLength(); i++)
     {
         HObject hobject = new HObject();
         HOperatorSet.GenEmptyObj(out hobject);
         hobject.Dispose();
         HOperatorSet.AreaCenter(PublicData.CheckModel.VisualModelRegion, out HTuple Area, out HTuple row, out HTuple column);
         HOperatorSet.HomMat2dIdentity(out HTuple Mat2DIdentity);
         HOperatorSet.HomMat2dTranslate(Mat2DIdentity, -row, -column, out Mat2DIdentity);
         HOperatorSet.HomMat2dRotate(Mat2DIdentity, Angle[i], 0, 0, out HTuple Mat2DRotate);
         HOperatorSet.HomMat2dTranslate(Mat2DRotate, Row[i], Column[i], out HTuple Mat2DTranslate);
         HOperatorSet.AffineTransRegion(RecRegion, out TransContours,
                                        Mat2DTranslate, "nearest_neighbor");
     }
 }
示例#10
0
        public override bool show(HWindow hwin)
        {
            bool    ok = false;
            HTuple  hv_modMat2D;
            HObject hr_;

            HOperatorSet.GenEmptyRegion(out hr_);
            HOperatorSet.GenRectangle2(out hr_, this.IOutSide.Mid_row_y, this.IOutSide.Mid_col_x, this.IOutSide.Phi, this.IOutSide.Len1, this.IOutSide.Len2);

            if (IrectShuJuPianYi != null)
            {
                HOperatorSet.VectorAngleToRigid(GenSuiDian_Y_Row, GeuSuiDian_X_Col, GenSuiDian_A, IrectShuJuPianYi.Row, IrectShuJuPianYi.Column, IrectShuJuPianYi.Angle, out hv_modMat2D);
                HOperatorSet.AffineTransRegion(hr_, out hr_, hv_modMat2D, "nearest_neighbor");
            }

            if (this._result.TolatResult)
            {
                int num = this._result.SingleCharacters.Length;

                HTuple row1, row2, col1, col2, TextLineCharacters;
                HOperatorSet.SmallestRectangle1(this._result.TextLines, out row1, out col1, out row2, out col2);
                HOperatorSet.TupleSum(this._result.SingleCharacters, out TextLineCharacters);

                for (int i = 0; i < num; i++)
                {
                    HOperatorSet.SetTposition(hwin, row1[i] + 10, col1[i]);
                    HOperatorSet.WriteString(hwin, this._result.SingleCharacters[i]);
                }

                hwin.DispObj(this._result.TextLines);
                hwin.DispObj(hr_);
            }
            else
            {
                hwin.SetColor("red");
                hwin.DispObj(hr_);
                hwin.SetColor("green");
            }
            hr_.Dispose();


            return(ok);
        }
示例#11
0
文件: LocalBase.cs 项目: Gz1d/Gz
        public override void AffineTransResult(HTuple HomMat, out LocalResult AffinResult)
        {
            AffinResult = this;
            MyVisionBase.AffineTransPt(row, col, HomMat, out AffinResult.row, out AffinResult.col);
            HTuple sx = new HTuple(), sy = new HTuple(), phi = new HTuple(), theta = new HTuple(), tx = new HTuple(), ty = new HTuple();

            HOperatorSet.HomMat2dToAffinePar(HomMat, out sx, out sy, out phi, out theta, out tx, out ty);
            AffinResult.angle = angle - phi.D;

            HOperatorSet.AffineTransContourXld(this.DetectContour, out ((LineCircRectRlt)AffinResult).DetectContour, HomMat);
            HObject AffineNgCont = new HObject();

            HOperatorSet.GenEmptyObj(out AffineNgCont);

            HObject myCont = new HObject();

            HOperatorSet.AffineTransRegion(this.NgContour, out AffineNgCont, HomMat, "constant");
            HOperatorSet.CopyObj(AffineNgCont, out ((LineCircRectRlt)AffinResult).NgContour, 1, -1);
        }
示例#12
0
        private string findModel(int ModelNum)
        {
            if (MyCurCom.ho_Image == null)
            {
                return("-1,-1,-1");
            }
            HTuple hv_RowCheck = null, hv_ColumnCheck = null, hv_AngleCheck = null, hv_Score = null;

            HOperatorSet.FindShapeModel(MyCurCom.ho_Image, MyModel[ModelNum].hv_ModelID, -0.39, 0.79, 0.5, 1, 0.5, "least_squares", 0, 0.7, out hv_RowCheck, out hv_ColumnCheck, out hv_AngleCheck, out hv_Score);
            HTuple  HomMat2D;
            HObject ModelAtNewPosition, ROIAffinTrans;
            int     CheckNum = (int)((new HTuple(hv_Score.TupleLength())));

            if (CheckNum > 0)
            {
                MyCurCom.hv.DispObj(MyCurCom.ho_Image);

                MyCurCom.hv.SetColor("yellow");
                HOperatorSet.VectorAngleToRigid(0, 0, 0, hv_RowCheck[0].D, hv_ColumnCheck[0].D, hv_AngleCheck[0].D, out HomMat2D);
                HOperatorSet.AffineTransContourXld(MyModel[ModelNum].ho_ShapeModel, out ModelAtNewPosition, HomMat2D);
                MyCurCom.hv.DispObj(ModelAtNewPosition);

                MyCurCom.hv.SetColor("blue");
                HOperatorSet.VectorAngleToRigid(MyModel[ModelNum].hv_Orgin_Row, MyModel[ModelNum].hv_Orgin_Column, 0, hv_RowCheck[0].D, hv_ColumnCheck[0].D, hv_AngleCheck[0].D, out HomMat2D);
                HOperatorSet.AffineTransRegion(MyModel[ModelNum].h_roi, out ROIAffinTrans, HomMat2D, "constant");
                MyCurCom.hv.DispObj(ROIAffinTrans);

                MyCurCom.hv.SetColor("green");
                HOperatorSet.DispCross(MyCurCom.hv, hv_RowCheck[0].D, hv_ColumnCheck[0].D, MyCurCom.ho_Width / 24, hv_AngleCheck[0].D);
                return(hv_RowCheck[0].D.ToString() + "," + hv_ColumnCheck[0].D.ToString() + "," + hv_AngleCheck[0].D.ToString());
            }
            else
            {
                return("-1,-1,-1");
            }
        }
示例#13
0
        public void findModel(HObject ho_Image, HObject ho_DomainRegion_01, HObject ho_DomainRegion_02,
                              HObject ho_ModelRegion_01, HObject ho_ModelContours_01, HObject ho_ModelRegion_02, HObject ho_ModelContours_02,
                              out HObject ho_ContoursAffinTrans_01, out HObject ho_RegionAffinTrans_01,
                              out HObject ho_ContoursAffinTrans_02, out HObject ho_RegionAffinTrans_02,
                              HTuple hv_ModelId_01, HTuple hv_ModelId_02,
                              HTuple hv_CenterRow_01, HTuple hv_CenterColumn_01, HTuple hv_CenterRow_02, HTuple hv_CenterColumn_02, HTuple hv_AngleModel,
                              out HTuple hv_HomMat2D, out bool hv_Result)
        {
            // Local iconic variables

            HObject ho_RegionMoved_01 = null, ho_RegionMoved_02 = null;
            HObject ho_ImageReduce_01 = null, ho_ImageReduce_02 = null;
            // Local control variables

            HTuple hv_MatchRow_01 = null, hv_MatchColumn_01 = null;
            HTuple hv_MatchAngle_01 = null, hv_MatchScore_01 = null;
            HTuple hv_MatchRow_02 = null, hv_MatchColumn_02 = null;
            HTuple hv_MatchAngle_02 = null, hv_MatchScore_02 = null;
            HTuple hv_HomMat2D_01 = new HTuple(), hv_HomMat2D_02 = new HTuple();
            HTuple hv_Angle = new HTuple();

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_ImageReduce_01);
            HOperatorSet.GenEmptyObj(out ho_ImageReduce_02);
            HOperatorSet.GenEmptyObj(out ho_ContoursAffinTrans_01);
            HOperatorSet.GenEmptyObj(out ho_RegionAffinTrans_01);
            HOperatorSet.GenEmptyObj(out ho_ContoursAffinTrans_02);
            HOperatorSet.GenEmptyObj(out ho_RegionAffinTrans_02);
            HOperatorSet.GenEmptyObj(out ho_RegionMoved_01);
            HOperatorSet.GenEmptyObj(out ho_RegionMoved_02);
            hv_HomMat2D = new HTuple();

            ho_ImageReduce_01.Dispose();
            HOperatorSet.ReduceDomain(ho_Image, ho_DomainRegion_01, out ho_ImageReduce_01);
            ho_ImageReduce_02.Dispose();
            HOperatorSet.ReduceDomain(ho_Image, ho_DomainRegion_02, out ho_ImageReduce_02);

            HOperatorSet.FindShapeModel(ho_ImageReduce_01, hv_ModelId_01, (new HTuple(0)).TupleRad()
                                        , (new HTuple(360)).TupleRad(), 0.5, 1, 0.5, "least_squares", (new HTuple(4)).TupleConcat(
                                            1), 0.65, out hv_MatchRow_01, out hv_MatchColumn_01, out hv_MatchAngle_01,
                                        out hv_MatchScore_01);

            HOperatorSet.FindShapeModel(ho_ImageReduce_02, hv_ModelId_02, (new HTuple(0)).TupleRad()
                                        , (new HTuple(360)).TupleRad(), 0.5, 1, 0.5, "least_squares", (new HTuple(4)).TupleConcat(
                                            1), 0.65, out hv_MatchRow_02, out hv_MatchColumn_02, out hv_MatchAngle_02,
                                        out hv_MatchScore_02);

            hv_Result = false;

            if ((int)((new HTuple((new HTuple(hv_MatchScore_01.TupleLength())).TupleEqual(
                                      1))).TupleAnd(new HTuple((new HTuple(hv_MatchScore_02.TupleLength())).TupleEqual(
                                                                   1)))) != 0)
            {
                ho_RegionMoved_01.Dispose();
                HOperatorSet.MoveRegion(ho_ModelRegion_01, out ho_RegionMoved_01, -hv_CenterRow_01,
                                        -hv_CenterColumn_01);
                ho_RegionMoved_02.Dispose();
                HOperatorSet.MoveRegion(ho_ModelRegion_02, out ho_RegionMoved_02, -hv_CenterRow_02,
                                        -hv_CenterColumn_02);

                HOperatorSet.VectorAngleToRigid(0, 0, 0, hv_MatchRow_01, hv_MatchColumn_01,
                                                hv_MatchAngle_01, out hv_HomMat2D_01);
                ho_ContoursAffinTrans_01.Dispose();
                HOperatorSet.AffineTransContourXld(ho_ModelContours_01, out ho_ContoursAffinTrans_01,
                                                   hv_HomMat2D_01);
                ho_RegionAffinTrans_01.Dispose();
                HOperatorSet.AffineTransRegion(ho_RegionMoved_01, out ho_RegionAffinTrans_01,
                                               hv_HomMat2D_01, "nearest_neighbor");

                HOperatorSet.VectorAngleToRigid(0, 0, 0, hv_MatchRow_02, hv_MatchColumn_02,
                                                hv_MatchAngle_02, out hv_HomMat2D_02);
                ho_ContoursAffinTrans_02.Dispose();
                HOperatorSet.AffineTransContourXld(ho_ModelContours_02, out ho_ContoursAffinTrans_02,
                                                   hv_HomMat2D_02);
                ho_RegionAffinTrans_02.Dispose();
                HOperatorSet.AffineTransRegion(ho_RegionMoved_02, out ho_RegionAffinTrans_02,
                                               hv_HomMat2D_02, "nearest_neighbor");


                HOperatorSet.AngleLx(hv_MatchRow_01, hv_MatchColumn_01, hv_MatchRow_02, hv_MatchColumn_02,
                                     out hv_Angle);
                HOperatorSet.VectorAngleToRigid(0, 0, hv_AngleModel, hv_MatchRow_01, hv_MatchColumn_01,
                                                hv_Angle, out hv_HomMat2D);

                //affine_trans_pixel (HomMat2D, Rows, Cols, RowTrans, ColTrans)
                //gen_circle_contour_xld (ContCircle1, RowTrans, ColTrans, Circle_Radius, 0, 6.28318, 'positive', 1)
                hv_Result = true;
            }
            ho_RegionMoved_01.Dispose();
            ho_RegionMoved_02.Dispose();

            return;
        }
示例#14
0
        private void action(HTuple HDWindow_, string imgPath)
        {
            HDevWindowStack.Push(HDWindow_);
            // Local iconic variables

            HObject ho_Image, ho_DotImage, ho_Region, ho_RegionDilation;
            HObject ho_RegionClosing, ho_ConnectedRegions, ho_SelectedRegions;
            HObject ho_RegionUnion, ho_RegionClosing2, ho_ConnectedRegions2;
            HObject ho_SelectedRegions5, ho_RegionIntersection, ho_RegionAffineTrans1;
            HObject ho_rotateImage, ho_RegionDilation1, ho_RegionClosing1;
            HObject ho_RegionOpening, ho_ConnectedRegions1, ho_SelectedRegions1;
            HObject ho_RegionTrans, ho_Partitioned, ho_SelectedRegions2;
            HObject ho_RegionIntersection1, ho_SortedRegions1, ho_SelectedRegions3;
            HObject ho_RegionTrans1, ho_Partitioned1, ho_SelectedRegions4;
            HObject ho_RegionIntersection2, ho_SortedRegions2;


            // Local control variables

            HTuple hv_Row, hv_Column, hv_Phi, hv_Length1;
            HTuple hv_Length2, hv_HomMat2DIdentity, hv_HomMat2DRotate;
            HTuple hv_Area, hv_Row1, hv_Column1, hv_Area11, hv_Row11;
            HTuple hv_Column11, hv_Number1, hv_OCRHandle, hv_Chars1;
            HTuple hv_Confidence1, hv_Area12, hv_Row12, hv_Column12;
            HTuple hv_Number2, hv_Chars2, hv_Confidence2;

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Image);
            HOperatorSet.GenEmptyObj(out ho_DotImage);
            HOperatorSet.GenEmptyObj(out ho_Region);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation);
            HOperatorSet.GenEmptyObj(out ho_RegionClosing);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
            HOperatorSet.GenEmptyObj(out ho_RegionUnion);
            HOperatorSet.GenEmptyObj(out ho_RegionClosing2);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions2);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions5);
            HOperatorSet.GenEmptyObj(out ho_RegionIntersection);
            HOperatorSet.GenEmptyObj(out ho_RegionAffineTrans1);
            HOperatorSet.GenEmptyObj(out ho_rotateImage);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation1);
            HOperatorSet.GenEmptyObj(out ho_RegionClosing1);
            HOperatorSet.GenEmptyObj(out ho_RegionOpening);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_RegionTrans);
            HOperatorSet.GenEmptyObj(out ho_Partitioned);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions2);
            HOperatorSet.GenEmptyObj(out ho_RegionIntersection1);
            HOperatorSet.GenEmptyObj(out ho_SortedRegions1);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions3);
            HOperatorSet.GenEmptyObj(out ho_RegionTrans1);
            HOperatorSet.GenEmptyObj(out ho_Partitioned1);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions4);
            HOperatorSet.GenEmptyObj(out ho_RegionIntersection2);
            HOperatorSet.GenEmptyObj(out ho_SortedRegions2);

            ho_Image.Dispose();
            HOperatorSet.ReadImage(out ho_Image, imgPath);
            ho_DotImage.Dispose();
            HOperatorSet.DotsImage(ho_Image, out ho_DotImage, 5, "dark", 2);
            ho_Region.Dispose();
            HOperatorSet.Threshold(ho_DotImage, out ho_Region, 110, 255);
            ho_RegionDilation.Dispose();
            HOperatorSet.DilationCircle(ho_Region, out ho_RegionDilation, 2.5);
            ho_RegionClosing.Dispose();
            HOperatorSet.ClosingRectangle1(ho_RegionDilation, out ho_RegionClosing, 3, 3);
            ho_ConnectedRegions.Dispose();
            HOperatorSet.Connection(ho_RegionClosing, out ho_ConnectedRegions);
            ho_SelectedRegions.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, (new HTuple("width")).TupleConcat(
                                         "height"), "and", (new HTuple(15)).TupleConcat(15), (new HTuple(80)).TupleConcat(
                                         80));
            ho_RegionUnion.Dispose();
            HOperatorSet.Union1(ho_SelectedRegions, out ho_RegionUnion);
            ho_RegionClosing2.Dispose();
            HOperatorSet.ClosingRectangle1(ho_RegionUnion, out ho_RegionClosing2, 30, 20);
            ho_ConnectedRegions2.Dispose();
            HOperatorSet.Connection(ho_RegionClosing2, out ho_ConnectedRegions2);
            ho_SelectedRegions5.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions2, out ho_SelectedRegions5, "area",
                                     "and", 10000, 20000);

            ho_RegionIntersection.Dispose();
            HOperatorSet.Intersection(ho_Region, ho_SelectedRegions5, out ho_RegionIntersection
                                      );
            HOperatorSet.SmallestRectangle2(ho_RegionIntersection, out hv_Row, out hv_Column,
                                            out hv_Phi, out hv_Length1, out hv_Length2);
            HOperatorSet.HomMat2dIdentity(out hv_HomMat2DIdentity);
            HOperatorSet.HomMat2dRotate(hv_HomMat2DIdentity, -hv_Phi, hv_Column, hv_Row,
                                        out hv_HomMat2DRotate);
            ho_RegionAffineTrans1.Dispose();
            HOperatorSet.AffineTransRegion(ho_RegionIntersection, out ho_RegionAffineTrans1,
                                           hv_HomMat2DRotate, "true");
            ho_rotateImage.Dispose();
            HOperatorSet.AffineTransImage(ho_Image, out ho_rotateImage, hv_HomMat2DRotate,
                                          "bilinear", "false");
            ho_RegionDilation1.Dispose();
            HOperatorSet.DilationCircle(ho_RegionAffineTrans1, out ho_RegionDilation1, 2.5);
            ho_RegionClosing1.Dispose();
            HOperatorSet.ClosingRectangle1(ho_RegionDilation1, out ho_RegionClosing1, 3,
                                           3);
            ho_RegionOpening.Dispose();
            HOperatorSet.OpeningCircle(ho_RegionClosing1, out ho_RegionOpening, 2.5);
            ho_ConnectedRegions1.Dispose();
            HOperatorSet.Connection(ho_RegionOpening, out ho_ConnectedRegions1);
            HOperatorSet.AreaCenter(ho_RegionAffineTrans1, out hv_Area, out hv_Row1, out hv_Column1);

            ho_SelectedRegions1.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions1, out ho_SelectedRegions1, "row",
                                     "and", hv_Row1 - 30, hv_Row1);
            ho_RegionTrans.Dispose();
            HOperatorSet.ShapeTrans(ho_SelectedRegions1, out ho_RegionTrans, "rectangle1");
            ho_Partitioned.Dispose();
            HOperatorSet.PartitionDynamic(ho_RegionTrans, out ho_Partitioned, 20, 20);
            ho_SelectedRegions2.Dispose();
            HOperatorSet.SelectShape(ho_Partitioned, out ho_SelectedRegions2, "height", "and",
                                     25, 48);
            ho_RegionIntersection1.Dispose();
            HOperatorSet.Intersection(ho_SelectedRegions2, ho_RegionAffineTrans1, out ho_RegionIntersection1
                                      );
            ho_SortedRegions1.Dispose();
            HOperatorSet.SortRegion(ho_RegionIntersection1, out ho_SortedRegions1, "first_point",
                                    "true", "column");
            HOperatorSet.AreaCenter(ho_SortedRegions1, out hv_Area11, out hv_Row11, out hv_Column11);
            HOperatorSet.CountObj(ho_SortedRegions1, out hv_Number1);
            //FontFile := 'D:/github/CodeRecognition/tzb1112.omc'
            HOperatorSet.ReadOcrClassMlp("C:/Program Files/MVTec/HALCON-10.0/ocr/DotPrint_0-9A-Z.omc",
                                         out hv_OCRHandle);
            HOperatorSet.DoOcrMultiClassMlp(ho_SortedRegions1, ho_rotateImage, hv_OCRHandle,
                                            out hv_Chars1, out hv_Confidence1);

            ho_SelectedRegions3.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions1, out ho_SelectedRegions3, "row",
                                     "and", hv_Row1, hv_Row1 + 40);
            ho_RegionTrans1.Dispose();
            HOperatorSet.ShapeTrans(ho_SelectedRegions3, out ho_RegionTrans1, "rectangle1");
            ho_Partitioned1.Dispose();
            HOperatorSet.PartitionDynamic(ho_RegionTrans1, out ho_Partitioned1, 20, 1);
            ho_SelectedRegions4.Dispose();
            HOperatorSet.SelectShape(ho_Partitioned1, out ho_SelectedRegions4, "height",
                                     "and", 25, 48);
            ho_RegionIntersection2.Dispose();
            HOperatorSet.Intersection(ho_SelectedRegions4, ho_RegionAffineTrans1, out ho_RegionIntersection2
                                      );
            ho_SortedRegions2.Dispose();
            HOperatorSet.SortRegion(ho_RegionIntersection2, out ho_SortedRegions2, "first_point",
                                    "true", "column");
            HOperatorSet.AreaCenter(ho_SortedRegions2, out hv_Area12, out hv_Row12, out hv_Column12);
            HOperatorSet.CountObj(ho_SortedRegions2, out hv_Number2);
            HOperatorSet.DoOcrMultiClassMlp(ho_SortedRegions2, ho_rotateImage, hv_OCRHandle,
                                            out hv_Chars2, out hv_Confidence2);

            //word := ['d']
            //TrainFile := 'D:/github/CodeRecognition/tzb1112.trf'
            //dev_set_check ('~give_error')
            //delete_file (TrainFile)
            //dev_set_check ('~give_error')
            //for i := 7 to Number2 by 1
            //select_obj (SortedRegions2, SingleWord, i)
            //append_ocr_trainf (SingleWord, rotateImage, word, TrainFile)
            //endfor
            //read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)
            //trainf_ocr_class_mlp (OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)
            //write_ocr_class_mlp (OCRHandle, FontFile)

            //120, 68, 147, 183, 188, 0, 0, 107, 162, 197, 138, 0, 123
            //120, 68, 147, 183, 146, 202, 0, 107, 162, 197, 138, 169, 123
            if (HDevWindowStack.IsOpen())
            {
                HOperatorSet.ClearWindow(HDevWindowStack.GetActive());
            }
            if (HDevWindowStack.IsOpen())
            {
                HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());
            }
            if (HDevWindowStack.IsOpen())
            {
                HOperatorSet.SetColor(HDevWindowStack.GetActive(), "blue");
            }
            if (HDevWindowStack.IsOpen())
            {
                HOperatorSet.DispObj(ho_SortedRegions1, HDevWindowStack.GetActive());
            }
            if (HDevWindowStack.IsOpen())
            {
                HOperatorSet.DispObj(ho_SortedRegions2, HDevWindowStack.GetActive());
            }

            ho_Image.Dispose();
            ho_DotImage.Dispose();
            ho_Region.Dispose();
            ho_RegionDilation.Dispose();
            ho_RegionClosing.Dispose();
            ho_ConnectedRegions.Dispose();
            ho_SelectedRegions.Dispose();
            ho_RegionUnion.Dispose();
            ho_RegionClosing2.Dispose();
            ho_ConnectedRegions2.Dispose();
            ho_SelectedRegions5.Dispose();
            ho_RegionIntersection.Dispose();
            ho_RegionAffineTrans1.Dispose();
            ho_rotateImage.Dispose();
            ho_RegionDilation1.Dispose();
            ho_RegionClosing1.Dispose();
            ho_RegionOpening.Dispose();
            ho_ConnectedRegions1.Dispose();
            ho_SelectedRegions1.Dispose();
            ho_RegionTrans.Dispose();
            ho_Partitioned.Dispose();
            ho_SelectedRegions2.Dispose();
            ho_RegionIntersection1.Dispose();
            ho_SortedRegions1.Dispose();
            ho_SelectedRegions3.Dispose();
            ho_RegionTrans1.Dispose();
            ho_Partitioned1.Dispose();
            ho_SelectedRegions4.Dispose();
            ho_RegionIntersection2.Dispose();
            ho_SortedRegions2.Dispose();

            //errorCounts = hv_errorCounts;
            RecognitionStr1 = hv_Chars1;
            RecognitionStr2 = hv_Chars2;
        }
        private void action()
        {
            // Stack for temporary objects
            HObject[] OTemp = new HObject[20];

            // Local iconic variables

            HObject ho_Rectangle, ho_ImageReduced;
            HObject ho_Region, ho_ConnectedRegions, ho_SelectedRegions;
            HObject ho_Rectangle1, ho_ImageRotate, ho_Region1, ho_RegionAffineTrans;
            HObject ho_Region2, ho_RegionUnionu, ho_RegionUniond, ho_Contours;
            HObject ho_SelectedContours, ho_SmoothedContours1, ho_ClippedContoursu;
            HObject ho_ClippedContoursd, ho_Rectangle2, ho_ClippedContoursuObjectSelected = null;
            HObject ho_ClippedContoursdObjectSelected = null, ho_Circle = null;
            HObject ho_Circle1 = null, ho_ConnectedRegions1, ho_SelectedRegions1;
            HObject ho_SortedRegionssdj, ho_Region3, ho_ConnectedRegions2;
            HObject ho_SelectedRegions2, ho_SortedRegionsxdj, ho_RegionLines = null;
            HObject ho_RegionAffineTrans1;

            // Local control variables

            HTuple hv_Width = null, hv_Height = null;
            HTuple hv_jd = null, hv_Row = null, hv_Column = null, hv_Phi = null;
            HTuple hv_Length1 = null, hv_Length2 = null, hv_HomMat2DIdentity = null;
            HTuple hv_HomMat2DRotate = null, hv_Row1 = null, hv_Column1 = null;
            HTuple hv_Row2 = null, hv_Column2 = null, hv_Rown = null;
            HTuple hv_Rowu = null, hv_Columnu = null, hv_Phiu = null;
            HTuple hv_Length1u = null, hv_Length2u = null, hv_MeasureHandleu = null;
            HTuple hv_GrayValuesu = null, hv_Sigmau = null, hv_Functionu = null;
            HTuple hv_SmoothedFunctionu = null, hv_FirstDerivativeu = null;
            HTuple hv_ZeroCrossingsu = null, hv_RowStartu = null, hv_ColStartu = null;
            HTuple hv_RowEndu = null, hv_ColEndu = null, hv_iu = null;
            HTuple hv_Rowd = null, hv_Columnd = null, hv_Phid = null;
            HTuple hv_Length1d = null, hv_Length2d = null, hv_MeasureHandled = null;
            HTuple hv_GrayValuesd = null, hv_Sigmad = null, hv_Functiond = null;
            HTuple hv_SmoothedFunctiond = null, hv_FirstDerivatived = null;
            HTuple hv_ZeroCrossingsd = null, hv_RowStartd = null, hv_ColStartd = null;
            HTuple hv_RowEndd = null, hv_ColEndd = null, hv_id = null;
            HTuple hv_RowIntuAll = null, hv_ColumnIntuAll = null, hv_u1 = null;
            HTuple hv_i = null, hv_Length = new HTuple(), hv_Indices1 = new HTuple();
            HTuple hv_RowIntu = new HTuple(), hv_ColumnIntu = new HTuple();
            HTuple hv_IsOverlappingu = new HTuple(), hv_RowIntdAll = null;
            HTuple hv_ColumnIntdAll = null, hv_j = null, hv_RowIntd = new HTuple();
            HTuple hv_ColumnIntd = new HTuple(), hv_IsOverlappingd = new HTuple();
            HTuple hv_Sortedu = null, hv_Sortedd = null, hv_RowIntuu = null;
            HTuple hv_ColumnIntuu = null, hv_RowIntud = null, hv_ColumnIntud = null;
            HTuple hv_uu = null, hv_ud = null, hv_ub1 = null, hv_RowIntdu = null;
            HTuple hv_ColumnIntdu = null, hv_RowIntdd = null, hv_ColumnIntdd = null;
            HTuple hv_du = null, hv_dd = null, hv_db1 = null, hv_Areasdj = null;
            HTuple hv_Rowsdj = null, hv_Columnsdj = null, hv_sdj = null;
            HTuple hv_Areaxdj = null, hv_Rowxdj = null, hv_Columnxdj = null;
            HTuple hv_xdj = null, hv_djsl1 = null, hv_djsl = null;
            HTuple hv_Mean1 = null, hv_Mean2 = null, hv_Mean3 = null;
            HTuple hv_Mean4 = null, hv_Columnuu = null, hv_Columndd = null;
            HTuple hv_AngleAll = null, hv_l = null, hv_Angle = new HTuple();
            HTuple hv_DegAll = null, hv_Mean5 = null, hv_Mean8 = null;
            HTuple hv_Columnuum = null, hv_uum1 = null, hv_uus = null;
            HTuple hv_Columnddm = null, hv_ddm = null, hv_dds = null;
            HTuple hv_ColumnmArr = null, hv_Mean9 = null, hv_Mean10 = null;
            HTuple hv_Sorteda = null, hv_Ai = null, hv_Ax = null, hv_pixeldist = null;
            HTuple hv_L = null, hv_D = null, hv_Dmax = null, hv_Dmin = null;
            HTuple hv_d = null, hv_dmax = null, hv_dmin = null, hv_LS = null;
            HTuple hv_HomMat2DIdentity1 = null, hv_HomMat2DRotate1 = null;

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Rectangle);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced);
            HOperatorSet.GenEmptyObj(out ho_Region);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
            HOperatorSet.GenEmptyObj(out ho_Rectangle1);
            HOperatorSet.GenEmptyObj(out ho_ImageRotate);
            HOperatorSet.GenEmptyObj(out ho_Region1);
            HOperatorSet.GenEmptyObj(out ho_RegionAffineTrans);
            HOperatorSet.GenEmptyObj(out ho_Region2);
            HOperatorSet.GenEmptyObj(out ho_RegionUnionu);
            HOperatorSet.GenEmptyObj(out ho_RegionUniond);
            HOperatorSet.GenEmptyObj(out ho_Contours);
            HOperatorSet.GenEmptyObj(out ho_SelectedContours);
            HOperatorSet.GenEmptyObj(out ho_SmoothedContours1);
            HOperatorSet.GenEmptyObj(out ho_ClippedContoursu);
            HOperatorSet.GenEmptyObj(out ho_ClippedContoursd);
            HOperatorSet.GenEmptyObj(out ho_Rectangle2);
            HOperatorSet.GenEmptyObj(out ho_ClippedContoursuObjectSelected);
            HOperatorSet.GenEmptyObj(out ho_ClippedContoursdObjectSelected);
            HOperatorSet.GenEmptyObj(out ho_Circle);
            HOperatorSet.GenEmptyObj(out ho_Circle1);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_SortedRegionssdj);
            HOperatorSet.GenEmptyObj(out ho_Region3);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions2);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions2);
            HOperatorSet.GenEmptyObj(out ho_SortedRegionsxdj);
            HOperatorSet.GenEmptyObj(out ho_RegionLines);
            HOperatorSet.GenEmptyObj(out ho_RegionAffineTrans1);
            HOperatorSet.Union1(algorithm.Region, out RegionToDisp);
            try
            {
                HOperatorSet.GetImageSize(Image, out hv_Width, out hv_Height);
                ho_Rectangle.Dispose();
                HOperatorSet.GenRectangle1(out ho_Rectangle, DRow1m, DCol1m, DRow2m, DCol2m);
                ho_ImageReduced.Dispose();
                HOperatorSet.ReduceDomain(Image, ho_Rectangle, out ho_ImageReduced);

                //*
                ho_Region.Dispose();
                HOperatorSet.Threshold(ho_ImageReduced, out ho_Region, 0, 128);
                ho_ConnectedRegions.Dispose();
                HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);
                ho_SelectedRegions.Dispose();
                HOperatorSet.SelectShapeStd(ho_ConnectedRegions, out ho_SelectedRegions, "max_area",
                                            70);
                //hv_jd = 0;
                HOperatorSet.SmallestRectangle2(ho_SelectedRegions, out hv_Row, out hv_Column,
                                                out hv_Phi, out hv_Length1, out hv_Length2);
                ho_Rectangle1.Dispose();
                HOperatorSet.GenRectangle2(out ho_Rectangle1, hv_Row, hv_Column, hv_Phi, hv_Length1,
                                           hv_Length2);
                ho_ImageRotate.Dispose();
                HOperatorSet.RotateImage(Image, out ho_ImageRotate, -(hv_Phi.TupleDeg()),
                                         "constant");
                //*
                ho_Region1.Dispose();
                HOperatorSet.Threshold(ho_ImageRotate, out ho_Region1, 0, 128);
                //*
                HOperatorSet.HomMat2dIdentity(out hv_HomMat2DIdentity);
                HOperatorSet.HomMat2dRotate(hv_HomMat2DIdentity, -hv_Phi, hv_Height / 2, hv_Width / 2,
                                            out hv_HomMat2DRotate);
                ho_RegionAffineTrans.Dispose();
                HOperatorSet.AffineTransRegion(ho_Rectangle1, out ho_RegionAffineTrans, hv_HomMat2DRotate,
                                               "nearest_neighbor");



                HOperatorSet.SmallestRectangle1(ho_RegionAffineTrans, out hv_Row1, out hv_Column1,
                                                out hv_Row2, out hv_Column2);

                //***
                ho_Region2.Dispose();
                HOperatorSet.GenRegionPoints(out ho_Region2, hv_Row1, hv_Column1);
                ho_RegionUnionu.Dispose();
                HOperatorSet.Union1(ho_Region2, out ho_RegionUnionu);
                ho_RegionUniond.Dispose();
                HOperatorSet.Union1(ho_Region2, out ho_RegionUniond);



                ho_Contours.Dispose();
                HOperatorSet.GenContourRegionXld(ho_Region1, out ho_Contours, "border");
                ho_SelectedContours.Dispose();
                HOperatorSet.SelectContoursXld(ho_Contours, out ho_SelectedContours, "contour_length",
                                               20, 2000000, -1, 1);
                ho_SmoothedContours1.Dispose();
                HOperatorSet.SmoothContoursXld(ho_SelectedContours, out ho_SmoothedContours1,
                                               13);
                //*
                hv_Rown = (hv_Row1 + hv_Row2) / 2;
                ho_ClippedContoursu.Dispose();
                HOperatorSet.ClipContoursXld(ho_SmoothedContours1, out ho_ClippedContoursu, hv_Row1,
                                             hv_Column1, hv_Rown, hv_Column2);
                ho_ClippedContoursd.Dispose();
                HOperatorSet.ClipContoursXld(ho_SmoothedContours1, out ho_ClippedContoursd, hv_Rown,
                                             hv_Column1, hv_Row2, hv_Column2);
                hv_Rowu     = (hv_Row1 + hv_Rown) / 2;
                hv_Columnu  = (hv_Column1 + hv_Column2) / 2;
                hv_Phiu     = 0;
                hv_Length1u = (hv_Column2 - hv_Column1) / 2;
                hv_Length2u = (hv_Rown - hv_Row1) / 2;
                //dev_set_draw ('margin')
                HOperatorSet.GenMeasureRectangle2(hv_Rowu, hv_Columnu, hv_Phiu, hv_Length1u,
                                                  hv_Length2u, hv_Width, hv_Height, "bilinear", out hv_MeasureHandleu);
                ho_Rectangle2.Dispose();
                HOperatorSet.GenRectangle2(out ho_Rectangle2, hv_Rowu, hv_Columnu, hv_Phiu, hv_Length1u,
                                           hv_Length2u);

                HOperatorSet.MeasureProjection(ho_ImageRotate, hv_MeasureHandleu, out hv_GrayValuesu);
                hv_Sigmau = 5;
                HOperatorSet.CreateFunct1dArray(hv_GrayValuesu, out hv_Functionu);
                HOperatorSet.SmoothFunct1dGauss(hv_Functionu, hv_Sigmau, out hv_SmoothedFunctionu);
                HOperatorSet.DerivateFunct1d(hv_SmoothedFunctionu, "first", out hv_FirstDerivativeu);
                HOperatorSet.ZeroCrossingsFunct1d(hv_FirstDerivativeu, out hv_ZeroCrossingsu);

                hv_RowStartu = hv_Rowu - (hv_Length2u / 2);
                hv_ColStartu = (hv_Columnu - hv_Length1u) + hv_ZeroCrossingsu;
                hv_RowEndu   = hv_Rowu + (hv_Length2u / 2);
                hv_ColEndu   = (hv_Columnu - hv_Length1u) + hv_ZeroCrossingsu;
                hv_iu        = new HTuple(hv_ZeroCrossingsu.TupleLength());


                hv_Rowd     = (hv_Rown + hv_Row2) / 2;
                hv_Columnd  = (hv_Column1 + hv_Column2) / 2;
                hv_Phid     = 0;
                hv_Length1d = (hv_Column2 - hv_Column1) / 2;
                hv_Length2d = (hv_Row2 - hv_Rown) / 2;
                HOperatorSet.GenMeasureRectangle2(hv_Rowd, hv_Columnd, hv_Phid, hv_Length1d,
                                                  hv_Length2d, hv_Width, hv_Height, "bilinear", out hv_MeasureHandled);
                HOperatorSet.MeasureProjection(ho_ImageRotate, hv_MeasureHandled, out hv_GrayValuesd);
                //
                hv_Sigmad = 5;
                HOperatorSet.CreateFunct1dArray(hv_GrayValuesd, out hv_Functiond);
                HOperatorSet.SmoothFunct1dGauss(hv_Functiond, hv_Sigmad, out hv_SmoothedFunctiond);
                HOperatorSet.DerivateFunct1d(hv_SmoothedFunctiond, "first", out hv_FirstDerivatived);
                HOperatorSet.ZeroCrossingsFunct1d(hv_FirstDerivatived, out hv_ZeroCrossingsd);

                HOperatorSet.CloseMeasure(hv_MeasureHandleu);
                HOperatorSet.CloseMeasure(hv_MeasureHandled);

                hv_RowStartd = hv_Rowd - (hv_Length2d / 2);
                hv_ColStartd = (hv_Columnd - hv_Length1d) + hv_ZeroCrossingsd;
                hv_RowEndd   = hv_Rowd + (hv_Length2d / 2);
                hv_ColEndd   = (hv_Columnd - hv_Length1d) + hv_ZeroCrossingsd;

                hv_id = new HTuple(hv_ZeroCrossingsd.TupleLength());


                hv_RowIntuAll    = new HTuple();
                hv_ColumnIntuAll = new HTuple();
                hv_u1            = 0;
                HTuple end_val96  = hv_iu - 1;
                HTuple step_val96 = 1;
                for (hv_i = 0; hv_i.Continue(end_val96, step_val96); hv_i = hv_i.TupleAdd(step_val96))
                {
                    HOperatorSet.LengthXld(ho_ClippedContoursu, out hv_Length);
                    HOperatorSet.TupleFind(hv_Length, hv_Length.TupleMax(), out hv_Indices1);
                    ho_ClippedContoursuObjectSelected.Dispose();
                    HOperatorSet.SelectObj(ho_ClippedContoursu, out ho_ClippedContoursuObjectSelected,
                                           hv_Indices1 + 1);
                    HOperatorSet.IntersectionLineContourXld(ho_ClippedContoursuObjectSelected,
                                                            hv_RowStartu, hv_ColStartu.TupleSelect(hv_i), hv_RowEndu, hv_ColEndu.TupleSelect(
                                                                hv_i), out hv_RowIntu, out hv_ColumnIntu, out hv_IsOverlappingu);
                    //*gen_cross_contour_xld (Cross1u, RowIntu, ColumnIntu, 12, 0)//根据每个输入点交叉的形状创键一个XLD轮廓(contour)
                    hv_RowIntuAll    = hv_RowIntuAll.TupleConcat(hv_RowIntu);
                    hv_ColumnIntuAll = hv_ColumnIntuAll.TupleConcat(hv_ColumnIntu);
                    hv_u1            = hv_u1 + 1;
                }

                hv_RowIntdAll    = new HTuple();
                hv_ColumnIntdAll = new HTuple();
                HTuple end_val109  = hv_id - 1;
                HTuple step_val109 = 1;
                for (hv_j = 0; hv_j.Continue(end_val109, step_val109); hv_j = hv_j.TupleAdd(step_val109))
                {
                    HOperatorSet.LengthXld(ho_ClippedContoursd, out hv_Length);
                    HOperatorSet.TupleFind(hv_Length, hv_Length.TupleMax(), out hv_Indices1);
                    ho_ClippedContoursdObjectSelected.Dispose();
                    HOperatorSet.SelectObj(ho_ClippedContoursd, out ho_ClippedContoursdObjectSelected,
                                           hv_Indices1 + 1);
                    HOperatorSet.IntersectionLineContourXld(ho_ClippedContoursdObjectSelected,
                                                            hv_RowStartd, hv_ColStartd.TupleSelect(hv_j), hv_RowEndd, hv_ColEndd.TupleSelect(
                                                                hv_j), out hv_RowIntd, out hv_ColumnIntd, out hv_IsOverlappingd);
                    //*gen_cross_contour_xld (Cross1d, RowIntd, ColumnIntd, 12, 0)//根据每个输入点交叉的形状创键一个XLD轮廓(contour)
                    hv_RowIntdAll    = hv_RowIntdAll.TupleConcat(hv_RowIntd);
                    hv_ColumnIntdAll = hv_ColumnIntdAll.TupleConcat(hv_ColumnIntd);
                }

                //stop ()

                HOperatorSet.TupleSort(hv_RowIntuAll, out hv_Sortedu);
                HOperatorSet.TupleSort(hv_RowIntdAll, out hv_Sortedd);
                hv_RowIntuu    = new HTuple();
                hv_ColumnIntuu = new HTuple();
                hv_RowIntud    = new HTuple();
                hv_ColumnIntud = new HTuple();
                hv_uu          = 0;
                hv_ud          = 0;
                for (hv_ub1 = 0; (int)hv_ub1 <= (int)((new HTuple(hv_Sortedu.TupleLength())) - 1); hv_ub1 = (int)hv_ub1 + 1)
                {
                    if ((int)(new HTuple(((hv_RowIntuAll.TupleSelect(hv_ub1))).TupleLess(((((hv_Sortedu.TupleSelect(
                                                                                                 0)) * 2) + (hv_Sortedu.TupleSelect((new HTuple(hv_Sortedu.TupleLength())) - 1))) / 3) + 3))) != 0)
                    {
                        hv_RowIntuu    = hv_RowIntuu.TupleConcat(hv_RowIntuAll.TupleSelect(hv_ub1));
                        hv_ColumnIntuu = hv_ColumnIntuu.TupleConcat(hv_ColumnIntuAll.TupleSelect(
                                                                        hv_ub1));

                        ho_Circle.Dispose();
                        HOperatorSet.GenCircle(out ho_Circle, hv_RowIntuAll.TupleSelect(hv_ub1),
                                               hv_ColumnIntuAll.TupleSelect(hv_ub1), 1);
                        {
                            HObject ExpTmpOutVar_0;
                            HOperatorSet.Union2(ho_RegionUnionu, ho_Circle, out ExpTmpOutVar_0);
                            ho_RegionUnionu.Dispose();
                            ho_RegionUnionu = ExpTmpOutVar_0;
                        }
                        hv_uu = hv_uu + 1;
                    }

                    if ((int)(new HTuple(((hv_RowIntuAll.TupleSelect(hv_ub1))).TupleGreater((((hv_Sortedu.TupleSelect(
                                                                                                   0)) + ((hv_Sortedu.TupleSelect((new HTuple(hv_Sortedu.TupleLength())) - 1)) * 2)) / 3) - 3))) != 0)
                    {
                        hv_RowIntud    = hv_RowIntud.TupleConcat(hv_RowIntuAll.TupleSelect(hv_ub1));
                        hv_ColumnIntud = hv_ColumnIntud.TupleConcat(hv_ColumnIntuAll.TupleSelect(
                                                                        hv_ub1));
                        hv_ud = hv_ud + 1;
                    }
                }

                //stop ()

                hv_RowIntdu    = new HTuple();
                hv_ColumnIntdu = new HTuple();
                hv_RowIntdd    = new HTuple();
                hv_ColumnIntdd = new HTuple();
                hv_du          = 0;
                hv_dd          = 0;
                for (hv_db1 = 0; (int)hv_db1 <= (int)((new HTuple(hv_Sortedd.TupleLength())) - 1); hv_db1 = (int)hv_db1 + 1)
                {
                    if ((int)(new HTuple(((hv_RowIntdAll.TupleSelect(hv_db1))).TupleLess(((((hv_Sortedd.TupleSelect(
                                                                                                 0)) * 2) + (hv_Sortedd.TupleSelect((new HTuple(hv_Sortedd.TupleLength())) - 1))) / 3) + 3))) != 0)
                    {
                        hv_RowIntdu    = hv_RowIntdu.TupleConcat(hv_RowIntdAll.TupleSelect(hv_db1));
                        hv_ColumnIntdu = hv_ColumnIntdu.TupleConcat(hv_ColumnIntdAll.TupleSelect(
                                                                        hv_db1));
                        hv_du = hv_du + 1;
                    }
                    if ((int)(new HTuple(((hv_RowIntdAll.TupleSelect(hv_db1))).TupleGreater((((hv_Sortedd.TupleSelect(
                                                                                                   0)) + ((hv_Sortedd.TupleSelect((new HTuple(hv_Sortedd.TupleLength())) - 1)) * 2)) / 3) - 3))) != 0)
                    {
                        hv_RowIntdd    = hv_RowIntdd.TupleConcat(hv_RowIntdAll.TupleSelect(hv_db1));
                        hv_ColumnIntdd = hv_ColumnIntdd.TupleConcat(hv_ColumnIntdAll.TupleSelect(
                                                                        hv_db1));
                        ho_Circle1.Dispose();
                        HOperatorSet.GenCircle(out ho_Circle1, hv_RowIntdAll.TupleSelect(hv_db1),
                                               hv_ColumnIntdAll.TupleSelect(hv_db1), 1);
                        {
                            HObject ExpTmpOutVar_0;
                            HOperatorSet.Union2(ho_RegionUniond, ho_Circle1, out ExpTmpOutVar_0);
                            ho_RegionUniond.Dispose();
                            ho_RegionUniond = ExpTmpOutVar_0;
                        }
                        hv_dd = hv_dd + 1;
                    }
                }

                ho_ConnectedRegions1.Dispose();
                HOperatorSet.Connection(ho_RegionUnionu, out ho_ConnectedRegions1);
                ho_SelectedRegions1.Dispose();
                HOperatorSet.SelectShape(ho_ConnectedRegions1, out ho_SelectedRegions1, "area",
                                         "and", 3, 99999);
                ho_SortedRegionssdj.Dispose();
                HOperatorSet.SortRegion(ho_SelectedRegions1, out ho_SortedRegionssdj, "upper_left",
                                        "true", "column");
                HOperatorSet.AreaCenter(ho_SortedRegionssdj, out hv_Areasdj, out hv_Rowsdj, out hv_Columnsdj);
                ho_Region3.Dispose();
                HOperatorSet.GenRegionPoints(out ho_Region3, hv_Rowsdj.TupleSelect(0), hv_Columnsdj.TupleSelect(
                                                 0));
                hv_sdj = new HTuple(hv_Columnsdj.TupleLength());

                ho_ConnectedRegions2.Dispose();
                HOperatorSet.Connection(ho_RegionUniond, out ho_ConnectedRegions2);
                ho_SelectedRegions2.Dispose();
                HOperatorSet.SelectShape(ho_ConnectedRegions2, out ho_SelectedRegions2, "area",
                                         "and", 3, 99999);
                ho_SortedRegionsxdj.Dispose();
                HOperatorSet.SortRegion(ho_SelectedRegions2, out ho_SortedRegionsxdj, "upper_left",
                                        "true", "column");
                HOperatorSet.AreaCenter(ho_SortedRegionsxdj, out hv_Areaxdj, out hv_Rowxdj, out hv_Columnxdj);
                hv_xdj   = new HTuple(hv_Columnxdj.TupleLength());
                hv_djsl1 = new HTuple();
                hv_djsl1 = hv_djsl1.TupleConcat(hv_sdj);
                hv_djsl1 = hv_djsl1.TupleConcat(hv_xdj);
                HOperatorSet.TupleMin(hv_djsl1, out hv_djsl);
                HOperatorSet.TupleMean(hv_RowIntuu, out hv_Mean1);
                HOperatorSet.TupleMean(hv_RowIntud, out hv_Mean2);
                HOperatorSet.TupleMean(hv_RowIntdu, out hv_Mean3);
                HOperatorSet.TupleMean(hv_RowIntdd, out hv_Mean4);

                hv_Columnuu = new HTuple();
                hv_Columndd = new HTuple();
                hv_AngleAll = new HTuple();
                HTuple end_val191  = hv_djsl - 1;
                HTuple step_val191 = 1;
                for (hv_l = 0; hv_l.Continue(end_val191, step_val191); hv_l = hv_l.TupleAdd(step_val191))
                {
                    ho_RegionLines.Dispose();
                    HOperatorSet.GenRegionLine(out ho_RegionLines, hv_Rowsdj.TupleSelect(hv_l),
                                               hv_Columnsdj.TupleSelect(hv_l), hv_Rowxdj.TupleSelect(hv_l), hv_Columnxdj.TupleSelect(
                                                   hv_l));
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.Union2(ho_Region3, ho_RegionLines, out ExpTmpOutVar_0);
                        ho_Region3.Dispose();
                        ho_Region3 = ExpTmpOutVar_0;
                    }
                    HOperatorSet.AngleLx(hv_Rowsdj.TupleSelect(hv_l), hv_Columnsdj.TupleSelect(
                                             hv_l), hv_Rowxdj.TupleSelect(hv_l), hv_Columnxdj.TupleSelect(hv_l), out hv_Angle);
                    hv_AngleAll = hv_AngleAll.TupleConcat(0 - hv_Angle);
                    if ((int)(new HTuple(hv_l.TupleGreater(0))) != 0)
                    {
                        hv_Columnuu = hv_Columnuu.TupleConcat((hv_ColumnIntuu.TupleSelect(hv_l)) - (hv_ColumnIntuu.TupleSelect(
                                                                                                        hv_l - 1)));
                        hv_Columndd = hv_Columndd.TupleConcat((hv_ColumnIntdd.TupleSelect(hv_l)) - (hv_ColumnIntdd.TupleSelect(
                                                                                                        hv_l - 1)));
                    }

                    //stop ()
                }


                HOperatorSet.TupleDeg(hv_AngleAll, out hv_DegAll);
                HOperatorSet.TupleMean(hv_Columnuu, out hv_Mean5);
                HOperatorSet.TupleMean(hv_Columndd, out hv_Mean8);
                //**过滤
                hv_Columnuum = new HTuple();
                hv_uum1      = 0;
                for (hv_uus = 0; (int)hv_uus <= (int)((new HTuple(hv_Columnuu.TupleLength())) - 1); hv_uus = (int)hv_uus + 1)
                {
                    if ((int)((new HTuple(hv_Columnuu.TupleLessEqual(hv_Mean5 * 1.1))).TupleAnd(new HTuple(hv_Columnuu.TupleGreaterEqual(
                                                                                                               hv_Mean5 * 0.9)))) != 0)
                    {
                        hv_Columnuum = hv_Columnuum.TupleConcat(hv_Columnuu.TupleSelect(hv_uus));
                        hv_uum1      = hv_uum1 + 1;
                    }
                }
                hv_Columnddm = new HTuple();
                hv_ddm       = 0;
                for (hv_dds = 0; (int)hv_dds <= (int)((new HTuple(hv_Columndd.TupleLength())) - 1); hv_dds = (int)hv_dds + 1)
                {
                    if ((int)((new HTuple(hv_Columndd.TupleLessEqual(hv_Mean8 * 1.1))).TupleAnd(new HTuple(hv_Columndd.TupleGreaterEqual(
                                                                                                               hv_Mean8 * 0.9)))) != 0)
                    {
                        hv_Columnddm = hv_Columnddm.TupleConcat(hv_Columndd.TupleSelect(hv_dds));
                        hv_ddm       = hv_ddm + 1;
                    }
                }
                hv_ColumnmArr = new HTuple();
                hv_ColumnmArr = hv_ColumnmArr.TupleConcat(hv_Columnuum);
                hv_ColumnmArr = hv_ColumnmArr.TupleConcat(hv_Columnddm);
                HOperatorSet.TupleMean(hv_ColumnmArr, out hv_Mean9);
                HOperatorSet.TupleMean(hv_DegAll, out hv_Mean10);
                HOperatorSet.TupleSort(hv_DegAll, out hv_Sorteda);
                hv_Ai        = hv_Sorteda[0];
                hv_Ax        = hv_Sorteda[(new HTuple(hv_Sorteda.TupleLength())) - 1];
                hv_pixeldist = 1;
                hv_L         = ((hv_Columnsdj.TupleSelect(hv_djsl - 1)) - (hv_Columnsdj.TupleSelect(0))) * hv_pixeldist;
                hv_D         = (hv_Mean4 - hv_Mean1) * hv_pixeldist;
                hv_Dmax      = ((hv_RowIntdd.TupleMax()) - (hv_RowIntuu.TupleMin())) * hv_pixeldist;
                hv_Dmin      = ((hv_RowIntdd.TupleMin()) - (hv_RowIntuu.TupleMax())) * hv_pixeldist;
                hv_d         = (hv_Mean3 - hv_Mean2) * hv_pixeldist;
                hv_dmax      = ((hv_RowIntdu.TupleMax()) - (hv_RowIntud.TupleMin())) * hv_pixeldist;
                hv_dmin      = ((hv_RowIntdu.TupleMin()) - (hv_RowIntud.TupleMax())) * hv_pixeldist;
                hv_LS        = hv_Mean9 * hv_pixeldist;
                //*区域旋转
                HOperatorSet.HomMat2dIdentity(out hv_HomMat2DIdentity1);
                HOperatorSet.HomMat2dRotate(hv_HomMat2DIdentity1, hv_Phi, hv_Height / 2, hv_Width / 2,
                                            out hv_HomMat2DRotate1);
                ho_RegionAffineTrans1.Dispose();
                HOperatorSet.AffineTransRegion(ho_Region3, out ho_RegionAffineTrans1, hv_HomMat2DRotate1,
                                               "nearest_neighbor");
                HOperatorSet.Union1(ho_RegionAffineTrans1, out RegionToDisp);

                HTuple hv_result = GetHv_result();
                hv_result = hv_result.TupleConcat("齿数");
                hv_result = hv_result.TupleConcat(hv_djsl.D);
                hv_result = hv_result.TupleConcat("螺纹长度");
                hv_result = hv_result.TupleConcat(hv_L.D * pixeldist);
                hv_result = hv_result.TupleConcat("螺纹大径平均值");
                hv_result = hv_result.TupleConcat(hv_D.D * pixeldist);
                hv_result = hv_result.TupleConcat("螺纹大径最小值");
                hv_result = hv_result.TupleConcat(hv_Dmin.D * pixeldist);
                hv_result = hv_result.TupleConcat("螺纹大径最大值");
                hv_result = hv_result.TupleConcat(hv_Dmax.D * pixeldist);
                hv_result = hv_result.TupleConcat("螺纹小径平均值");
                hv_result = hv_result.TupleConcat(hv_d.D * pixeldist);
                hv_result = hv_result.TupleConcat("螺纹小径最小值");
                hv_result = hv_result.TupleConcat(hv_dmin.D * pixeldist);
                hv_result = hv_result.TupleConcat("螺纹小径最大值");
                hv_result = hv_result.TupleConcat(hv_dmax.D * pixeldist);
                hv_result = hv_result.TupleConcat("牙距");
                hv_result = hv_result.TupleConcat(hv_LS.D * pixeldist);
                hv_result = hv_result.TupleConcat("平均牙倾角");
                hv_result = hv_result.TupleConcat(hv_Mean10.D);
                hv_result = hv_result.TupleConcat("最小牙倾角");
                hv_result = hv_result.TupleConcat(hv_Ai.D);
                hv_result = hv_result.TupleConcat("最大牙倾角");
                hv_result = hv_result.TupleConcat(hv_Ax.D);
                result    = hv_result.Clone();
                ho_Rectangle.Dispose();
                ho_ImageReduced.Dispose();
                ho_Region.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_Rectangle1.Dispose();
                ho_ImageRotate.Dispose();
                ho_Region1.Dispose();
                ho_RegionAffineTrans.Dispose();
                ho_Region2.Dispose();
                ho_RegionUnionu.Dispose();
                ho_RegionUniond.Dispose();
                ho_Contours.Dispose();
                ho_SelectedContours.Dispose();
                ho_SmoothedContours1.Dispose();
                ho_ClippedContoursu.Dispose();
                ho_ClippedContoursd.Dispose();
                ho_Rectangle2.Dispose();
                ho_ClippedContoursuObjectSelected.Dispose();
                ho_ClippedContoursdObjectSelected.Dispose();
                ho_Circle.Dispose();
                ho_Circle1.Dispose();
                ho_ConnectedRegions1.Dispose();
                ho_SelectedRegions1.Dispose();
                ho_SortedRegionssdj.Dispose();
                ho_Region3.Dispose();
                ho_ConnectedRegions2.Dispose();
                ho_SelectedRegions2.Dispose();
                ho_SortedRegionsxdj.Dispose();
                ho_RegionLines.Dispose();
                ho_RegionAffineTrans1.Dispose();
                algorithm.Region.Dispose();
            }
            catch
            {
                HTuple hv_result = GetHv_result();
                hv_result = hv_result.TupleConcat("齿数");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("螺纹长度");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("螺纹大径平均值");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("螺纹大径最小值");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("螺纹大径最大值");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("螺纹小径平均值");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("螺纹小径最小值");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("螺纹小径最大值");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("牙距");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("平均牙倾角");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("最小牙倾角");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("最大牙倾角");
                hv_result = hv_result.TupleConcat(0);
                result    = hv_result.Clone();
                ho_Rectangle.Dispose();
                ho_ImageReduced.Dispose();
                ho_Region.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_Rectangle1.Dispose();
                ho_ImageRotate.Dispose();
                ho_Region1.Dispose();
                ho_RegionAffineTrans.Dispose();
                ho_Region2.Dispose();
                ho_RegionUnionu.Dispose();
                ho_RegionUniond.Dispose();
                ho_Contours.Dispose();
                ho_SelectedContours.Dispose();
                ho_SmoothedContours1.Dispose();
                ho_ClippedContoursu.Dispose();
                ho_ClippedContoursd.Dispose();
                ho_Rectangle2.Dispose();
                ho_ClippedContoursuObjectSelected.Dispose();
                ho_ClippedContoursdObjectSelected.Dispose();
                ho_Circle.Dispose();
                ho_Circle1.Dispose();
                ho_ConnectedRegions1.Dispose();
                ho_SelectedRegions1.Dispose();
                ho_SortedRegionssdj.Dispose();
                ho_Region3.Dispose();
                ho_ConnectedRegions2.Dispose();
                ho_SelectedRegions2.Dispose();
                ho_SortedRegionsxdj.Dispose();
                ho_RegionLines.Dispose();
                ho_RegionAffineTrans1.Dispose();
                algorithm.Region.Dispose();
            }
            finally
            {
                ho_Rectangle.Dispose();
                ho_ImageReduced.Dispose();
                ho_Region.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_Rectangle1.Dispose();
                ho_ImageRotate.Dispose();
                ho_Region1.Dispose();
                ho_RegionAffineTrans.Dispose();
                ho_Region2.Dispose();
                ho_RegionUnionu.Dispose();
                ho_RegionUniond.Dispose();
                ho_Contours.Dispose();
                ho_SelectedContours.Dispose();
                ho_SmoothedContours1.Dispose();
                ho_ClippedContoursu.Dispose();
                ho_ClippedContoursd.Dispose();
                ho_Rectangle2.Dispose();
                ho_ClippedContoursuObjectSelected.Dispose();
                ho_ClippedContoursdObjectSelected.Dispose();
                ho_Circle.Dispose();
                ho_Circle1.Dispose();
                ho_ConnectedRegions1.Dispose();
                ho_SelectedRegions1.Dispose();
                ho_SortedRegionssdj.Dispose();
                ho_Region3.Dispose();
                ho_ConnectedRegions2.Dispose();
                ho_SelectedRegions2.Dispose();
                ho_SortedRegionsxdj.Dispose();
                ho_RegionLines.Dispose();
                ho_RegionAffineTrans1.Dispose();
                algorithm.Region.Dispose();
            }
        }
示例#16
0
        private void action()
        {
            // Stack for temporary objects
            HObject[] OTemp = new HObject[20];

            // Local iconic variables

            HObject ho_Circley1, ho_Rectanglet;
            HObject ho_Region1, ho_Region2, ho_RegionDifference, ho_ImageReduced;
            HObject ho_Region, ho_ConnectedRegions, ho_SelectedRegions;
            HObject ho_RegionDilation, ho_RegionUnion, ho_RegionErosion;
            HObject ho_Skeleton, ho_RegionAffineTrans = null, ho_RegionDifference1 = null;
            HObject ho_RegionDilation1 = null, ho_ConnectedRegions1 = null;
            HObject ho_ImageAffinTrans = null, ho_ImageReduced1 = null;
            HObject ho_ImageMean = null, ho_RegionDynThresh = null, ho_ConnectedRegions2 = null;
            HObject ho_SelectedRegions1 = null, ho_RegionDilation2 = null;
            HObject ho_RegionUnion1 = null, ho_Circle = null, ho_RegionDifference2 = null;
            HObject ho_RegionTrans = null, ho_Circle1 = null, ho_RegionDilation3 = null;
            HObject ho_Region3 = null, ho_RegionDifference3 = null, ho_RegionDifference4 = null;
            HObject ho_RegionErosion1 = null, ho_ConnectedRegions3 = null;
            HObject ho_SelectedRegions2 = null;

            // Local control variables

            HTuple hv_m = null, hv_n = null, hv_Phi = null, hv_Row = null;
            HTuple hv_Column = null, hv_Angle = null, hv_Score = null;
            HTuple hv_HomMat2D = new HTuple(), hv_Number = new HTuple();
            HTuple hv_HomMat2D1 = new HTuple(), hv_Row1 = new HTuple();
            HTuple hv_Column1 = new HTuple(), hv_Radius = new HTuple();
            HTuple hv_Row2 = new HTuple(), hv_Column2 = new HTuple();
            HTuple hv_Radius1 = new HTuple(), hv_Area = new HTuple();
            HTuple hv_Row3 = new HTuple(), hv_Column3 = new HTuple();
            HTuple hv_HomMat2D2 = new HTuple();

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Circley1);
            HOperatorSet.GenEmptyObj(out ho_Rectanglet);
            HOperatorSet.GenEmptyObj(out ho_Region1);
            HOperatorSet.GenEmptyObj(out ho_Region2);
            HOperatorSet.GenEmptyObj(out ho_RegionDifference);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced);
            HOperatorSet.GenEmptyObj(out ho_Region);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation);
            HOperatorSet.GenEmptyObj(out ho_RegionUnion);
            HOperatorSet.GenEmptyObj(out ho_RegionErosion);
            HOperatorSet.GenEmptyObj(out ho_Skeleton);
            HOperatorSet.GenEmptyObj(out ho_RegionAffineTrans);
            HOperatorSet.GenEmptyObj(out ho_RegionDifference1);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation1);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_ImageAffinTrans);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced1);
            HOperatorSet.GenEmptyObj(out ho_ImageMean);
            HOperatorSet.GenEmptyObj(out ho_RegionDynThresh);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions2);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation2);
            HOperatorSet.GenEmptyObj(out ho_RegionUnion1);
            HOperatorSet.GenEmptyObj(out ho_Circle);
            HOperatorSet.GenEmptyObj(out ho_RegionDifference2);
            HOperatorSet.GenEmptyObj(out ho_RegionTrans);
            HOperatorSet.GenEmptyObj(out ho_Circle1);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation3);
            HOperatorSet.GenEmptyObj(out ho_Region3);
            HOperatorSet.GenEmptyObj(out ho_RegionDifference3);
            HOperatorSet.GenEmptyObj(out ho_RegionDifference4);
            HOperatorSet.GenEmptyObj(out ho_RegionErosion1);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions3);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions2);
            HOperatorSet.Union1(algorithm.Region, out RegionToDisp);
            try
            {
                hv_m = 0;
                hv_n = 0;
                ho_Region1.Dispose();
                HOperatorSet.GenRegionPoints(out ho_Region1, DRowy, DColumny);
                ho_Region2.Dispose();
                HOperatorSet.GenRegionPoints(out ho_Region2, DRowy, DColumny);

                ho_Circley1.Dispose();
                HOperatorSet.GenCircle(out ho_Circley1, DRowy, DColumny, DPhiy);
                ho_Rectanglet.Dispose();
                HOperatorSet.GenRectangle2(out ho_Rectanglet, DRows, DColumns, DPhis, DLength1s, DLength2s);

                HOperatorSet.ReadShapeModel(PathHelper.currentProductPath + @"\nbquekoudj1.shm", out hv_ModelID);


                ho_RegionDifference.Dispose();
                HOperatorSet.Difference(ho_Circley1, ho_Rectanglet, out ho_RegionDifference);
                ho_ImageReduced.Dispose();
                HOperatorSet.ReduceDomain(Image, ho_Circley1, out ho_ImageReduced);
                ho_Region.Dispose();
                HOperatorSet.Threshold(ho_ImageReduced, out ho_Region, thv, 255);
                ho_ConnectedRegions.Dispose();
                HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);
                ho_SelectedRegions.Dispose();
                HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, ((new HTuple("width")).TupleConcat(
                                                                                           "height")).TupleConcat("area"), "and", (((new HTuple(this.kdz).TupleConcat(this.kdz))).TupleConcat(
                                                                                                                                       100)), ((new HTuple(this.DPhiy * 2 - 10)).TupleConcat(this.DPhiy * 2 - 10)).TupleConcat(mjsx));
                ho_RegionDilation.Dispose();
                HOperatorSet.DilationCircle(ho_SelectedRegions, out ho_RegionDilation, 5.5);
                ho_RegionUnion.Dispose();
                HOperatorSet.Union2(ho_RegionDilation, ho_RegionDilation, out ho_RegionUnion);
                ho_RegionErosion.Dispose();
                HOperatorSet.ErosionCircle(ho_RegionUnion, out ho_RegionErosion, 3.5);
                ho_Skeleton.Dispose();
                HOperatorSet.Skeleton(ho_RegionErosion, out ho_Skeleton);
                HOperatorSet.OrientationRegion(ho_Skeleton, out hv_Phi);
                HOperatorSet.FindShapeModel(Image, hv_ModelID, -3.14, 3.15, 0.3, 1, 0.5, "least_squares",
                                            0, 0.9, out hv_Row, out hv_Column, out hv_Angle, out hv_Score);
                if ((int)(new HTuple((new HTuple(hv_Score.TupleLength())).TupleEqual(1))) != 0)
                {
                    HOperatorSet.VectorAngleToRigid(hv_Row, hv_Column, hv_Phi - DPhi1m, DRow1s,
                                                    DColumn1s, 0, out hv_HomMat2D);
                    ho_RegionAffineTrans.Dispose();
                    HOperatorSet.AffineTransRegion(ho_Skeleton, out ho_RegionAffineTrans, hv_HomMat2D,
                                                   "nearest_neighbor");
                    ho_RegionDifference1.Dispose();
                    HOperatorSet.Difference(ho_RegionAffineTrans, ho_Rectanglet, out ho_RegionDifference1
                                            );
                    ho_RegionDilation1.Dispose();
                    HOperatorSet.DilationCircle(ho_RegionDifference1, out ho_RegionDilation1, 3.5);
                    ho_ConnectedRegions1.Dispose();
                    HOperatorSet.Connection(ho_RegionDilation1, out ho_ConnectedRegions1);
                    HOperatorSet.CountObj(ho_ConnectedRegions1, out hv_Number);
                    if ((int)(new HTuple(hv_Number.TupleEqual(1))) != 0)
                    {
                        ho_ImageAffinTrans.Dispose();
                        HOperatorSet.AffineTransImage(Image, out ho_ImageAffinTrans, hv_HomMat2D,
                                                      "constant", "false");
                    }
                    else if ((int)(new HTuple(hv_Number.TupleEqual(2))) != 0)
                    {
                        HOperatorSet.VectorAngleToRigid(hv_Row, hv_Column, (hv_Phi - DPhi1m) + 3.14,
                                                        DRow1s, DColumn1s, 0, out hv_HomMat2D1);
                        ho_ImageAffinTrans.Dispose();
                        HOperatorSet.AffineTransImage(Image, out ho_ImageAffinTrans, hv_HomMat2D1,
                                                      "constant", "false");
                    }
                    ho_ImageReduced1.Dispose();
                    HOperatorSet.ReduceDomain(ho_ImageAffinTrans, ho_RegionDifference, out ho_ImageReduced1
                                              );
                    ho_ImageMean.Dispose();
                    HOperatorSet.MeanImage(ho_ImageReduced1, out ho_ImageMean, this.yd, this.yd);
                    ho_RegionDynThresh.Dispose();
                    HOperatorSet.DynThreshold(ho_ImageReduced1, ho_ImageMean, out ho_RegionDynThresh,
                                              this.bjz, "dark");
                    ho_ConnectedRegions2.Dispose();
                    HOperatorSet.Connection(ho_RegionDynThresh, out ho_ConnectedRegions2);
                    ho_SelectedRegions1.Dispose();
                    HOperatorSet.SelectShape(ho_ConnectedRegions2, out ho_SelectedRegions1, (new HTuple("width")).TupleConcat(
                                                 "height"), "and", new HTuple(this.kdz).TupleConcat(new HTuple(this.kdz)), (new HTuple(999999999)).TupleConcat(
                                                 9999999));
                    ho_RegionDilation2.Dispose();
                    HOperatorSet.DilationCircle(ho_SelectedRegions1, out ho_RegionDilation2, 1.5);
                    ho_RegionUnion1.Dispose();
                    HOperatorSet.Union1(ho_RegionDilation2, out ho_RegionUnion1);
                    HOperatorSet.SmallestCircle(ho_RegionUnion1, out hv_Row1, out hv_Column1, out hv_Radius);
                    ho_Circle.Dispose();
                    HOperatorSet.GenCircle(out ho_Circle, hv_Row1, hv_Column1, hv_Radius);
                    ho_RegionDifference2.Dispose();
                    HOperatorSet.Difference(ho_Circle, ho_RegionUnion1, out ho_RegionDifference2
                                            );
                    ho_RegionTrans.Dispose();
                    HOperatorSet.ShapeTrans(ho_RegionDifference2, out ho_RegionTrans, "inner_circle");
                    HOperatorSet.SmallestCircle(ho_RegionTrans, out hv_Row2, out hv_Column2, out hv_Radius1);
                    ho_Circle1.Dispose();
                    HOperatorSet.GenCircle(out ho_Circle1, hv_Row2, hv_Column2, hv_Radius1);
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.Union2(ho_Region2, ho_Circle1, out ExpTmpOutVar_0);
                        ho_Region2.Dispose();
                        ho_Region2 = ExpTmpOutVar_0;
                    }
                    ho_RegionDilation3.Dispose();
                    HOperatorSet.DilationCircle(ho_RegionTrans, out ho_RegionDilation3, 10.5);
                    ho_Region3.Dispose();
                    HOperatorSet.Threshold(ho_ImageReduced1, out ho_Region3, 0, this.cd);
                    ho_RegionDifference3.Dispose();
                    HOperatorSet.Difference(ho_Region3, ho_RegionDilation3, out ho_RegionDifference3
                                            );
                    ho_RegionDifference4.Dispose();
                    HOperatorSet.Difference(ho_RegionDifference3, ho_RegionDilation2, out ho_RegionDifference4
                                            );
                    ho_RegionErosion1.Dispose();
                    HOperatorSet.ErosionCircle(ho_RegionDifference4, out ho_RegionErosion1, this.pzz);
                    ho_ConnectedRegions3.Dispose();
                    HOperatorSet.Connection(ho_RegionErosion1, out ho_ConnectedRegions3);
                    ho_SelectedRegions2.Dispose();
                    HOperatorSet.SelectShape(ho_ConnectedRegions3, out ho_SelectedRegions2, "area",
                                             "and", this.mj, 99999999);
                    HOperatorSet.AreaCenter(ho_SelectedRegions2, out hv_Area, out hv_Row3, out hv_Column3);
                    if ((int)(new HTuple((new HTuple(hv_Area.TupleLength())).TupleGreater(0))) != 0)
                    {
                        {
                            HObject ExpTmpOutVar_0;
                            HOperatorSet.Union2(ho_Region2, ho_SelectedRegions2, out ExpTmpOutVar_0);
                            ho_Region2.Dispose();
                            ho_Region2 = ExpTmpOutVar_0;
                        }
                        hv_m = hv_Area.TupleSum();
                        hv_n = hv_Area.TupleMax();
                    }
                    else
                    {
                        hv_m = 0;
                        hv_n = 0;
                    }
                    if ((int)(new HTuple(hv_Number.TupleEqual(1))) != 0)
                    {
                        HOperatorSet.VectorAngleToRigid(DRow1s, DColumn1s, 0, hv_Row, hv_Column,
                                                        hv_Phi - DPhi1m, out hv_HomMat2D2);
                    }
                    else if ((int)(new HTuple(hv_Number.TupleEqual(2))) != 0)
                    {
                        HOperatorSet.VectorAngleToRigid(DRow1s, DColumn1s, 0, hv_Row, hv_Column,
                                                        (hv_Phi - DPhi1m) + 3.14, out hv_HomMat2D2);
                    }
                    ho_RegionAffineTrans.Dispose();
                    HOperatorSet.AffineTransRegion(ho_Region2, out ho_RegionAffineTrans, hv_HomMat2D2,
                                                   "nearest_neighbor");
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.Union2(ho_Region1, ho_RegionAffineTrans, out ExpTmpOutVar_0);
                        ho_Region1.Dispose();
                        ho_Region1 = ExpTmpOutVar_0;
                    }
                }

                HOperatorSet.ClearShapeModel(hv_ModelID);
                HOperatorSet.Union1(ho_Region1, out RegionToDisp);

                HTuple hv_result = GetHv_result();
                hv_result = hv_result.TupleConcat("缺陷总面积");
                hv_result = hv_result.TupleConcat(hv_m.D);
                hv_result = hv_result.TupleConcat("最大面积");
                hv_result = hv_result.TupleConcat(hv_n.D);
                hv_result = hv_result.TupleConcat("内径");
                hv_result = hv_result.TupleConcat(hv_Radius1.D * 2 * pixeldist);
                result    = hv_result.Clone();
                ho_Circley1.Dispose();
                ho_Rectanglet.Dispose();
                ho_Region1.Dispose();
                ho_Region2.Dispose();
                ho_RegionDifference.Dispose();
                ho_ImageReduced.Dispose();
                ho_Region.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_RegionDilation.Dispose();
                ho_RegionUnion.Dispose();
                ho_RegionErosion.Dispose();
                ho_Skeleton.Dispose();
                ho_RegionAffineTrans.Dispose();
                ho_RegionDifference1.Dispose();
                ho_RegionDilation1.Dispose();
                ho_ConnectedRegions1.Dispose();
                ho_ImageAffinTrans.Dispose();
                ho_ImageReduced1.Dispose();
                ho_ImageMean.Dispose();
                ho_RegionDynThresh.Dispose();
                ho_ConnectedRegions2.Dispose();
                ho_SelectedRegions1.Dispose();
                ho_RegionDilation2.Dispose();
                ho_RegionUnion1.Dispose();
                ho_Circle.Dispose();
                ho_RegionDifference2.Dispose();
                ho_RegionTrans.Dispose();
                ho_Circle1.Dispose();
                ho_RegionDilation3.Dispose();
                ho_Region3.Dispose();
                ho_RegionDifference3.Dispose();
                ho_RegionDifference4.Dispose();
                ho_RegionErosion1.Dispose();
                ho_ConnectedRegions3.Dispose();
                ho_SelectedRegions2.Dispose();
                algorithm.Region.Dispose();
            }
            catch
            {
                HTuple hv_result = GetHv_result();
                hv_result = hv_result.TupleConcat("缺陷总面积");
                hv_result = hv_result.TupleConcat(999999);
                hv_result = hv_result.TupleConcat("最大面积");
                hv_result = hv_result.TupleConcat(999999);
                hv_result = hv_result.TupleConcat("内径");
                hv_result = hv_result.TupleConcat(0);
                result    = hv_result.Clone();

                ho_Circley1.Dispose();
                ho_Rectanglet.Dispose();
                ho_Region1.Dispose();
                ho_Region2.Dispose();
                ho_RegionDifference.Dispose();
                ho_ImageReduced.Dispose();
                ho_Region.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_RegionDilation.Dispose();
                ho_RegionUnion.Dispose();
                ho_RegionErosion.Dispose();
                ho_Skeleton.Dispose();
                ho_RegionAffineTrans.Dispose();
                ho_RegionDifference1.Dispose();
                ho_RegionDilation1.Dispose();
                ho_ConnectedRegions1.Dispose();
                ho_ImageAffinTrans.Dispose();
                ho_ImageReduced1.Dispose();
                ho_ImageMean.Dispose();
                ho_RegionDynThresh.Dispose();
                ho_ConnectedRegions2.Dispose();
                ho_SelectedRegions1.Dispose();
                ho_RegionDilation2.Dispose();
                ho_RegionUnion1.Dispose();
                ho_Circle.Dispose();
                ho_RegionDifference2.Dispose();
                ho_RegionTrans.Dispose();
                ho_Circle1.Dispose();
                ho_RegionDilation3.Dispose();
                ho_Region3.Dispose();
                ho_RegionDifference3.Dispose();
                ho_RegionDifference4.Dispose();
                ho_RegionErosion1.Dispose();
                ho_ConnectedRegions3.Dispose();
                ho_SelectedRegions2.Dispose();
                algorithm.Region.Dispose();
            }
            finally
            {
                ho_Circley1.Dispose();
                ho_Rectanglet.Dispose();
                ho_Region1.Dispose();
                ho_Region2.Dispose();
                ho_RegionDifference.Dispose();
                ho_ImageReduced.Dispose();
                ho_Region.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_RegionDilation.Dispose();
                ho_RegionUnion.Dispose();
                ho_RegionErosion.Dispose();
                ho_Skeleton.Dispose();
                ho_RegionAffineTrans.Dispose();
                ho_RegionDifference1.Dispose();
                ho_RegionDilation1.Dispose();
                ho_ConnectedRegions1.Dispose();
                ho_ImageAffinTrans.Dispose();
                ho_ImageReduced1.Dispose();
                ho_ImageMean.Dispose();
                ho_RegionDynThresh.Dispose();
                ho_ConnectedRegions2.Dispose();
                ho_SelectedRegions1.Dispose();
                ho_RegionDilation2.Dispose();
                ho_RegionUnion1.Dispose();
                ho_Circle.Dispose();
                ho_RegionDifference2.Dispose();
                ho_RegionTrans.Dispose();
                ho_Circle1.Dispose();
                ho_RegionDilation3.Dispose();
                ho_Region3.Dispose();
                ho_RegionDifference3.Dispose();
                ho_RegionDifference4.Dispose();
                ho_RegionErosion1.Dispose();
                ho_ConnectedRegions3.Dispose();
                ho_SelectedRegions2.Dispose();
                algorithm.Region.Dispose();
            }
        }
示例#17
0
        public static void tansRoiData(List <ViewWindow.Model.ROI> modelRegion, List <ViewWindow.Model.ROI> regions, Model.MatchingResual matchResual, out List <ViewWindow.Model.RoiData> roiParameterTrans, out HObject roiTrans, out HObject arrow)
        {
            roiParameterTrans = new List <ViewWindow.Model.RoiData>();

            List <ViewWindow.Model.RoiData> m_RoiData;

            HObject ho_ModelRoiUnion;

            HTuple hv_ModelArea = new HTuple(), hv_ModelRow = new HTuple(), hv_ModelCol = new HTuple();
            HTuple hv_homMat2D = null;

            HOperatorSet.GenEmptyObj(out ho_ModelRoiUnion);
            HOperatorSet.GenEmptyObj(out roiTrans);
            HOperatorSet.GenEmptyObj(out arrow);

            try
            {
                m_RoiData = new List <ViewWindow.Model.RoiData>();
                creatModelRoi(modelRegion, out m_RoiData, out ho_ModelRoiUnion);

                HOperatorSet.AreaCenter(ho_ModelRoiUnion, out hv_ModelArea, out hv_ModelRow, out hv_ModelCol);

                ho_ModelRoiUnion.Dispose();

                HOperatorSet.VectorAngleToRigid(hv_ModelRow, hv_ModelCol, 0,
                                                new HTuple(matchResual.Row), new HTuple(matchResual.Column), new HTuple(matchResual.Angle), out hv_homMat2D);

                m_RoiData = new List <ViewWindow.Model.RoiData>();
                creatModelRoi(regions, out m_RoiData, out ho_ModelRoiUnion);
                ho_ModelRoiUnion.Dispose();

                foreach (var region in m_RoiData)
                {
                    HTuple hv_Rows = null, hv_Cols = null;
                    //HTuple hv_RowsMove = null, hv_ColsMove = null;
                    HTuple hv_RowTrans = null, hv_ColTrans = null;

                    HObject ho_Rectangle, m_modelRoiTrans;
                    HTuple  hv_row = null, hv_col = null, hv_phi = null, hv_length1 = null, hv_length2 = null;

                    switch (region.Name)
                    {
                    case "Rectangle1":
                        HOperatorSet.GenEmptyObj(out ho_Rectangle);
                        HOperatorSet.GenEmptyObj(out m_modelRoiTrans);

                        ho_Rectangle.Dispose();
                        HOperatorSet.GenRectangle1(out ho_Rectangle, region.Rectangle1.Row1, region.Rectangle1.Column1, region.Rectangle1.Row2, region.Rectangle1.Column2);

                        m_modelRoiTrans.Dispose();
                        HOperatorSet.AffineTransRegion(ho_Rectangle, out m_modelRoiTrans, hv_homMat2D, "nearest_neighbor");

                        HOperatorSet.SmallestRectangle2(m_modelRoiTrans, out hv_row, out hv_col, out hv_phi, out hv_length1, out hv_length2);

                        roiParameterTrans.Add(new ViewWindow.Model.RoiData(region.ID,
                                                                           new ViewWindow.Config.Rectangle2(hv_row.D, hv_col.D, hv_phi.D, hv_length1.D, hv_length2.D)));

                        m_modelRoiTrans.Dispose();

                        break;

                    case "Rectangle2":

                        HOperatorSet.GenEmptyObj(out ho_Rectangle);
                        HOperatorSet.GenEmptyObj(out m_modelRoiTrans);

                        ho_Rectangle.Dispose();
                        HOperatorSet.GenRectangle2(out ho_Rectangle,
                                                   region.Rectangle2.Row, region.Rectangle2.Column, -region.Rectangle2.Phi, region.Rectangle2.Lenth1, region.Rectangle2.Lenth2);

                        m_modelRoiTrans.Dispose();
                        HOperatorSet.AffineTransRegion(ho_Rectangle, out m_modelRoiTrans, hv_homMat2D, "nearest_neighbor");

                        HOperatorSet.SmallestRectangle2(m_modelRoiTrans, out hv_row, out hv_col, out hv_phi, out hv_length1, out hv_length2);

                        //Console.WriteLine("phi_1 = {0}", hv_phi.D);
                        //Console.WriteLine("phi_2 = {0} {1}", matchResual.Angle, region.Rectangle2.Phi);
                        //Console.WriteLine("phi_3 = {0}", matchResual.Angle - region.Rectangle2.Phi);

                        //roiParameterTrans.Add(new ViewWindow.Model.RoiData(region.ID,
                        //    new ViewWindow.Config.Rectangle2(hv_row.D, hv_col.D, matchResual.Angle - region.Rectangle2.Phi, hv_length1.D, hv_length2.D)));

                        double m_phi = 0.0;

                        //if (hv_phi.D < 0)
                        //{
                        //    m_phi = -hv_phi.D;
                        //    roiParameterTrans.Add(new ViewWindow.Model.RoiData(region.ID,
                        //       new ViewWindow.Config.Rectangle2(hv_row.D, hv_col.D, m_phi, hv_length1.D, hv_length2.D)));

                        //}
                        //else
                        //{
                        //    HTuple hv_Rad = null;
                        //    HOperatorSet.TupleRad(180, out hv_Rad);
                        //    m_phi = -hv_phi.D + hv_Rad.D;

                        //    roiParameterTrans.Add(new ViewWindow.Model.RoiData(region.ID,
                        //       new ViewWindow.Config.Rectangle2(hv_row.D, hv_col.D, m_phi, hv_length1.D, hv_length2.D)));
                        //}

                        Console.WriteLine("phi_1 = {0} {1}", matchResual.Angle, region.Rectangle2.Phi);

                        //double m_phi1 = 0.0;
                        if (matchResual.Angle >= 0)
                        {
                            m_phi = -(-matchResual.Angle - region.Rectangle2.Phi);

                            //Console.WriteLine("phi_2 = {0}", -matchResual.Angle - region.Rectangle2.Phi);
                        }
                        else
                        {
                            m_phi = -matchResual.Angle + region.Rectangle2.Phi;

                            //Console.WriteLine("phi_2 = {0}", -matchResual.Angle + region.Rectangle2.Phi);
                        }

                        roiParameterTrans.Add(new ViewWindow.Model.RoiData(region.ID,
                                                                           new ViewWindow.Config.Rectangle2(hv_row.D, hv_col.D, m_phi, hv_length1.D, hv_length2.D)));
                        //Console.WriteLine("phi_3 = {0}", m_phi);

                        m_modelRoiTrans.Dispose();
                        break;

                    case "Circle":
                        hv_Rows = new HTuple();
                        hv_Rows = hv_Rows.TupleConcat(region.Circle.Row);
                        hv_Cols = new HTuple();
                        hv_Cols = hv_Cols.TupleConcat(region.Circle.Column);
                        HOperatorSet.AffineTransPixel(hv_homMat2D, hv_Rows, hv_Cols, out hv_RowTrans, out hv_ColTrans);


                        roiParameterTrans.Add(new ViewWindow.Model.RoiData(region.ID,
                                                                           new ViewWindow.Config.Circle(hv_RowTrans[0].D, hv_ColTrans[0].D, region.Circle.Radius)));
                        break;

                    case "Line":
                        hv_Rows = new HTuple();
                        hv_Rows = hv_Rows.TupleConcat(region.Line.RowBegin);
                        hv_Rows = hv_Rows.TupleConcat(region.Line.RowEnd);

                        hv_Cols = new HTuple();
                        hv_Cols = hv_Cols.TupleConcat(region.Line.ColumnBegin);
                        hv_Cols = hv_Cols.TupleConcat(region.Line.ColumnEnd);

                        HOperatorSet.AffineTransPixel(hv_homMat2D, hv_Rows, hv_Cols, out hv_RowTrans, out hv_ColTrans);


                        roiParameterTrans.Add(new ViewWindow.Model.RoiData(region.ID,
                                                                           new ViewWindow.Config.Line(hv_RowTrans[0].D, hv_ColTrans[0].D, hv_RowTrans[1].D, hv_ColTrans[1].D)));
                        break;
                    }

                    //{
                    //    HObject ExpTmpOutVar_0;
                    //    HOperatorSet.ConcatObj(ho_ROIs, ho_modelROI, out ExpTmpOutVar_0);
                    //    ho_ROIs.Dispose();
                    //    ho_ROIs = ExpTmpOutVar_0;
                    //}
                }

                PublicMethod.genContourXld(roiParameterTrans, out roiTrans, out arrow);


                //regionTrans.Add()
            }
            catch (Exception ex)
            {
                //regionTrans = null;
                ho_ModelRoiUnion.Dispose();
            }
        }
示例#18
0
        public static void tansRegions(List <ViewWindow.Model.ROI> regions, Model.MatchingResual matchResual, out HObject modelRoiTrans)
        {
            //regionTrans = new List<ViewWindow.Model.ROI>();
            //roiParameterTrans = new List<ViewWindow.Model.RoiData>();

            List <ViewWindow.Model.RoiData> m_RoiData;

            HObject ho_ModelRoiUnion;
            //HObject ho_ROIs, ho_modelROI;

            HTuple hv_ModelArea = new HTuple(), hv_ModelRow = new HTuple(), hv_ModelCol = new HTuple();
            HTuple hv_homMat2D = null;

            //HOperatorSet.GenEmptyRegion(out ho_modelROI);
            HOperatorSet.GenEmptyRegion(out modelRoiTrans);
            HOperatorSet.GenEmptyObj(out ho_ModelRoiUnion);

            try
            {
                //

                //ho_modelROI.Dispose();

                m_RoiData = new List <ViewWindow.Model.RoiData>();
                creatModelRoi(regions, out m_RoiData, out ho_ModelRoiUnion);
                //ho_modelROI.Dispose();
                //ho_ModelRoiUnion.Dispose();
                //HOperatorSet.Union1(ho_ROIs, out ho_ModelRoiUnion);
                HOperatorSet.AreaCenter(ho_ModelRoiUnion, out hv_ModelArea, out hv_ModelRow, out hv_ModelCol);

                //HOperatorSet.WriteRegion(ho_ModelRoiUnion, "d:\\ho_ModelRoiUnion.reg");

                //Console.WriteLine("aaaaaaa {0}, {1}", hv_ModelRow.D, hv_ModelCol.D);


                //for (int i = 0; i < regions.Count; i++)
                //{
                //    m_RoiData.Add(new ViewWindow.Model.RoiData(i, regions[i]));
                //}

                //HOperatorSet.VectorAngleToRigid(hv_ModelRow, hv_ModelCol, 0,
                //    new HTuple(matchResual.Row), new HTuple(matchResual.Column), new HTuple(matchResual.Angle), out hv_homMat2D);

                HOperatorSet.VectorAngleToRigid(hv_ModelRow, hv_ModelCol, 0,
                                                new HTuple(matchResual.Row), new HTuple(matchResual.Column), new HTuple(matchResual.Angle), out hv_homMat2D);

                modelRoiTrans.Dispose();
                HOperatorSet.AffineTransRegion(ho_ModelRoiUnion, out modelRoiTrans, hv_homMat2D, "nearest_neighbor");

                ho_ModelRoiUnion.Dispose();
                //List<ViewWindow.Model.RoiData> m_ROIParameter = new List<ViewWindow.Model.RoiData>();

                //foreach (var region in m_RoiData)
                //{
                //    HTuple hv_Rows = null, hv_Cols = null;
                //    //HTuple hv_RowsMove = null, hv_ColsMove = null;
                //    HTuple hv_RowTrans = null, hv_ColTrans = null;

                //    switch (region.Name)
                //    {
                //        case "Rectangle1":

                //            hv_Rows = new HTuple();
                //            hv_Rows = hv_Rows.TupleConcat(region.Rectangle1.Row1);
                //            hv_Rows = hv_Rows.TupleConcat(region.Rectangle1.Row2);

                //            hv_Cols = new HTuple();
                //            hv_Cols = hv_Cols.TupleConcat(region.Rectangle1.Column1);
                //            hv_Cols = hv_Cols.TupleConcat(region.Rectangle1.Column2);

                //            HObject ho_Rectangle1;
                //            HOperatorSet.GenEmptyObj(out ho_Rectangle1);
                //            ho_Rectangle1.Dispose();

                //            HOperatorSet.GenRectangle1(out ho_Rectangle1, region.Rectangle1.Row1, region.Rectangle1.Column1, region.Rectangle1.Row2, region.Rectangle1.Column2);

                //            //HOperatorSet.AffineTransPixel(hv_homMat2D, hv_Rows, hv_Cols, out hv_RowTrans, out hv_ColTrans);


                //            roiParameterTrans.Add(new ViewWindow.Model.RoiData(region.ID,
                //                new ViewWindow.Config.Rectangle1(hv_RowTrans[0].D, hv_ColTrans[0].D, hv_RowTrans[1].D, hv_ColTrans[1].D)));

                //            break;
                //        case "Rectangle2":
                //            hv_Rows = new HTuple();
                //            hv_Rows = hv_Rows.TupleConcat(region.Rectangle2.Row);
                //            hv_Cols = new HTuple();
                //            hv_Cols = hv_Cols.TupleConcat(region.Rectangle2.Column);

                //            HOperatorSet.AffineTransPixel(hv_homMat2D, hv_Rows, hv_Cols, out hv_RowTrans, out hv_ColTrans);

                //            roiParameterTrans.Add(new ViewWindow.Model.RoiData(region.ID,
                //                new ViewWindow.Config.Rectangle2(hv_RowTrans[0].D, hv_ColTrans[0].D, region.Rectangle2.Phi + matchResual.Angle,
                //                     region.Rectangle2.Lenth1, region.Rectangle2.Lenth2)));

                //            break;
                //        case "Circle":
                //            hv_Rows = new HTuple();
                //            hv_Rows = hv_Rows.TupleConcat(region.Circle.Row);
                //            hv_Cols = new HTuple();
                //            hv_Cols = hv_Cols.TupleConcat(region.Circle.Column);
                //            HOperatorSet.AffineTransPixel(hv_homMat2D, hv_Rows, hv_Cols, out hv_RowTrans, out hv_ColTrans);


                //            roiParameterTrans.Add(new ViewWindow.Model.RoiData(region.ID,
                //                new ViewWindow.Config.Circle(hv_RowTrans[0].D, hv_ColTrans[0].D, region.Circle.Radius)));
                //            break;
                //    }

                //}

                //regionTrans.Add()
            }
            catch (Exception ex)
            {
                //regionTrans = null;
                ho_ModelRoiUnion.Dispose();
            }
        }
示例#19
0
        public static bool CheckFunction(HWindowTool.HWindowTool hWindow, HObject ho_Image, HObject ho_CheckRegion, ModelConfig modelConfig, double minThreshold, double maxThreshold, double minScore, double minArea)
        {
            bool b = true;

            // Local iconic variables

            HObject ho_ImageReduced = null;
            HObject ho_ModelContours;
            HObject ho_ContoursAffineTrans, ho_RegionAffineTrans = null;
            HObject ho_Region = null, ho_ConnectedRegions = null, ho_RegionOpening = null;
            HObject ho_RegionUnion = null;

            // Local control variables

            HTuple hv_Width = new HTuple(), hv_Height = new HTuple();
            HTuple hv_WindowHandle = new HTuple();
            HTuple hv_Row1 = new HTuple(), hv_Column1 = new HTuple();
            HTuple hv_Angle1 = new HTuple(), hv_Score = new HTuple();
            HTuple hv_HomMat2D = new HTuple(), hv_ImageFiles = new HTuple();
            HTuple hv_Index = new HTuple(), hv_Row = new HTuple();
            HTuple hv_Column = new HTuple(), hv_Angle = new HTuple();
            HTuple hv_Scale = new HTuple(), hv_HomMat2D1 = new HTuple();
            HTuple hv_Area = new HTuple(), hv_Row2 = new HTuple();
            HTuple hv_Column2 = new HTuple();

            // Initialize local and output iconic variables

            HOperatorSet.GenEmptyObj(out ho_ImageReduced);


            HOperatorSet.GenEmptyObj(out ho_ModelContours);
            HOperatorSet.GenEmptyObj(out ho_ContoursAffineTrans);
            HOperatorSet.GenEmptyObj(out ho_RegionAffineTrans);
            HOperatorSet.GenEmptyObj(out ho_Region);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_RegionOpening);
            HOperatorSet.GenEmptyObj(out ho_RegionUnion);
            try
            {
                hv_Width.Dispose(); hv_Height.Dispose();
                HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
                // 获取模型轮廓
                ho_ModelContours.Dispose();
                HOperatorSet.GetShapeModelContours(out ho_ModelContours, modelConfig.ModelID, 1);
                using (HDevDisposeHelper dh = new HDevDisposeHelper())
                {
                    hv_Row.Dispose(); hv_Column.Dispose(); hv_Angle.Dispose(); hv_Scale.Dispose(); hv_Score.Dispose();
                    HOperatorSet.FindScaledShapeModel(ho_Image, modelConfig.ModelID, (new HTuple(0)).TupleRad()
                                                      , (new HTuple(360)).TupleRad(), 0.6, 1.5, 0.2, 1, 0.5, "least_squares",
                                                      0, 0.9, out hv_Row, out hv_Column, out hv_Angle, out hv_Scale, out hv_Score);
                }
                if ((int)(new HTuple((new HTuple(hv_Score.TupleLength())).TupleGreater(0))) != 0)
                {
                    if ((int)(new HTuple(hv_Score.TupleGreater(minScore))) != 0)
                    {
                        hWindow.ViewController.AddMessage("Score:" + hv_Score.ToString(), Colors.Lime, 10, 10, AnchorType.LeftTop, CoordSystemType.window, false);
                        hv_HomMat2D.Dispose();
                        HOperatorSet.VectorAngleToRigid(0, 0, 0, hv_Row, hv_Column, hv_Angle, out hv_HomMat2D);
                        ho_ContoursAffineTrans.Dispose();
                        HOperatorSet.AffineTransContourXld(ho_ModelContours, out ho_ContoursAffineTrans,
                                                           hv_HomMat2D);
                        hv_HomMat2D1.Dispose();
                        HOperatorSet.VectorAngleToRigid(modelConfig.ModelRow, modelConfig.ModelColumn, 0, hv_Row,
                                                        hv_Column, hv_Angle, out hv_HomMat2D1);
                        ho_RegionAffineTrans.Dispose();
                        HOperatorSet.AffineTransRegion(ho_CheckRegion, out ho_RegionAffineTrans,
                                                       hv_HomMat2D1, "nearest_neighbor");

                        ho_ImageReduced.Dispose();
                        HOperatorSet.ReduceDomain(ho_Image, ho_RegionAffineTrans, out ho_ImageReduced
                                                  );
                        ho_Region.Dispose();
                        HOperatorSet.Threshold(ho_ImageReduced, out ho_Region, minThreshold, maxThreshold);
                        ho_ConnectedRegions.Dispose();
                        HOperatorSet.Connection(ho_Region, out ho_ConnectedRegions);
                        ho_RegionOpening.Dispose();
                        HOperatorSet.OpeningCircle(ho_ConnectedRegions, out ho_RegionOpening, 3.5);
                        ho_RegionUnion.Dispose();
                        HOperatorSet.Union1(ho_RegionOpening, out ho_RegionUnion);
                        hv_Area.Dispose(); hv_Row2.Dispose(); hv_Column2.Dispose();
                        HOperatorSet.AreaCenter(ho_RegionUnion, out hv_Area, out hv_Row2, out hv_Column2);

                        if ((int)(new HTuple(hv_Area.TupleLess(minArea))) != 0)
                        {
                            hWindow.ViewController.AddMessage("NG", Colors.Red, 10, 35, AnchorType.LeftTop, CoordSystemType.window, false);
                            //  hWindow.repaint(); //刷新显示
                            hWindow.DisplayHObject(ho_RegionAffineTrans, Colors.Red, DrawModelType.margin);
                            hWindow.DisplayHObject(ho_ContoursAffineTrans, Colors.Red, DrawModelType.margin);
                            b = false;
                        }
                        else
                        {
                            hWindow.ViewController.AddMessage("OK:" + hv_Area.ToString(), Colors.Lime, 10, 35, AnchorType.LeftTop, CoordSystemType.window, false);
                            //hWindow.repaint(); //刷新显示
                            hWindow.DisplayHObject(ho_RegionAffineTrans, Colors.Lime, DrawModelType.margin);
                            hWindow.DisplayHObject(ho_ContoursAffineTrans, Colors.Lime, DrawModelType.margin);
                        }
                    }
                    else
                    {
                        hWindow.ViewController.AddMessage("Low Score:" + hv_Score.ToString(), Colors.Red, 10, 10, AnchorType.LeftTop, CoordSystemType.window, false);
                        // hWindow.repaint(); //刷新显示
                        b = false;
                    }
                }
                else
                {
                    hWindow.ViewController.AddMessage("Not Find Model", Colors.Red, 10, 10, AnchorType.LeftTop, CoordSystemType.window, false);
                    // hWindow.repaint(); //刷新显示
                    b = false;
                }
            }
            catch (HalconException)
            {
                return(false);
            }
            finally
            {
                hWindow.Repaint(); //刷新显示
                ho_ImageReduced.Dispose();

                ho_ModelContours.Dispose();
                ho_ContoursAffineTrans.Dispose();
                ho_RegionAffineTrans.Dispose();
                ho_Region.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_RegionOpening.Dispose();
                ho_RegionUnion.Dispose();

                hv_Width.Dispose();
                hv_Height.Dispose();
                hv_WindowHandle.Dispose();

                hv_Row1.Dispose();
                hv_Column1.Dispose();
                hv_Angle1.Dispose();
                hv_Score.Dispose();
                hv_HomMat2D.Dispose();
                hv_ImageFiles.Dispose();
                hv_Index.Dispose();
                hv_Row.Dispose();
                hv_Column.Dispose();
                hv_Angle.Dispose();
                hv_Scale.Dispose();
                hv_HomMat2D1.Dispose();
                hv_Area.Dispose();
                hv_Row2.Dispose();
                hv_Column2.Dispose();
            }
            return(b);
        }
示例#20
0
    public void region_ocr_num_svm(HObject ho_Image, HObject ho_ROI_OCR_01_0, HTuple hv_TextModel,
                                   HTuple hv_OcrHandle, out HTuple hv_SymbolNames_OCR_01_0, out HTuple hv_Ocr_Split)
    {
        // Local iconic variables

        HObject ho_TmpObj_Mono, ho_TmpObj_MonoReduced_OCR_01_0;
        HObject ho_TmpObj_Domain, ho_TmpObj_DomainExpanded, ho_TmpObj_DomainTransformedRaw;
        HObject ho_TmpObj_DomainTransformed, ho_TmpObj_ImageTransformed;
        HObject ho_TmpObj_ImageTransformedExpanded, ho_TmpObj_ImageTransformedReduced;
        HObject ho_Symbols_OCR_01_0;

        // Local control variables

        HTuple hv_TmpCtrl_MatrixIdentity = new HTuple();
        HTuple hv_TmpCtrl_ClipRegion = new HTuple(), hv_TmpCtrl_Row1 = new HTuple();
        HTuple hv_TmpCtrl_Col1 = new HTuple(), hv_TmpCtrl_Row2 = new HTuple();
        HTuple hv_TmpCtrl_Col2 = new HTuple(), hv_TmpCtrl_MatrixTranslation = new HTuple();
        HTuple hv_TmpCtrl_MatrixComposite = new HTuple(), hv_TmpCtrl_ResultHandle_OCR_01_0 = new HTuple();
        HTuple hv_OcrHandle_COPY_INP_TMP = new HTuple(hv_OcrHandle);
        HTuple hv_TextModel_COPY_INP_TMP = new HTuple(hv_TextModel);

        // Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(out ho_TmpObj_Mono);
        HOperatorSet.GenEmptyObj(out ho_TmpObj_MonoReduced_OCR_01_0);
        HOperatorSet.GenEmptyObj(out ho_TmpObj_Domain);
        HOperatorSet.GenEmptyObj(out ho_TmpObj_DomainExpanded);
        HOperatorSet.GenEmptyObj(out ho_TmpObj_DomainTransformedRaw);
        HOperatorSet.GenEmptyObj(out ho_TmpObj_DomainTransformed);
        HOperatorSet.GenEmptyObj(out ho_TmpObj_ImageTransformed);
        HOperatorSet.GenEmptyObj(out ho_TmpObj_ImageTransformedExpanded);
        HOperatorSet.GenEmptyObj(out ho_TmpObj_ImageTransformedReduced);
        HOperatorSet.GenEmptyObj(out ho_Symbols_OCR_01_0);
        hv_SymbolNames_OCR_01_0 = new HTuple();
        hv_Ocr_Split            = new HTuple();
        //OCR 01: Code generated by OCR 01
        //OCR 01:
        //OCR 01: Prepare text model
        //OCR 01:
        if ((int)(new HTuple(hv_TextModel_COPY_INP_TMP.TupleEqual(new HTuple()))) != 0)
        {
            hv_TextModel_COPY_INP_TMP.Dispose();
            HOperatorSet.CreateTextModelReader("manual", new HTuple(), out hv_TextModel_COPY_INP_TMP);
            HOperatorSet.SetTextModelParam(hv_TextModel_COPY_INP_TMP, "manual_stroke_width",
                                           5);
            HOperatorSet.SetTextModelParam(hv_TextModel_COPY_INP_TMP, "manual_fragment_size_min",
                                           5);
            HOperatorSet.SetTextModelParam(hv_TextModel_COPY_INP_TMP, "manual_eliminate_border_blobs",
                                           "true");
            HOperatorSet.SetTextModelParam(hv_TextModel_COPY_INP_TMP, "manual_base_line_tolerance",
                                           0.2);
            HOperatorSet.SetTextModelParam(hv_TextModel_COPY_INP_TMP, "manual_max_line_num",
                                           2);
        }

        //OCR 01:
        //OCR 01: Load classifier
        //OCR 01:
        if ((int)(new HTuple(hv_OcrHandle_COPY_INP_TMP.TupleEqual(new HTuple()))) != 0)
        {
            hv_OcrHandle_COPY_INP_TMP.Dispose();
            HOperatorSet.ReadOcrClassSvm("C:/Users/iwake/OneDrive - wake/Desktop/OCR/NumOcrTrainBlck.osc",
                                         out hv_OcrHandle_COPY_INP_TMP);
        }


        //OCR 01:
        //OCR 01: Extract symbol regions (segmentation step)
        //OCR 01: Only consider first channel for color images
        ho_TmpObj_Mono.Dispose();
        HOperatorSet.AccessChannel(ho_Image, out ho_TmpObj_Mono, 1);
        ho_TmpObj_MonoReduced_OCR_01_0.Dispose();
        HOperatorSet.ReduceDomain(ho_TmpObj_Mono, ho_ROI_OCR_01_0, out ho_TmpObj_MonoReduced_OCR_01_0
                                  );
        //OCR 01:
        //OCR 01: Orientation Correction (for consistent border and domain
        //OCR 01: handling, this is always applied, even with no rotation)
        //OCR 01:
        hv_TmpCtrl_MatrixIdentity.Dispose();
        HOperatorSet.HomMat2dIdentity(out hv_TmpCtrl_MatrixIdentity);
        //OCR 01: Apply transformation to image and domain
        ho_TmpObj_Domain.Dispose();
        HOperatorSet.GetDomain(ho_TmpObj_MonoReduced_OCR_01_0, out ho_TmpObj_Domain);
        hv_TmpCtrl_ClipRegion.Dispose();
        HOperatorSet.GetSystem("clip_region", out hv_TmpCtrl_ClipRegion);
        HOperatorSet.SetSystem("clip_region", "false");
        ho_TmpObj_DomainExpanded.Dispose();
        HOperatorSet.DilationCircle(ho_TmpObj_Domain, out ho_TmpObj_DomainExpanded, 25);
        ho_TmpObj_DomainTransformedRaw.Dispose();
        HOperatorSet.AffineTransRegion(ho_TmpObj_DomainExpanded, out ho_TmpObj_DomainTransformedRaw,
                                       hv_TmpCtrl_MatrixIdentity, "true");
        hv_TmpCtrl_Row1.Dispose(); hv_TmpCtrl_Col1.Dispose(); hv_TmpCtrl_Row2.Dispose(); hv_TmpCtrl_Col2.Dispose();
        HOperatorSet.SmallestRectangle1(ho_TmpObj_DomainTransformedRaw, out hv_TmpCtrl_Row1,
                                        out hv_TmpCtrl_Col1, out hv_TmpCtrl_Row2, out hv_TmpCtrl_Col2);
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
            hv_TmpCtrl_MatrixTranslation.Dispose();
            HOperatorSet.HomMat2dTranslate(hv_TmpCtrl_MatrixIdentity, -hv_TmpCtrl_Row1, -hv_TmpCtrl_Col1,
                                           out hv_TmpCtrl_MatrixTranslation);
        }
        hv_TmpCtrl_MatrixComposite.Dispose();
        HOperatorSet.HomMat2dCompose(hv_TmpCtrl_MatrixTranslation, hv_TmpCtrl_MatrixIdentity,
                                     out hv_TmpCtrl_MatrixComposite);
        ho_TmpObj_DomainTransformed.Dispose();
        HOperatorSet.AffineTransRegion(ho_TmpObj_Domain, out ho_TmpObj_DomainTransformed,
                                       hv_TmpCtrl_MatrixComposite, "true");
        ho_TmpObj_ImageTransformed.Dispose();
        HOperatorSet.AffineTransImage(ho_TmpObj_MonoReduced_OCR_01_0, out ho_TmpObj_ImageTransformed,
                                      hv_TmpCtrl_MatrixComposite, "constant", "true");
        ho_TmpObj_DomainExpanded.Dispose();
        HOperatorSet.DilationCircle(ho_TmpObj_Domain, out ho_TmpObj_DomainExpanded, 25);
        ho_TmpObj_ImageTransformedExpanded.Dispose();
        HOperatorSet.ExpandDomainGray(ho_TmpObj_ImageTransformed, out ho_TmpObj_ImageTransformedExpanded,
                                      25);
        ho_TmpObj_ImageTransformedReduced.Dispose();
        HOperatorSet.ReduceDomain(ho_TmpObj_ImageTransformed, ho_TmpObj_DomainTransformed,
                                  out ho_TmpObj_ImageTransformedReduced);
        using (HDevDisposeHelper dh = new HDevDisposeHelper())
        {
            ho_TmpObj_MonoReduced_OCR_01_0.Dispose();
            HOperatorSet.CropPart(ho_TmpObj_ImageTransformedReduced, out ho_TmpObj_MonoReduced_OCR_01_0,
                                  0, 0, (hv_TmpCtrl_Col2 - hv_TmpCtrl_Col1) + 1, (hv_TmpCtrl_Row2 - hv_TmpCtrl_Row1) + 1);
        }
        HOperatorSet.SetSystem("clip_region", hv_TmpCtrl_ClipRegion);
        hv_TmpCtrl_ResultHandle_OCR_01_0.Dispose();
        HOperatorSet.FindText(ho_TmpObj_MonoReduced_OCR_01_0, hv_TextModel_COPY_INP_TMP,
                              out hv_TmpCtrl_ResultHandle_OCR_01_0);

        //OCR 01:
        //OCR 01: Read text (classification step)
        ho_Symbols_OCR_01_0.Dispose();
        HOperatorSet.GetTextObject(out ho_Symbols_OCR_01_0, hv_TmpCtrl_ResultHandle_OCR_01_0,
                                   "manual_all_lines");
        //dev_display (TmpObj_MonoReduced_OCR_01_0)
        //dev_set_draw ('fill')
        //dev_set_colored (3)
        //dev_display (Symbols_OCR_01_0)
        hv_SymbolNames_OCR_01_0.Dispose();
        HOperatorSet.DoOcrMultiClassSvm(ho_Symbols_OCR_01_0, ho_TmpObj_MonoReduced_OCR_01_0,
                                        hv_OcrHandle_COPY_INP_TMP, out hv_SymbolNames_OCR_01_0);
        hv_Ocr_Split.Dispose();
        ocr_split(hv_SymbolNames_OCR_01_0, out hv_Ocr_Split);
        ho_TmpObj_Mono.Dispose();
        ho_TmpObj_MonoReduced_OCR_01_0.Dispose();
        ho_TmpObj_Domain.Dispose();
        ho_TmpObj_DomainExpanded.Dispose();
        ho_TmpObj_DomainTransformedRaw.Dispose();
        ho_TmpObj_DomainTransformed.Dispose();
        ho_TmpObj_ImageTransformed.Dispose();
        ho_TmpObj_ImageTransformedExpanded.Dispose();
        ho_TmpObj_ImageTransformedReduced.Dispose();
        ho_Symbols_OCR_01_0.Dispose();

        hv_OcrHandle_COPY_INP_TMP.Dispose();
        hv_TextModel_COPY_INP_TMP.Dispose();
        hv_TmpCtrl_MatrixIdentity.Dispose();
        hv_TmpCtrl_ClipRegion.Dispose();
        hv_TmpCtrl_Row1.Dispose();
        hv_TmpCtrl_Col1.Dispose();
        hv_TmpCtrl_Row2.Dispose();
        hv_TmpCtrl_Col2.Dispose();
        hv_TmpCtrl_MatrixTranslation.Dispose();
        hv_TmpCtrl_MatrixComposite.Dispose();
        hv_TmpCtrl_ResultHandle_OCR_01_0.Dispose();

        return;
    }
示例#21
0
        /// <summary>
        /// 涮新定位点
        /// </summary>
        /// <param name="itoolDateFather_"></param>
        public void ShuaXinDingWeiDian(IToolDateFather itoolDateFather_, Object ioutSide_)
        {
            if (itoolDateFather_.IrectShuJuPianYi != null)//更新定位点
            {
                #region  判断是不是直线
                if (ioutSide_ is IOutsideLineROI)//判断是不是直线
                {
                    IOutsideLineROI IOutSide_ = (IOutsideLineROI)ioutSide_;

                    HTuple oneRow_, oneCol_, twoRow_, twoCol_;

                    HTuple  hv_modMat2D, crossRow_ = new HTuple(), crossCol_ = new HTuple(), Nr, Nc, Dist;
                    HObject contour_;
                    HOperatorSet.VectorAngleToRigid(itoolDateFather_.GenSuiDian_Y_Row, itoolDateFather_.GeuSuiDian_X_Col, itoolDateFather_.GenSuiDian_A, itoolDateFather_.IrectShuJuPianYi.Row, itoolDateFather_.IrectShuJuPianYi.Column, itoolDateFather_.IrectShuJuPianYi.Angle, out hv_modMat2D);

                    crossRow_[0] = IOutSide_.Row1.D;
                    crossRow_[1] = IOutSide_.Row2.D;
                    crossCol_[0] = IOutSide_.Cols1.D;
                    crossCol_[1] = IOutSide_.Cols2.D;
                    HOperatorSet.GenContourPolygonXld(out contour_, crossRow_, crossCol_);

                    HOperatorSet.AffineTransContourXld(contour_, out contour_, hv_modMat2D);

                    HOperatorSet.FitLineContourXld(contour_, "tukey", -1, 0, 5, 2, out oneRow_, out oneCol_, out twoRow_, out twoCol_, out Nr, out Nc, out Dist);

                    IOutSide_.Row1  = oneRow_;
                    IOutSide_.Row2  = twoRow_;
                    IOutSide_.Cols1 = oneCol_;
                    IOutSide_.Cols2 = twoCol_;
                    contour_.Dispose();
                }
                #endregion

                #region  判断是不是矩形1
                if (ioutSide_ is IOutsideRectangle1ROI)//判断是不是矩形1
                {
                }
                #endregion

                #region  判断是不是圆
                if (ioutSide_ is IOutsideCricleROI)//判断是不是圆
                {
                    IOutsideCricleROI IOutSide_ = (IOutsideCricleROI)ioutSide_;
                    HTuple            hv_modMat2D;
                    HObject           hv_Cirle;
                    HTuple            Area_, Column_, Row_;

                    HOperatorSet.VectorAngleToRigid(itoolDateFather_.GenSuiDian_Y_Row, itoolDateFather_.GeuSuiDian_X_Col, itoolDateFather_.GenSuiDian_A, itoolDateFather_.IrectShuJuPianYi.Row, itoolDateFather_.IrectShuJuPianYi.Column, itoolDateFather_.IrectShuJuPianYi.Angle, out hv_modMat2D);

                    //HOperatorSet.GenCircle(out hv_Cirle, IOutSide_.Center_row_y, IOutSide_.Center_column_x, IOutSide_.Radius);
                    //HOperatorSet.AffineTransRegion(hv_Cirle, out hv_Cirle, hv_modMat2D, "nearest_neighbor");
                    //HOperatorSet.AreaCenter(hv_Cirle, out Area_, out Row_, out Column_);

                    HOperatorSet.GenCircleContourXld(out hv_Cirle, IOutSide_.Center_row_y, IOutSide_.Center_column_x, IOutSide_.Radius, 0, 6.28318, "positive", 1);
                    HOperatorSet.AffineTransContourXld(hv_Cirle, out hv_Cirle, hv_modMat2D);
                    HTuple pointOrder;
                    HOperatorSet.AreaCenterXld(hv_Cirle, out Area_, out Row_, out Column_, out pointOrder);

                    hv_Cirle.Dispose();
                    IOutSide_.Center_column_x = Column_;
                    IOutSide_.Center_row_y    = Row_;
                }
                #endregion

                #region  判断是不是矩形2
                if (ioutSide_ is IOutsideRectangle2ROI)//判断是不是矩形2
                {
                    HTuple  hv_modMat2D, mid_row_, mid_col_, phi_, area_;
                    HObject ho_ROI_0;
                    IOutsideRectangle2ROI IOutSide_ = (IOutsideRectangle2ROI)ioutSide_;
                    HOperatorSet.GenRectangle2(out ho_ROI_0, IOutSide_.Mid_row_y, IOutSide_.Mid_col_x, -IOutSide_.Phi, IOutSide_.Len1, IOutSide_.Len2);
                    HOperatorSet.VectorAngleToRigid(itoolDateFather_.GenSuiDian_Y_Row, itoolDateFather_.GeuSuiDian_X_Col, itoolDateFather_.GenSuiDian_A, itoolDateFather_.IrectShuJuPianYi.Row, itoolDateFather_.IrectShuJuPianYi.Column, itoolDateFather_.IrectShuJuPianYi.Angle, out hv_modMat2D);

                    HOperatorSet.AffineTransRegion(ho_ROI_0, out ho_ROI_0, hv_modMat2D, "nearest_neighbor");

                    HOperatorSet.AreaCenter(ho_ROI_0, out area_, out mid_row_, out mid_col_);

                    HOperatorSet.OrientationRegion(ho_ROI_0, out phi_);
                    IOutSide_.Mid_col_x = mid_col_;
                    IOutSide_.Mid_row_y = mid_row_;
                    IOutSide_.Phi       = -phi_;

                    ho_ROI_0.Dispose();
                }
                #endregion

                #region  刷新定位点
                itoolDateFather_.GenSuiDian_A     = itoolDateFather_.IrectShuJuPianYi.Angle;
                itoolDateFather_.GenSuiDian_Y_Row = itoolDateFather_.IrectShuJuPianYi.Row;
                itoolDateFather_.GeuSuiDian_X_Col = itoolDateFather_.IrectShuJuPianYi.Column;
                #endregion
            }
        }
示例#22
0
        //DateTime t1, t2, t3, t4, t5, t6, t7; TimeSpan xx;
        private void action()
        {
            //t1 = DateTime.Now;
            HObject ho_RegionAffineTrans = null;
            HObject ho_ImageReduced = null, ho_ImaAmp = null, ho_ImaDir = null;
            HObject ho_Region = null, ho_Circle = null, ho_ImageReduced1 = null;
            HObject ho_Region1 = null, ho_ConnectedRegions = null, ho_SelectedRegions = null;
            HObject ho_RegionUnion = null, ho_RegionClosing = null, ho_RegionFillUp = null;
            HObject ho_Contours = null, ho_ContCircle = null, ho_Region2 = null;

            HTuple hv_HomMat2DIdentity = new HTuple();
            HTuple hv_Row2 = new HTuple(), hv_Column2 = new HTuple();
            HTuple hv_Angle1 = new HTuple(), hv_Scale = new HTuple();
            HTuple hv_Score = new HTuple(), hv_HomMat2DRotate = new HTuple();
            HTuple hv_HomMat2DTranslate = new HTuple(), hv_Mean = new HTuple();
            HTuple hv_Deviation = new HTuple(), hv_Area1 = new HTuple();
            HTuple hv_Row = new HTuple(), hv_Column = new HTuple();
            HTuple hv_Row1 = new HTuple(), hv_Column1 = new HTuple();
            HTuple hv_Radius = new HTuple(), hv_Mean1 = new HTuple();
            HTuple hv_Deviation1 = new HTuple(), hv_Row4 = new HTuple();
            HTuple hv_Column4 = new HTuple(), hv_Radius1 = new HTuple();
            HTuple hv_StartPhi = new HTuple(), hv_EndPhi = new HTuple();
            HTuple hv_PointOrder = new HTuple(), hv_Row5 = new HTuple();
            HTuple hv_Col = new HTuple();

            HOperatorSet.GenEmptyObj(out ho_RegionAffineTrans);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced);
            HOperatorSet.GenEmptyObj(out ho_ImaAmp);
            HOperatorSet.GenEmptyObj(out ho_ImaDir);
            HOperatorSet.GenEmptyObj(out ho_Region);
            HOperatorSet.GenEmptyObj(out ho_Circle);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced1);
            HOperatorSet.GenEmptyObj(out ho_Region1);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
            HOperatorSet.GenEmptyObj(out ho_RegionUnion);
            HOperatorSet.GenEmptyObj(out ho_RegionClosing);
            HOperatorSet.GenEmptyObj(out ho_RegionFillUp);
            HOperatorSet.GenEmptyObj(out ho_Contours);
            HOperatorSet.GenEmptyObj(out ho_ContCircle);
            HOperatorSet.GenEmptyObj(out ho_Region2);
            HOperatorSet.Union1(algorithm.Region, out RegionToDisp);
            //t3 = DateTime.Now;
            //t4 = DateTime.Now;
            //xx = t4 - t1;
            //if (xx.Seconds * 1000 + xx.Milliseconds > 100)
            //{
            //    t2 = DateTime.Now;
            //}
            try
            {
                if (hv_ModelID == null)
                {
                    HOperatorSet.ReadShapeModel(PathHelper.currentProductPath + @"\shizicao.shm", out hv_ModelID);
                    HOperatorSet.ReadRegion(out ho_RegionFillUp1, PathHelper.currentProductPath + @"\shiziquyu.hobj");
                }
                HOperatorSet.HomMat2dIdentity(out hv_HomMat2DIdentity);
                HOperatorSet.FindScaledShapeModel(Image, hv_ModelID, -3.14, 3.2, 0.9, 1.1,
                                                  0.1, 1, 0.5, "least_squares", 0, 0.9, out hv_Row2, out hv_Column2, out hv_Angle1,
                                                  out hv_Scale, out hv_Score);
                //t4 = DateTime.Now;
                //xx = t4 - t1;
                //if (xx.Seconds * 1000 + xx.Milliseconds > 100)
                //{
                //    t2 = DateTime.Now;
                //}
                HOperatorSet.HomMat2dRotate(hv_HomMat2DIdentity, hv_Angle1, hv_Row3, hv_Column3,
                                            out hv_HomMat2DRotate);
                HOperatorSet.HomMat2dTranslate(hv_HomMat2DRotate, hv_Row2 - hv_Row3, hv_Column2 - hv_Column3,
                                               out hv_HomMat2DTranslate);
                ho_RegionAffineTrans.Dispose();
                HOperatorSet.AffineTransRegion(ho_RegionFillUp1, out ho_RegionAffineTrans,
                                               hv_HomMat2DTranslate, "nearest_neighbor");
                ho_ImageReduced.Dispose();
                HOperatorSet.ReduceDomain(Image, ho_RegionAffineTrans, out ho_ImageReduced
                                          );
                ho_ImaAmp.Dispose(); ho_ImaDir.Dispose();
                HOperatorSet.EdgesImage(ho_ImageReduced, out ho_ImaAmp, out ho_ImaDir, "canny",
                                        1, "nms", 30, 50);
                HOperatorSet.Intensity(ho_RegionAffineTrans, ho_ImaAmp, out hv_Mean, out hv_Deviation);
                ho_Region.Dispose();
                HOperatorSet.Threshold(ho_ImaAmp, out ho_Region, ((((hv_Mean - hv_Deviation)).TupleConcat(
                                                                       1))).TupleMax(), 255);
                HOperatorSet.AreaCenter(ho_Region, out hv_Area1, out hv_Row, out hv_Column);

                HOperatorSet.Union1(ho_Region, out RegionToDisp);
                HTuple hv_result = GetHv_result();
                hv_result = hv_result.TupleConcat("十字槽堵槽");
                hv_result = hv_result.TupleConcat(hv_Area1.D);
                result    = hv_result.Clone();

                ho_RegionAffineTrans.Dispose();
                ho_ImageReduced.Dispose();
                ho_ImaAmp.Dispose();
                ho_ImaDir.Dispose();
                ho_Region.Dispose();
                ho_Circle.Dispose();
                ho_ImageReduced1.Dispose();
                ho_Region1.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_RegionUnion.Dispose();
                ho_RegionClosing.Dispose();
                ho_RegionFillUp.Dispose();
                ho_Contours.Dispose();
                ho_ContCircle.Dispose();
                ho_Region2.Dispose();
                algorithm.Region.Dispose();
                //t4 = DateTime.Now;
                //xx = t4 - t1;
                //if (xx.Seconds * 1000 + xx.Milliseconds > 100)
                //{
                //    t2 = DateTime.Now;
                //}
            }
            catch
            {
                HTuple hv_result = GetHv_result();
                hv_result = hv_result.TupleConcat("十字槽堵槽");
                hv_result = hv_result.TupleConcat(0);
                result    = hv_result.Clone();
                ho_RegionAffineTrans.Dispose();
                ho_ImageReduced.Dispose();
                ho_ImaAmp.Dispose();
                ho_ImaDir.Dispose();
                ho_Region.Dispose();
                ho_Circle.Dispose();
                ho_ImageReduced1.Dispose();
                ho_Region1.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_RegionUnion.Dispose();
                ho_RegionClosing.Dispose();
                ho_RegionFillUp.Dispose();
                ho_Contours.Dispose();
                ho_ContCircle.Dispose();
                ho_Region2.Dispose();
                algorithm.Region.Dispose();
            }
        }
示例#23
0
        private void action()
        {
            // Stack for temporary objects
            HObject[] OTemp = new HObject[20];

            // Local iconic variables

            HObject ho_Rectanglem;
            HObject ho_Regionm;
            HObject ho_Regionn, ho_Regiont, ho_ImageAffinTrans = null;
            HObject ho_ImageReduced = null, ho_Region = null, ho_RegionDilation1 = null;
            HObject ho_ConnectedRegions2 = null, ho_SelectedRegions2 = null;
            HObject ho_RegionTrans2 = null, ho_RegionDifference2 = null;
            HObject ho_RegionErosion1 = null, ho_ConnectedRegions3 = null;
            HObject ho_SelectedRegions3 = null, ho_RegionTrans3 = null;
            HObject ho_ImageReduced3 = null, ho_Region3 = null, ho_ConnectedRegions4 = null;
            HObject ho_SelectedRegions4 = null, ho_RegionErosion = null;
            HObject ho_RegionDilation = null, ho_RegionClosing = null, ho_ConnectedRegions = null;
            HObject ho_SelectedRegions = null, ho_ObjectSelected = null;
            HObject ho_RegionTrans = null, ho_ImageReduced1 = null, ho_Region1 = null;
            HObject ho_RegionDifference = null, ho_ObjectSelected1 = null;
            HObject ho_RegionTrans1 = null, ho_ImageReduced2 = null, ho_Region2 = null;
            HObject ho_RegionDifference1 = null, ho_ConnectedRegions1 = null;
            HObject ho_SelectedRegions1 = null, ho_RegionAffineTrans = null;

            // Local control variables

            HTuple hv_m = null, hv_n = null, hv_m1 = null, hv_n1 = null;
            HTuple hv_h1 = null, hv_w1 = null, hv_h2 = null, hv_w2 = null;
            HTuple hv_Row = null, hv_Column = null, hv_Angle = null;
            HTuple hv_Score = null, hv_HomMat2D = new HTuple(), hv_Area1 = new HTuple();
            HTuple hv_Row4 = new HTuple(), hv_Column4 = new HTuple();
            HTuple hv_Number = new HTuple(), hv_Row1 = new HTuple();
            HTuple hv_Column1 = new HTuple(), hv_Row2 = new HTuple();
            HTuple hv_Column2 = new HTuple(), hv_Row11 = new HTuple();
            HTuple hv_Column11 = new HTuple(), hv_Row21 = new HTuple();
            HTuple hv_Column21 = new HTuple(), hv_Area = new HTuple();
            HTuple hv_Row3 = new HTuple(), hv_Column3 = new HTuple();
            HTuple hv_HomMat2D1 = new HTuple();

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Rectanglem);
            HOperatorSet.GenEmptyObj(out ho_Regionm);
            HOperatorSet.GenEmptyObj(out ho_Regionn);
            HOperatorSet.GenEmptyObj(out ho_Regiont);
            HOperatorSet.GenEmptyObj(out ho_ImageAffinTrans);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced);
            HOperatorSet.GenEmptyObj(out ho_Region);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation1);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions2);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions2);
            HOperatorSet.GenEmptyObj(out ho_RegionTrans2);
            HOperatorSet.GenEmptyObj(out ho_RegionDifference2);
            HOperatorSet.GenEmptyObj(out ho_RegionErosion1);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions3);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions3);
            HOperatorSet.GenEmptyObj(out ho_RegionTrans3);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced3);
            HOperatorSet.GenEmptyObj(out ho_Region3);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions4);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions4);
            HOperatorSet.GenEmptyObj(out ho_RegionErosion);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation);
            HOperatorSet.GenEmptyObj(out ho_RegionClosing);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
            HOperatorSet.GenEmptyObj(out ho_ObjectSelected);
            HOperatorSet.GenEmptyObj(out ho_RegionTrans);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced1);
            HOperatorSet.GenEmptyObj(out ho_Region1);
            HOperatorSet.GenEmptyObj(out ho_RegionDifference);
            HOperatorSet.GenEmptyObj(out ho_ObjectSelected1);
            HOperatorSet.GenEmptyObj(out ho_RegionTrans1);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced2);
            HOperatorSet.GenEmptyObj(out ho_Region2);
            HOperatorSet.GenEmptyObj(out ho_RegionDifference1);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_RegionAffineTrans);
            HOperatorSet.Union1(algorithm.Region, out RegionToDisp);
            try
            {
                hv_m  = 0;
                hv_n  = 0;
                hv_m1 = 0;
                hv_n1 = 0;
                hv_h1 = 0;
                hv_w1 = 0;
                hv_h2 = 0;
                hv_w2 = 0;
                ho_Regionm.Dispose();
                HOperatorSet.GenRegionPoints(out ho_Regionm, DRows, DColumns);
                ho_Regionn.Dispose();
                HOperatorSet.GenRegionPoints(out ho_Regionn, DRows, DColumns);
                ho_Regiont.Dispose();
                HOperatorSet.GenRegionPoints(out ho_Regiont, DRows, DColumns);
                ho_Rectanglem.Dispose();
                HOperatorSet.GenRectangle1(out ho_Rectanglem, DRows, DColumns, DLength1s, DLength2s);
                HOperatorSet.ReadShapeModel(PathHelper.currentProductPath + @"\waiguan2.shm", out hv_ModelID);
                HOperatorSet.FindShapeModel(Image, hv_ModelID, -6.29, 6.29, 0, 1, 0.5, "least_squares",
                                            0, 0.9, out hv_Row, out hv_Column, out hv_Angle, out hv_Score);
                if ((int)(new HTuple((new HTuple(hv_Score.TupleLength())).TupleEqual(1))) != 0)
                {
                    HOperatorSet.VectorAngleToRigid(hv_Row, hv_Column, hv_Angle, DRow1s, DColumn1s,
                                                    0, out hv_HomMat2D);
                    ho_ImageAffinTrans.Dispose();
                    HOperatorSet.AffineTransImage(Image, out ho_ImageAffinTrans, hv_HomMat2D,
                                                  "constant", "false");
                    ho_ImageReduced.Dispose();
                    HOperatorSet.ReduceDomain(ho_ImageAffinTrans, ho_Rectanglem, out ho_ImageReduced
                                              );
                    ho_Region.Dispose();
                    HOperatorSet.Threshold(ho_ImageReduced, out ho_Region, thv, 255);
                    //
                    ho_RegionDilation1.Dispose();
                    HOperatorSet.DilationCircle(ho_Region, out ho_RegionDilation1, this.afs);
                    ho_ConnectedRegions2.Dispose();
                    HOperatorSet.Connection(ho_RegionDilation1, out ho_ConnectedRegions2);
                    ho_SelectedRegions2.Dispose();
                    HOperatorSet.SelectShapeStd(ho_ConnectedRegions2, out ho_SelectedRegions2,
                                                "max_area", 70);
                    ho_RegionTrans2.Dispose();
                    HOperatorSet.ShapeTrans(ho_SelectedRegions2, out ho_RegionTrans2, "convex");
                    ho_RegionDifference2.Dispose();
                    HOperatorSet.Difference(ho_RegionTrans2, ho_SelectedRegions2, out ho_RegionDifference2
                                            );
                    ho_RegionErosion1.Dispose();
                    HOperatorSet.ErosionCircle(ho_RegionDifference2, out ho_RegionErosion1, this.apz);
                    ho_ConnectedRegions3.Dispose();
                    HOperatorSet.Connection(ho_RegionErosion1, out ho_ConnectedRegions3);
                    ho_SelectedRegions3.Dispose();
                    HOperatorSet.SelectShapeStd(ho_ConnectedRegions3, out ho_SelectedRegions3,
                                                "max_area", 70);
                    ho_RegionTrans3.Dispose();
                    HOperatorSet.ShapeTrans(ho_SelectedRegions3, out ho_RegionTrans3, "convex");
                    ho_ImageReduced3.Dispose();
                    HOperatorSet.ReduceDomain(ho_ImageReduced, ho_RegionTrans3, out ho_ImageReduced3
                                              );
                    ho_Region3.Dispose();
                    HOperatorSet.Threshold(ho_ImageReduced3, out ho_Region3, thv, 255);
                    ho_ConnectedRegions4.Dispose();
                    HOperatorSet.Connection(ho_Region3, out ho_ConnectedRegions4);
                    ho_SelectedRegions4.Dispose();
                    HOperatorSet.SelectShape(ho_ConnectedRegions4, out ho_SelectedRegions4, "area",
                                             "and", this.kdz, 9900999);
                    HOperatorSet.AreaCenter(ho_SelectedRegions4, out hv_Area1, out hv_Row4, out hv_Column4);
                    if ((int)(new HTuple((new HTuple(hv_Area1.TupleLength())).TupleGreater(0))) != 0)
                    {
                        hv_m1 = hv_Area1.TupleMax();
                        hv_n1 = hv_Area1.TupleSum();
                        {
                            HObject ExpTmpOutVar_0;
                            HOperatorSet.Union2(ho_Regionn, ho_SelectedRegions4, out ExpTmpOutVar_0);
                            ho_Regionn.Dispose();
                            ho_Regionn = ExpTmpOutVar_0;
                        }
                    }
                    else
                    {
                        hv_m1 = 0;
                        hv_n1 = 0;
                    }


                    //
                    ho_RegionErosion.Dispose();
                    HOperatorSet.ErosionRectangle1(ho_Region, out ho_RegionErosion, this.cd, this.pzz);
                    ho_RegionDilation.Dispose();
                    HOperatorSet.DilationRectangle1(ho_RegionErosion, out ho_RegionDilation, this.cd,
                                                    this.pzz);
                    ho_RegionClosing.Dispose();
                    HOperatorSet.ClosingRectangle1(ho_RegionDilation, out ho_RegionClosing, this.yd,
                                                   this.bjz);
                    ho_ConnectedRegions.Dispose();
                    HOperatorSet.Connection(ho_RegionClosing, out ho_ConnectedRegions);
                    ho_SelectedRegions.Dispose();
                    HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, (new HTuple("height")).TupleConcat(
                                                 "width"), "and", (new HTuple(this.yd)).TupleConcat(this.bjz), (new HTuple(9999)).TupleConcat(
                                                 5000));
                    HOperatorSet.CountObj(ho_SelectedRegions, out hv_Number);
                    if ((int)(new HTuple(hv_Number.TupleEqual(2))) != 0)
                    {
                        ho_ObjectSelected.Dispose();
                        HOperatorSet.SelectObj(ho_SelectedRegions, out ho_ObjectSelected, 1);
                        ho_RegionTrans.Dispose();
                        HOperatorSet.ShapeTrans(ho_ObjectSelected, out ho_RegionTrans, "convex");
                        HOperatorSet.SmallestRectangle1(ho_RegionTrans, out hv_Row1, out hv_Column1,
                                                        out hv_Row2, out hv_Column2);
                        hv_h1 = hv_Row2 - hv_Row1;
                        hv_w1 = hv_Column2 - hv_Column1;
                        ho_ImageReduced1.Dispose();
                        HOperatorSet.ReduceDomain(ho_ImageReduced, ho_RegionTrans, out ho_ImageReduced1
                                                  );
                        ho_Region1.Dispose();
                        HOperatorSet.Threshold(ho_ImageReduced1, out ho_Region1, thv, 255);
                        ho_RegionDifference.Dispose();
                        HOperatorSet.Difference(ho_RegionTrans, ho_Region1, out ho_RegionDifference
                                                );
                        {
                            HObject ExpTmpOutVar_0;
                            HOperatorSet.Union2(ho_Regionm, ho_RegionDifference, out ExpTmpOutVar_0);
                            ho_Regionm.Dispose();
                            ho_Regionm = ExpTmpOutVar_0;
                        }
                        ho_ObjectSelected1.Dispose();
                        HOperatorSet.SelectObj(ho_SelectedRegions, out ho_ObjectSelected1, 2);
                        ho_RegionTrans1.Dispose();
                        HOperatorSet.ShapeTrans(ho_ObjectSelected1, out ho_RegionTrans1, "convex");
                        HOperatorSet.SmallestRectangle1(ho_RegionTrans1, out hv_Row11, out hv_Column11,
                                                        out hv_Row21, out hv_Column21);
                        hv_h2 = hv_Row21 - hv_Row11;
                        hv_w2 = hv_Column21 - hv_Column11;
                        ho_ImageReduced2.Dispose();
                        HOperatorSet.ReduceDomain(ho_ImageReduced, ho_RegionTrans1, out ho_ImageReduced2
                                                  );
                        ho_Region2.Dispose();
                        HOperatorSet.Threshold(ho_ImageReduced2, out ho_Region2, thv, 255);
                        ho_RegionDifference1.Dispose();
                        HOperatorSet.Difference(ho_RegionTrans1, ho_Region2, out ho_RegionDifference1
                                                );
                        {
                            HObject ExpTmpOutVar_0;
                            HOperatorSet.Union2(ho_Regionm, ho_RegionDifference1, out ExpTmpOutVar_0);
                            ho_Regionm.Dispose();
                            ho_Regionm = ExpTmpOutVar_0;
                        }
                        ho_ConnectedRegions1.Dispose();
                        HOperatorSet.Connection(ho_Regionm, out ho_ConnectedRegions1);
                        ho_SelectedRegions1.Dispose();
                        HOperatorSet.SelectShape(ho_ConnectedRegions1, out ho_SelectedRegions1, "area",
                                                 "and", this.mj, 99999);
                        HOperatorSet.AreaCenter(ho_SelectedRegions1, out hv_Area, out hv_Row3, out hv_Column3);
                        if ((int)(new HTuple((new HTuple(hv_Area.TupleLength())).TupleGreater(0))) != 0)
                        {
                            hv_m = hv_Area.TupleMax();
                            hv_n = hv_Area.TupleSum();
                            {
                                HObject ExpTmpOutVar_0;
                                HOperatorSet.Union2(ho_Regionn, ho_SelectedRegions1, out ExpTmpOutVar_0
                                                    );
                                ho_Regionn.Dispose();
                                ho_Regionn = ExpTmpOutVar_0;
                            }
                        }
                        else
                        {
                            hv_m = 0;
                            hv_n = 0;
                        }
                    }

                    HOperatorSet.VectorAngleToRigid(DRow1s, DColumn1s, 0, hv_Row, hv_Column,
                                                    hv_Angle, out hv_HomMat2D1);
                    ho_RegionAffineTrans.Dispose();
                    HOperatorSet.AffineTransRegion(ho_Regionn, out ho_RegionAffineTrans, hv_HomMat2D1,
                                                   "nearest_neighbor");
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.Union2(ho_Regiont, ho_RegionAffineTrans, out ExpTmpOutVar_0);
                        ho_Regiont.Dispose();
                        ho_Regiont = ExpTmpOutVar_0;
                    }
                }
                else
                {
                    hv_h1 = 0;
                    hv_w1 = 0;
                    hv_h2 = 0;
                    hv_w2 = 0;
                    hv_m  = 99999;
                    hv_n  = 99999;
                    hv_m1 = 99999;
                    hv_n1 = 99999;
                }


                HOperatorSet.ClearShapeModel(hv_ModelID);
                HOperatorSet.Union1(ho_Regiont, out RegionToDisp);

                HTuple hv_result = GetHv_result();
                hv_result = hv_result.TupleConcat("亮色区缺陷总面积");
                hv_result = hv_result.TupleConcat(hv_n.D);
                hv_result = hv_result.TupleConcat("亮色区最大缺陷面积");
                hv_result = hv_result.TupleConcat(hv_m.D);
                hv_result = hv_result.TupleConcat("暗色区缺陷总面积");
                hv_result = hv_result.TupleConcat(hv_n1.D);
                hv_result = hv_result.TupleConcat("暗色区最大缺陷面积");
                hv_result = hv_result.TupleConcat(hv_m1.D);
                hv_result = hv_result.TupleConcat("高1");
                hv_result = hv_result.TupleConcat(hv_h1.D);
                hv_result = hv_result.TupleConcat("宽1");
                hv_result = hv_result.TupleConcat(hv_w1.D);
                hv_result = hv_result.TupleConcat("高2");
                hv_result = hv_result.TupleConcat(hv_h2.D);
                hv_result = hv_result.TupleConcat("宽2");
                hv_result = hv_result.TupleConcat(hv_w2.D);

                result = hv_result.Clone();
                ho_Rectanglem.Dispose();
                ho_Regionm.Dispose();
                ho_Regionn.Dispose();
                ho_Regiont.Dispose();
                ho_ImageAffinTrans.Dispose();
                ho_ImageReduced.Dispose();
                ho_Region.Dispose();
                ho_RegionDilation1.Dispose();
                ho_ConnectedRegions2.Dispose();
                ho_SelectedRegions2.Dispose();
                ho_RegionTrans2.Dispose();
                ho_RegionDifference2.Dispose();
                ho_RegionErosion1.Dispose();
                ho_ConnectedRegions3.Dispose();
                ho_SelectedRegions3.Dispose();
                ho_RegionTrans3.Dispose();
                ho_ImageReduced3.Dispose();
                ho_Region3.Dispose();
                ho_ConnectedRegions4.Dispose();
                ho_SelectedRegions4.Dispose();
                ho_RegionErosion.Dispose();
                ho_RegionDilation.Dispose();
                ho_RegionClosing.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_ObjectSelected.Dispose();
                ho_RegionTrans.Dispose();
                ho_ImageReduced1.Dispose();
                ho_Region1.Dispose();
                ho_RegionDifference.Dispose();
                ho_ObjectSelected1.Dispose();
                ho_RegionTrans1.Dispose();
                ho_ImageReduced2.Dispose();
                ho_Region2.Dispose();
                ho_RegionDifference1.Dispose();
                ho_ConnectedRegions1.Dispose();
                ho_SelectedRegions1.Dispose();
                ho_RegionAffineTrans.Dispose();
                algorithm.Region.Dispose();
            }
            catch
            {
                HTuple hv_result = GetHv_result();
                hv_result = hv_result.TupleConcat("亮色区缺陷总面积");
                hv_result = hv_result.TupleConcat(9999999);
                hv_result = hv_result.TupleConcat("亮色区最大缺陷面积");
                hv_result = hv_result.TupleConcat(9999999);
                hv_result = hv_result.TupleConcat("暗色区缺陷总面积");
                hv_result = hv_result.TupleConcat(9999999);
                hv_result = hv_result.TupleConcat("暗色区最大缺陷面积");
                hv_result = hv_result.TupleConcat(9999999);
                hv_result = hv_result.TupleConcat("高1");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("宽1");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("高2");
                hv_result = hv_result.TupleConcat(0);
                hv_result = hv_result.TupleConcat("宽2");
                hv_result = hv_result.TupleConcat(0);
                result    = hv_result.Clone();

                ho_Rectanglem.Dispose();
                ho_Regionm.Dispose();
                ho_Regionn.Dispose();
                ho_Regiont.Dispose();
                ho_ImageAffinTrans.Dispose();
                ho_ImageReduced.Dispose();
                ho_Region.Dispose();
                ho_RegionDilation1.Dispose();
                ho_ConnectedRegions2.Dispose();
                ho_SelectedRegions2.Dispose();
                ho_RegionTrans2.Dispose();
                ho_RegionDifference2.Dispose();
                ho_RegionErosion1.Dispose();
                ho_ConnectedRegions3.Dispose();
                ho_SelectedRegions3.Dispose();
                ho_RegionTrans3.Dispose();
                ho_ImageReduced3.Dispose();
                ho_Region3.Dispose();
                ho_ConnectedRegions4.Dispose();
                ho_SelectedRegions4.Dispose();
                ho_RegionErosion.Dispose();
                ho_RegionDilation.Dispose();
                ho_RegionClosing.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_ObjectSelected.Dispose();
                ho_RegionTrans.Dispose();
                ho_ImageReduced1.Dispose();
                ho_Region1.Dispose();
                ho_RegionDifference.Dispose();
                ho_ObjectSelected1.Dispose();
                ho_RegionTrans1.Dispose();
                ho_ImageReduced2.Dispose();
                ho_Region2.Dispose();
                ho_RegionDifference1.Dispose();
                ho_ConnectedRegions1.Dispose();
                ho_SelectedRegions1.Dispose();
                ho_RegionAffineTrans.Dispose();
                algorithm.Region.Dispose();
            }
            finally
            {
                ho_Rectanglem.Dispose();
                ho_Regionm.Dispose();
                ho_Regionn.Dispose();
                ho_Regiont.Dispose();
                ho_ImageAffinTrans.Dispose();
                ho_ImageReduced.Dispose();
                ho_Region.Dispose();
                ho_RegionDilation1.Dispose();
                ho_ConnectedRegions2.Dispose();
                ho_SelectedRegions2.Dispose();
                ho_RegionTrans2.Dispose();
                ho_RegionDifference2.Dispose();
                ho_RegionErosion1.Dispose();
                ho_ConnectedRegions3.Dispose();
                ho_SelectedRegions3.Dispose();
                ho_RegionTrans3.Dispose();
                ho_ImageReduced3.Dispose();
                ho_Region3.Dispose();
                ho_ConnectedRegions4.Dispose();
                ho_SelectedRegions4.Dispose();
                ho_RegionErosion.Dispose();
                ho_RegionDilation.Dispose();
                ho_RegionClosing.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_ObjectSelected.Dispose();
                ho_RegionTrans.Dispose();
                ho_ImageReduced1.Dispose();
                ho_Region1.Dispose();
                ho_RegionDifference.Dispose();
                ho_ObjectSelected1.Dispose();
                ho_RegionTrans1.Dispose();
                ho_ImageReduced2.Dispose();
                ho_Region2.Dispose();
                ho_RegionDifference1.Dispose();
                ho_ConnectedRegions1.Dispose();
                ho_SelectedRegions1.Dispose();
                ho_RegionAffineTrans.Dispose();
                algorithm.Region.Dispose();
            }
        }
示例#24
0
        private void action()
        {
            // Stack for temporary objects
            HObject[] OTemp = new HObject[20];

            // Local iconic variables

            HObject ho_Circley, ho_Circley1;
            HObject ho_Rectanglem;
            HObject ho_Region3, ho_Region4, ho_Region5;
            HObject ho_ImageAffinTrans = null, ho_RegionDifference = null;
            HObject ho_RegionDifference1 = null, ho_ImageReduced2 = null;
            HObject ho_ImageMean1 = null, ho_RegionDynThresh = null, ho_RegionDynThresh1 = null;
            HObject ho_RegionErosion = null, ho_ImageReduced3 = null, ho_Region1 = null;
            HObject ho_Region2 = null, ho_ConnectedRegions = null, ho_SelectedRegions = null;
            HObject ho_RegionAffineTrans;

            // Local control variables

            HTuple hv_ModelID = null, hv_aa = null;
            HTuple hv_bb = null, hv_Row2 = null, hv_Column2 = null;
            HTuple hv_Angle = null, hv_Score = null, hv_HomMat2D = new HTuple();
            HTuple hv_Area = new HTuple(), hv_Row3 = new HTuple();
            HTuple hv_Column3 = new HTuple(), hv_HomMat2D1 = null;

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Circley);
            HOperatorSet.GenEmptyObj(out ho_Circley1);
            HOperatorSet.GenEmptyObj(out ho_Rectanglem);
            HOperatorSet.GenEmptyObj(out ho_Region3);
            HOperatorSet.GenEmptyObj(out ho_Region4);
            HOperatorSet.GenEmptyObj(out ho_Region5);
            HOperatorSet.GenEmptyObj(out ho_ImageAffinTrans);
            HOperatorSet.GenEmptyObj(out ho_RegionDifference);
            HOperatorSet.GenEmptyObj(out ho_RegionDifference1);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced2);
            HOperatorSet.GenEmptyObj(out ho_ImageMean1);
            HOperatorSet.GenEmptyObj(out ho_RegionDynThresh);
            HOperatorSet.GenEmptyObj(out ho_RegionDynThresh1);
            HOperatorSet.GenEmptyObj(out ho_RegionErosion);
            HOperatorSet.GenEmptyObj(out ho_ImageReduced3);
            HOperatorSet.GenEmptyObj(out ho_Region1);
            HOperatorSet.GenEmptyObj(out ho_Region2);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
            HOperatorSet.GenEmptyObj(out ho_RegionAffineTrans);
            HOperatorSet.Union1(algorithm.Region, out RegionToDisp);
            try
            {
                hv_aa = 0;
                hv_bb = 0;
                ho_Region3.Dispose();
                HOperatorSet.GenRegionPoints(out ho_Region3, DRows, DColumns);
                ho_Region4.Dispose();
                HOperatorSet.GenRegionPoints(out ho_Region4, DRows, DColumns);
                ho_Region5.Dispose();
                HOperatorSet.GenRegionPoints(out ho_Region5, DRows, DColumns);

                ho_Circley.Dispose();
                HOperatorSet.GenCircle(out ho_Circley, DRowy, DColumny, DPhiy);
                ho_Circley1.Dispose();
                HOperatorSet.GenCircle(out ho_Circley1, DRowz, DColumnz, DPhiz);
                ho_Rectanglem.Dispose();
                HOperatorSet.GenRectangle2(out ho_Rectanglem, DRows, DColumns, DPhis, DLength1s, DLength2s);

                HOperatorSet.ReadShapeModel(PathHelper.currentProductPath + @"\nbquekou.shm", out hv_ModelID);
                HOperatorSet.FindShapeModel(Image, hv_ModelID, 0, 3.15, 0.3, 1, 0.5,
                                            "least_squares", 0, 0.9, out hv_Row2, out hv_Column2, out hv_Angle, out hv_Score);
                if ((int)(new HTuple((new HTuple(hv_Score.TupleLength())).TupleEqual(1))) != 0)
                {
                    HOperatorSet.VectorAngleToRigid(hv_Row2, hv_Column2, hv_Angle, DRow1s,
                                                    DColumn1s, 0, out hv_HomMat2D);
                    ho_ImageAffinTrans.Dispose();
                    HOperatorSet.AffineTransImage(Image, out ho_ImageAffinTrans, hv_HomMat2D,
                                                  "constant", "false");
                    ho_RegionDifference.Dispose();
                    HOperatorSet.Difference(ho_Circley, ho_Circley1, out ho_RegionDifference);
                    ho_RegionDifference1.Dispose();
                    HOperatorSet.Difference(ho_RegionDifference, ho_Rectanglem, out ho_RegionDifference1
                                            );

                    ho_ImageReduced2.Dispose();
                    HOperatorSet.ReduceDomain(ho_ImageAffinTrans, ho_RegionDifference1, out ho_ImageReduced2
                                              );
                    ho_ImageMean1.Dispose();
                    HOperatorSet.MeanImage(ho_ImageReduced2, out ho_ImageMean1, this.yd, this.yd);
                    ho_RegionDynThresh.Dispose();
                    HOperatorSet.DynThreshold(ho_ImageReduced2, ho_ImageMean1, out ho_RegionDynThresh,
                                              this.bjz, "dark");
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.Union2(ho_Region3, ho_RegionDynThresh, out ExpTmpOutVar_0);
                        ho_Region3.Dispose();
                        ho_Region3 = ExpTmpOutVar_0;
                    }
                    ho_RegionDynThresh1.Dispose();
                    HOperatorSet.DynThreshold(ho_ImageReduced2, ho_ImageMean1, out ho_RegionDynThresh1,
                                              this.bjz, "light");
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.Union2(ho_Region3, ho_RegionDynThresh1, out ExpTmpOutVar_0);
                        ho_Region3.Dispose();
                        ho_Region3 = ExpTmpOutVar_0;
                    }

                    ho_RegionErosion.Dispose();
                    HOperatorSet.ErosionCircle(ho_RegionDifference1, out ho_RegionErosion, this.kdz);
                    ho_ImageReduced3.Dispose();
                    HOperatorSet.ReduceDomain(ho_ImageAffinTrans, ho_RegionErosion, out ho_ImageReduced3
                                              );

                    ho_Region1.Dispose();
                    HOperatorSet.Threshold(ho_ImageReduced3, out ho_Region1, 0, this.pzz);
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.Union2(ho_Region3, ho_Region1, out ExpTmpOutVar_0);
                        ho_Region3.Dispose();
                        ho_Region3 = ExpTmpOutVar_0;
                    }
                    ho_Region2.Dispose();
                    HOperatorSet.Threshold(ho_ImageReduced3, out ho_Region2, this.cd, 255);
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.Union2(ho_Region3, ho_Region2, out ExpTmpOutVar_0);
                        ho_Region3.Dispose();
                        ho_Region3 = ExpTmpOutVar_0;
                    }

                    ho_ConnectedRegions.Dispose();
                    HOperatorSet.Connection(ho_Region3, out ho_ConnectedRegions);
                    ho_SelectedRegions.Dispose();
                    HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, "area",
                                             "and", this.mj, 999990000);
                    HOperatorSet.AreaCenter(ho_SelectedRegions, out hv_Area, out hv_Row3, out hv_Column3);
                    if ((int)(new HTuple((new HTuple(hv_Area.TupleLength())).TupleGreater(0))) != 0)
                    {
                        {
                            HObject ExpTmpOutVar_0;
                            HOperatorSet.Union2(ho_Region4, ho_SelectedRegions, out ExpTmpOutVar_0);
                            ho_Region4.Dispose();
                            ho_Region4 = ExpTmpOutVar_0;
                        }
                        hv_aa = hv_Area.TupleSum();
                        hv_bb = hv_Area.TupleMax();
                    }
                    else
                    {
                        hv_aa = 0;
                        hv_bb = 0;
                    }
                }
                HOperatorSet.VectorAngleToRigid(DRow1s, DColumn1s, 0, hv_Row2, hv_Column2, hv_Angle,
                                                out hv_HomMat2D1);
                ho_RegionAffineTrans.Dispose();
                HOperatorSet.AffineTransRegion(ho_Region4, out ho_RegionAffineTrans, hv_HomMat2D1,
                                               "nearest_neighbor");
                {
                    HObject ExpTmpOutVar_0;
                    HOperatorSet.Union2(ho_Region5, ho_RegionAffineTrans, out ExpTmpOutVar_0);
                    ho_Region5.Dispose();
                    ho_Region5 = ExpTmpOutVar_0;
                }

                HOperatorSet.ClearShapeModel(hv_ModelID);
                HOperatorSet.Union1(ho_Region5, out RegionToDisp);

                HTuple hv_result = GetHv_result();
                hv_result = hv_result.TupleConcat("缺陷总面积");
                hv_result = hv_result.TupleConcat(hv_aa.D);
                hv_result = hv_result.TupleConcat("最大面积");
                hv_result = hv_result.TupleConcat(hv_bb.D);
                result    = hv_result.Clone();
                ho_Circley.Dispose();
                ho_Circley1.Dispose();
                ho_Rectanglem.Dispose();
                ho_Region3.Dispose();
                ho_Region4.Dispose();
                ho_Region5.Dispose();
                ho_ImageAffinTrans.Dispose();
                ho_RegionDifference.Dispose();
                ho_RegionDifference1.Dispose();
                ho_ImageReduced2.Dispose();
                ho_ImageMean1.Dispose();
                ho_RegionDynThresh.Dispose();
                ho_RegionDynThresh1.Dispose();
                ho_RegionErosion.Dispose();
                ho_ImageReduced3.Dispose();
                ho_Region1.Dispose();
                ho_Region2.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_RegionAffineTrans.Dispose();
                algorithm.Region.Dispose();
            }
            catch
            {
                HTuple hv_result = GetHv_result();
                hv_result = hv_result.TupleConcat("缺陷总面积");
                hv_result = hv_result.TupleConcat(999999);
                hv_result = hv_result.TupleConcat("最大面积");
                hv_result = hv_result.TupleConcat(999999);
                result    = hv_result.Clone();

                ho_Circley.Dispose();
                ho_Circley1.Dispose();
                ho_Rectanglem.Dispose();
                ho_Region3.Dispose();
                ho_Region4.Dispose();
                ho_Region5.Dispose();
                ho_ImageAffinTrans.Dispose();
                ho_RegionDifference.Dispose();
                ho_RegionDifference1.Dispose();
                ho_ImageReduced2.Dispose();
                ho_ImageMean1.Dispose();
                ho_RegionDynThresh.Dispose();
                ho_RegionDynThresh1.Dispose();
                ho_RegionErosion.Dispose();
                ho_ImageReduced3.Dispose();
                ho_Region1.Dispose();
                ho_Region2.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_RegionAffineTrans.Dispose();
                algorithm.Region.Dispose();
            }
            finally
            {
                ho_Circley.Dispose();
                ho_Circley1.Dispose();
                ho_Rectanglem.Dispose();
                ho_Region3.Dispose();
                ho_Region4.Dispose();
                ho_Region5.Dispose();
                ho_ImageAffinTrans.Dispose();
                ho_RegionDifference.Dispose();
                ho_RegionDifference1.Dispose();
                ho_ImageReduced2.Dispose();
                ho_ImageMean1.Dispose();
                ho_RegionDynThresh.Dispose();
                ho_RegionDynThresh1.Dispose();
                ho_RegionErosion.Dispose();
                ho_ImageReduced3.Dispose();
                ho_Region1.Dispose();
                ho_Region2.Dispose();
                ho_ConnectedRegions.Dispose();
                ho_SelectedRegions.Dispose();
                ho_RegionAffineTrans.Dispose();
                algorithm.Region.Dispose();
            }
        }
示例#25
0
        private void action()
        {
            // Local iconic variables

            HObject ho_Image, ho_DotImage, ho_Region, ho_RegionDilation;
            HObject ho_RegionClosing, ho_ConnectedRegions, ho_SelectedRegions;
            HObject ho_RegionUnion, ho_RegionClosing2, ho_ConnectedRegions2;
            HObject ho_SelectedRegions5, ho_RegionIntersection, ho_RegionAffineTrans1;
            HObject ho_RegionDilation1, ho_RegionClosing1, ho_RegionOpening;
            HObject ho_ConnectedRegions1, ho_SelectedRegions1, ho_RegionTrans;
            HObject ho_Partitioned, ho_SelectedRegions2, ho_RegionIntersection1;
            HObject ho_SortedRegions1, ho_SelectedRegions3, ho_RegionTrans1;
            HObject ho_Partitioned1, ho_SelectedRegions4, ho_RegionIntersection2;
            HObject ho_SortedRegions2;


            // Local control variables

            HTuple hv_Row, hv_Column, hv_Phi, hv_Length1;
            HTuple hv_Length2, hv_HomMat2DIdentity, hv_HomMat2DRotate;
            HTuple hv_Area, hv_Row1, hv_Column1, hv_Area11, hv_Row11;
            HTuple hv_Column11, hv_Area12, hv_Row12, hv_Column12;

            // Initialize local and output iconic variables
            HOperatorSet.GenEmptyObj(out ho_Image);
            HOperatorSet.GenEmptyObj(out ho_DotImage);
            HOperatorSet.GenEmptyObj(out ho_Region);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation);
            HOperatorSet.GenEmptyObj(out ho_RegionClosing);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
            HOperatorSet.GenEmptyObj(out ho_RegionUnion);
            HOperatorSet.GenEmptyObj(out ho_RegionClosing2);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions2);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions5);
            HOperatorSet.GenEmptyObj(out ho_RegionIntersection);
            HOperatorSet.GenEmptyObj(out ho_RegionAffineTrans1);
            HOperatorSet.GenEmptyObj(out ho_RegionDilation1);
            HOperatorSet.GenEmptyObj(out ho_RegionClosing1);
            HOperatorSet.GenEmptyObj(out ho_RegionOpening);
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions1);
            HOperatorSet.GenEmptyObj(out ho_RegionTrans);
            HOperatorSet.GenEmptyObj(out ho_Partitioned);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions2);
            HOperatorSet.GenEmptyObj(out ho_RegionIntersection1);
            HOperatorSet.GenEmptyObj(out ho_SortedRegions1);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions3);
            HOperatorSet.GenEmptyObj(out ho_RegionTrans1);
            HOperatorSet.GenEmptyObj(out ho_Partitioned1);
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions4);
            HOperatorSet.GenEmptyObj(out ho_RegionIntersection2);
            HOperatorSet.GenEmptyObj(out ho_SortedRegions2);

            ho_Image.Dispose();
            HOperatorSet.ReadImage(out ho_Image, ImageFile);
            ho_DotImage.Dispose();
            HOperatorSet.DotsImage(ho_Image, out ho_DotImage, 5, "dark", 2);
            ho_Region.Dispose();
            HOperatorSet.Threshold(ho_DotImage, out ho_Region, 110, 255);
            ho_RegionDilation.Dispose();
            HOperatorSet.DilationCircle(ho_Region, out ho_RegionDilation, 2.5);
            ho_RegionClosing.Dispose();
            HOperatorSet.ClosingRectangle1(ho_RegionDilation, out ho_RegionClosing, 3, 3);
            ho_ConnectedRegions.Dispose();
            HOperatorSet.Connection(ho_RegionClosing, out ho_ConnectedRegions);
            ho_SelectedRegions.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions, out ho_SelectedRegions, (new HTuple("width")).TupleConcat(
                                         "height"), "and", (new HTuple(15)).TupleConcat(15), (new HTuple(80)).TupleConcat(
                                         80));
            ho_RegionUnion.Dispose();
            HOperatorSet.Union1(ho_SelectedRegions, out ho_RegionUnion);
            ho_RegionClosing2.Dispose();
            HOperatorSet.ClosingRectangle1(ho_RegionUnion, out ho_RegionClosing2, 30, 20);
            ho_ConnectedRegions2.Dispose();
            HOperatorSet.Connection(ho_RegionClosing2, out ho_ConnectedRegions2);
            ho_SelectedRegions5.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions2, out ho_SelectedRegions5, "area",
                                     "and", 10000, 20000);

            ho_RegionIntersection.Dispose();
            HOperatorSet.Intersection(ho_Region, ho_SelectedRegions5, out ho_RegionIntersection
                                      );
            HOperatorSet.SmallestRectangle2(ho_RegionIntersection, out hv_Row, out hv_Column,
                                            out hv_Phi, out hv_Length1, out hv_Length2);
            HOperatorSet.HomMat2dIdentity(out hv_HomMat2DIdentity);
            HOperatorSet.HomMat2dRotate(hv_HomMat2DIdentity, -hv_Phi, hv_Column, hv_Row,
                                        out hv_HomMat2DRotate);
            ho_RegionAffineTrans1.Dispose();
            HOperatorSet.AffineTransRegion(ho_RegionIntersection, out ho_RegionAffineTrans1,
                                           hv_HomMat2DRotate, "true");
            ho_RegionDilation1.Dispose();
            HOperatorSet.DilationCircle(ho_RegionAffineTrans1, out ho_RegionDilation1, 2.5);
            ho_RegionClosing1.Dispose();
            HOperatorSet.ClosingRectangle1(ho_RegionDilation1, out ho_RegionClosing1, 3,
                                           3);
            ho_RegionOpening.Dispose();
            HOperatorSet.OpeningCircle(ho_RegionClosing1, out ho_RegionOpening, 2.5);
            ho_ConnectedRegions1.Dispose();
            HOperatorSet.Connection(ho_RegionOpening, out ho_ConnectedRegions1);
            HOperatorSet.AreaCenter(ho_RegionAffineTrans1, out hv_Area, out hv_Row1, out hv_Column1);

            ho_SelectedRegions1.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions1, out ho_SelectedRegions1, "row",
                                     "and", hv_Row1 - 30, hv_Row1);
            ho_RegionTrans.Dispose();
            HOperatorSet.ShapeTrans(ho_SelectedRegions1, out ho_RegionTrans, "rectangle1");
            ho_Partitioned.Dispose();
            HOperatorSet.PartitionDynamic(ho_RegionTrans, out ho_Partitioned, 20, 20);
            ho_SelectedRegions2.Dispose();
            HOperatorSet.SelectShape(ho_Partitioned, out ho_SelectedRegions2, "height", "and",
                                     25, 48);
            ho_RegionIntersection1.Dispose();
            HOperatorSet.Intersection(ho_SelectedRegions2, ho_RegionAffineTrans1, out ho_RegionIntersection1
                                      );
            ho_SortedRegions1.Dispose();
            HOperatorSet.SortRegion(ho_RegionIntersection1, out ho_SortedRegions1, "first_point",
                                    "true", "column");
            HOperatorSet.AreaCenter(ho_SortedRegions1, out hv_Area11, out hv_Row11, out hv_Column11);

            ho_SelectedRegions3.Dispose();
            HOperatorSet.SelectShape(ho_ConnectedRegions1, out ho_SelectedRegions3, "row",
                                     "and", hv_Row1, hv_Row1 + 40);
            ho_RegionTrans1.Dispose();
            HOperatorSet.ShapeTrans(ho_SelectedRegions3, out ho_RegionTrans1, "rectangle1");
            ho_Partitioned1.Dispose();
            HOperatorSet.PartitionDynamic(ho_RegionTrans1, out ho_Partitioned1, 20, 1);
            ho_SelectedRegions4.Dispose();
            HOperatorSet.SelectShape(ho_Partitioned1, out ho_SelectedRegions4, "height",
                                     "and", 25, 48);
            ho_RegionIntersection2.Dispose();
            HOperatorSet.Intersection(ho_SelectedRegions4, ho_RegionAffineTrans1, out ho_RegionIntersection2
                                      );
            ho_SortedRegions2.Dispose();
            HOperatorSet.SortRegion(ho_RegionIntersection2, out ho_SortedRegions2, "first_point",
                                    "true", "column");
            HOperatorSet.AreaCenter(ho_SortedRegions2, out hv_Area12, out hv_Row12, out hv_Column12);

            if (HDevWindowStack.IsOpen())
            {
                HOperatorSet.ClearWindow(HDevWindowStack.GetActive());
            }
            if (HDevWindowStack.IsOpen())
            {
                HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());
            }
            if (HDevWindowStack.IsOpen())
            {
                HOperatorSet.SetColor(HDevWindowStack.GetActive(), "blue");
            }
            if (HDevWindowStack.IsOpen())
            {
                HOperatorSet.DispObj(ho_SortedRegions1, HDevWindowStack.GetActive());
            }
            if (HDevWindowStack.IsOpen())
            {
                HOperatorSet.DispObj(ho_SortedRegions2, HDevWindowStack.GetActive());
            }

            ho_Image.Dispose();
            ho_DotImage.Dispose();
            ho_Region.Dispose();
            ho_RegionDilation.Dispose();
            ho_RegionClosing.Dispose();
            ho_ConnectedRegions.Dispose();
            ho_SelectedRegions.Dispose();
            ho_RegionUnion.Dispose();
            ho_RegionClosing2.Dispose();
            ho_ConnectedRegions2.Dispose();
            ho_SelectedRegions5.Dispose();
            ho_RegionIntersection.Dispose();
            ho_RegionAffineTrans1.Dispose();
            ho_RegionDilation1.Dispose();
            ho_RegionClosing1.Dispose();
            ho_RegionOpening.Dispose();
            ho_ConnectedRegions1.Dispose();
            ho_SelectedRegions1.Dispose();
            ho_RegionTrans.Dispose();
            ho_Partitioned.Dispose();
            ho_SelectedRegions2.Dispose();
            ho_RegionIntersection1.Dispose();
            ho_SortedRegions1.Dispose();
            ho_SelectedRegions3.Dispose();
            ho_RegionTrans1.Dispose();
            ho_Partitioned1.Dispose();
            ho_SelectedRegions4.Dispose();
            ho_RegionIntersection2.Dispose();
            ho_SortedRegions2.Dispose();

            Area = new HTuple();
            Area = Area.TupleConcat(hv_Area11);
            Area = Area.TupleConcat(hv_Area12);
        }