/// <summary> /// 에지를 찾는 도구 클래스를 생성합니다. /// </summary> public CvsEdgeDetectTool() { Setting = new CvsEdgeSetting { OriginX = 20, OriginY = 20, ProjectionLength = 30, SearchLength = 100, ContrastThreshold = 5, HalfPixelCount = 2 }; }
/// <summary> /// 선을 찾기 위한 설정 값 클래스를 생성합니다. /// </summary> public CvsLineSetting() { LinePose = new CvsPose(); m_LineDetect = new CvsLineDetect(); m_EdgeSetting = new CvsEdgeSetting(); }
/// <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; } }
/// <summary> /// 선 검색을 시작합니다. /// </summary> public void Run() { try { if (InputImage == null) { throw new Exception("Input image first."); } if (m_LineDetect.InputPointList != null) { m_LineDetect.InputPointList.Clear(); } else { m_LineDetect.InputPointList = new List <Point>(); } var interval = Setting.SegmentLength / Setting.CaliperCount; m_Collection.Clear(); for (int i = 0; i < Setting.CaliperCount; i++) { var edge = new CvsEdgeSetting(); edge.Region.Pose = new CvsPose(0, (i + 0.5) * interval, 0); 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_LineDetect.InputPointList.Add(edge.Region.Pose.GetPointByOrigin(edgeDetect.Edge.X, edgeDetect.Edge.Y)); } } //선 찾기 m_LineDetect.Detect(); //결과 없으면 예외 if (Line == null) { throw new Exception("Line not found."); } //결과 오버레이 생성 Overlay = this.CreateGeometry(); Exception = null; } catch (Exception err) { Overlay = null; Exception = err; } }
/// <summary> /// 원을 찾기 위한 설정 값 클래스를 생성합니다. /// </summary> public CvsCircleSetting() { CirclePose = new CvsPose(); m_CircleDetect = new CvsCircleDetect(); m_EdgeSetting = new CvsEdgeSetting(); }