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)); }
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); }
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(); }
/// <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); } }
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); }
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); } }
/// <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"); } }
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); }
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); }
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"); } }
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; }
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(); } }
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(); } }
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(); } }
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(); } }
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); }
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; }
/// <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 } }
//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(); } }
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(); } }
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(); } }
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); }