2010-07-03 6 views
2

나는 유로 머니 지폐 이미지를 가지고있다. 지폐는 이미지 에 완전히 포함되어 있으며 대부분 평면 (예 : 변형이 거의 없음)이며 원근 왜곡이 작습니다 (예 : 청구서 위에 상당히 찍은 이미지).이미지에서 지폐를 인식하는 방법은 무엇입니까?

이제 이미지 인식의 전문가가 아닙니다. 나는 다음과 같은 달성 싶습니다.

  • 돈 법안 (그래서
  • 그림 방향 밖으로 이미지의 나머지 부분에서 소음에서 법안을 "잘라"수에 대한 BoundingBox의 찾기

나는 사전 처리 이러한 두 단계로 생각하지만, 어쩌면 하나는 위의 두 가지 않고 다음 단계를 수행 할 수와 내가 읽고 싶은 :..

  • 청구서 일련 번호
  • 청구서 값이 있습니다.

OpenCV를 사용하는 것이 가능해야한다고 가정합니다. 나는 그것을 올바르게 접근하는 방법을 모르겠습니다. 에지 디텍터에서 FaceDetector와 같은 방법이나 hough 또는 윤곽 검출기를 선택합니까?

자료를 읽으려는 다른 힌트에 감사드립니다.

+0

컴퓨터 비전 질문을하기 때문에 몇 가지 샘플 이미지를 게시하는 것이 좋습니다. –

답변

1

호우는 훌륭하지만이 작동 할 수

조금 비싼 될 수 있습니다

-USE 임계 값 또는 검소한 이미지의 가장자리를 찾을 수 있습니다.

- 그 다음 등고선을 식별하기 위해 cvFindContours를 선택하고 직사각형을 감지하십시오. opencv 배포판의 squares.c 예제를 확인하십시오. 기본적으로 윤곽선의 폴리곤 근사값은 4 점이며이 점들 사이의 평균 각도는 90도에 가깝습니다. 다음은 squares.py 예제 (동일한 내용이지만 파이썬에서는 P입니다)의 코드 스 니펫입니다.

..some pre-processing 
    cvThreshold(tgray, gray, (l+1)*255/N, 255, CV_THRESH_BINARY); 

     # find contours and store them all as a list 
     count, contours = cvFindContours(gray, storage) 

     if not contours: 
      continue 

     # test each contour 
     for contour in contours.hrange(): 
      # approximate contour with accuracy proportional 
      # to the contour perimeter 
      result = cvApproxPoly(contour, sizeof(CvContour), storage, 
       CV_POLY_APPROX_DP, cvContourPerimeter(contour)*0.02, 0); 
      res_arr = result.asarray(CvPoint) 
      # square contours should have 4 vertices after approximation 
      # relatively large area (to filter out noisy contours) 
      # and be convex. 
      # Note: absolute value of an area is used because 
      # area may be positive or negative - in accordance with the 
      # contour orientation 
      if(result.total == 4 and 
       abs(cvContourArea(result)) > 1000 and 
       cvCheckContourConvexity(result)): 
       s = 0; 
       for i in range(4): 
        # find minimum angle between joint 
        # edges (maximum of cosine) 
        t = abs(angle(res_arr[i], res_arr[i-2], res_arr[i-1])) 
        if s<t: 
         s=t 
       # if cosines of all angles are small 
       # (all angles are ~90 degree) then write quandrange 
       # vertices to resultant sequence 
       if(s < 0.3): 
        for i in range(4): 
         squares.append(res_arr[i]) 

- 특수 MinAreaRect2이 (주어진 2D 지점 세트에 대한 최소한의 영역의 사각형을 접하는을 검색해,), 사각형의 경계 상자를 얻을. 테두리 상자 점을 사용하면 각도를 쉽게 계산할 수 있습니다.

opencv 디렉토리에서 samples/c/아래의 C 버전 squares.c를 찾을 수도 있습니다.

0

OpenCV의

은 빨리해야하고 내 호우가 직사각형 법안 모양 (각도)를 찾기 위해 변환 한 후 사각형/원을 찾아 사용에 좋은 book가 더 복잡한 검색을위한

쉽게 Haar 분류 자와 같은 것 - 이미지의 지저분한 구석을 찾아야하는 경우?

0

또한 OpenCV의 템플릿 일치 방법을 살펴볼 수도 있습니다. 다른 옵션은 SURF 기능을 사용하는 것입니다. 그들은 당신이 기호 & 크기, 각도 등에서 불변하게 검색 할 수 있습니다.

관련 문제