Пример #1
0
        /// <summary>
        /// 원 검색을 시작합니다.
        /// </summary>
        public void Run()
        {
            try
            {
                if (InputImage == null)
                {
                    throw new Exception("Input image first.");
                }

                if (m_CircleDetect.InputPointList != null)
                {
                    m_CircleDetect.InputPointList.Clear();
                }
                else
                {
                    m_CircleDetect.InputPointList = new List <Point>();
                }

                var interval = ((Setting.EndAngle - Setting.StartAngle + 360) % 360) / (Setting.CaliperCount - 1);
                m_Collection.Clear();

                for (int i = 0; i < Setting.CaliperCount; i++)
                {
                    var edge          = new CvsEdgeSetting();
                    var currentRadian = ((Setting.StartAngle + i * interval) % 360) * Math.PI / 180;
                    var v             = this.GetPointByRotation(new Point(Setting.Radius, 0), currentRadian, new Point()) - new Point(-m_Setting.Radius, -m_Setting.Radius);
                    edge.Region.Pose = new CvsPose(currentRadian + (m_Setting.IsOutwardDirection ? -Math.PI / 2 : Math.PI / 2), v.X, v.Y);
                    m_Collection.Add(edge);
                }

                foreach (var edge in m_Collection)
                {
                    //주어진 설정 값으로 각 이미지 자르고
                    var cropImage  = edge.Region.Crop(m_InputImage);
                    var edgeDetect = edge.GetToolParams();
                    edgeDetect.DetectImage = cropImage;
                    //에지 찾기
                    edgeDetect.Detect();
                    //에지 있으면 선 찾기 위한 점 집합에 추가,
                    if (edgeDetect.Edge != null)
                    {
                        m_CircleDetect.InputPointList.Add(edge.Region.Pose.GetPointByOrigin(edgeDetect.Edge.X, edgeDetect.Edge.Y));
                    }
                }
                //선 찾기
                m_CircleDetect.Detect();

                //결과 없으면 예외
                if (Circle == null)
                {
                    throw new Exception("Circle not found.");
                }

                //결과 오버레이 생성
                Overlay = this.CreateGeometry();

                Exception = null;
            }
            catch (Exception err)
            {
                Overlay   = null;
                Exception = err;
            }
        }