Exemplo n.º 1
0
        public static void tansRegions(List <ViewWindow.Model.ROI> regions, Model.MatchingResual matchResual, out HObject modelRoiTrans)
        {
            //regionTrans = new List<ViewWindow.Model.ROI>();
            //roiParameterTrans = new List<ViewWindow.Model.RoiData>();

            List <ViewWindow.Model.RoiData> m_RoiData;

            HObject ho_ModelRoiUnion;
            //HObject ho_ROIs, ho_modelROI;

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

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

            try
            {
                //

                //ho_modelROI.Dispose();

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

                //}

                //regionTrans.Add()
            }
            catch (Exception ex)
            {
                //regionTrans = null;
                ho_ModelRoiUnion.Dispose();
            }
        }
Exemplo n.º 2
0
        public static void tansRoiData(List <ViewWindow.Model.ROI> modelRegion, List <ViewWindow.Model.ROI> regions, Model.MatchingResual matchResual, out List <ViewWindow.Model.RoiData> roiParameterTrans, out HObject roiTrans, out HObject arrow)
        {
            roiParameterTrans = new List <ViewWindow.Model.RoiData>();

            List <ViewWindow.Model.RoiData> m_RoiData;

            HObject ho_ModelRoiUnion;

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

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

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

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

                ho_ModelRoiUnion.Dispose();

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

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

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

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

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

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

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

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

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

                        m_modelRoiTrans.Dispose();

                        break;

                    case "Rectangle2":

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

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

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

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

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

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

                        double m_phi = 0.0;

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

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

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

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

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

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

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

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

                        m_modelRoiTrans.Dispose();
                        break;

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


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

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

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

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


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

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

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


                //regionTrans.Add()
            }
            catch (Exception ex)
            {
                //regionTrans = null;
                ho_ModelRoiUnion.Dispose();
            }
        }