2011-04-15 2 views
1

나는 간단한 모양의 집합을 가지고 있으며 (다음 그림 참조) 나는 필기 모양을 인식하고 그것이 어떤 모양을 그려야 하는지를 알고 싶다.간단한 필기 모양을 인식하는 방법?

간단한 알고리즘이 있습니까? 아니면 어떤 오픈 소스 lib?

나는 작업이 간단하므로 OpenCV와 같이 너무 복잡한 라이브러리를 사용하지 않습니다.

감사합니다.

shapes

+4

이것은 "간단한 작업"이 아닙니다. 특히 직접 작성하려는 경우 연산. 그것을 빨아 들이고 OpenCV 사용법을 배우면 어렵지 않습니다. –

답변

0

이것은 본질적으로 라인 감지
그것은 단지 직선 모양을 위해 작동하고, 더 간단한 의미가없는 것입니다.
그림에 k 개의 선분이 있다고 가정하고 k- 평균 알고리즘을 사용하여 점을 선으로 집계하십시오.
먼저 포인트를 임의로 클러스터로 나눕니다.
각 클러스터에 대해 점이 근사하고있는 선을 계산하십시오. 포인트까지의 모든 거리의 합이 최소 인 라인
아웃 라이어 (라인에서 가장 먼 포인트)는 더 잘 맞는 다른 클러스터에 재 할당해야합니다. 당신이 하나를 도달 할 경우, 당신은 당신이 그 라인의 교차점을 계산 등을 추출 할 수 있습니다 K
의 다른 값을 시도 할 수 원하는 임계 값에 도달하지 않는 경우 특정 임계 값까지
를 반복 마지막 단계는
에 도달 불규칙한 모양을 정규 모양과 일치시키는 데 필요한 속성.
당신은 사각형으로부터 삼각형을 그리고 평행 사변형으로부터 사각형을 이런 식으로 말할 수 있습니다. 그러나 그것은 매우 복잡합니다.
이 "알고리즘"은 구불 구불 한 선, 점선 또는 선이 교차하지 않는 모양에서 작동하므로 상당히 견고합니다.

+0

오픈 소스 라이브러리가 있습니까? – iCoder

1

그것은 옛날 프로젝트하지만 this 당신이 찾고있는 무슨 라인을 따라 할 수있다.

This one에는 OpenCV가 필요하지만 의견 작성자가 지적했듯이 배우는 것은 가치가 있습니다.

0

나는 C 나 C++로하는 법을 모르지만, 알고리즘은 간단하다. 성공 비율은 모양에 추가 된 각 각도에 따라 줄어들지 만 위에 제시 한 기본 모양을 인식하는 데는 좋지만 많지는 않습니다.

  1. 코너 인식. 모든 종류의 모서리를 인식해야하며 쉽게 할 수 있습니다. 놀라운 모양 인식 알고리즘을 찾고 싶지 않다면 빠르고 간단하게 하나의 선에서 오는 픽셀 그룹을 찾고 반대쪽에서 끝나지 않게하십시오. 아마도 약 10 ~ 20 픽셀 블록에서이 작업을 수행 할 수 있습니다. 두 번째 필기 모양의 하단 모서리와 같이 일부 셰이프의 모퉁이가 너무 작 으면 더 많을 수 있습니다. 그러나 블록 크기가 클수록 작은 크기를 감지 할 수 있습니다.
  2. 오류 검사. 우선, 코너가 3 개 미만이지만 0보다 큰 것을 발견하면 실수가 있음을 압니다. 그렇지 않고, 0을 찾으면 다른 알고리즘을 사용하여 원 또는 타원인지를 판별하고 그 결과를 리턴 할 수 있습니다. 네가하지 않았다면, 계속 나아가 라.
  3. 라인 교정. 먼저, 모서리가 연결된 순서 (쉬운)를 결정합니다. 그런 다음 X와 Y 좌표의 차이를 비교하고 두 가지 차이 중 가장 작은 것을 제거하거나 선이 특정 임계 값을 초과하면 대각선으로 가정하여 선을 직선화합니다.
  4. 코너 일치. 일단 각도 및 거리와 같은 선 특성을 일치시킴으로써 모양을 쉽게 식별 할 수 있습니다 (예 : 어느 시점에서 시작하여 수평 - 수직 - 수평 - 수직을 찾을 수 있으며 사각형 또는 사각형을 사용할 수 있음을 알고 있습니다. 길이를 비교하여 구별).

물론 은 완전히 일 수는 없습니다. 두 번째 예제 모양이 기울어 진 평행 사변형 또는 기울어 진 사각형 (또는 다이아몬드 또는 직사각형)인지 여부도 알 수 없습니다.

+0

코너 감지가 그렇게 간단하지 않다는 느낌이 들었습니다. 대각선 (모서리가 없음)이 있고, 왼쪽에서 상자로 들어가서 아래쪽을 빠져 나왔다면 어떨까요? –

+0

나는 그것이 단순화되었다는 것을 인정하지만 일반적으로 대각선과 모서리의 차이를 쉽게 알 수있다. – Ryan

관련 문제