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