문제

라이브 웹캠에서 찍은 이미지가 있으며 이미지의 특정 객체를 감지하고 해당 부분을 추출하여 추가 처리를 수행 할 수 있습니다.

구체적으로, 이미지는 게임 보드의 것이 될 것입니다.이 질문의 목적 상 스도쿠 게임 보드라고 가정 해 봅시다.

나의 초기 접근 방식은 대조적 인 영역을 찾고 거기에서 해결하는 것이었지만, 나는 많은 잠재적 인 가장자리 (많은 잘못된)와 실제로 원하는 것이 어떤 것인지 알아내는 방법에 대한 실질적인 단서가없는 것 같습니다. !

이미지의 관련 부분을 찾고 추출하는 방법에 대한 알고리즘, 라이브러리, 코드 샘플 또는 밝은 아이디어가 있습니까?

도움이 되었습니까?

해결책

무료를 사용하십시오 aforge.net 이를위한 이미지 처리 라이브러리. 연주 할 멋진 물건이 많이 있습니다.

다른 팁

이미지에서 필터 작업 및 마스크를 수행해야합니다.

간단한 방법이 없다고 생각합니다 이미지에서 객체를 가져 오려면 에지 감지 알고리즘을 사용하고 클리핑하고 유효한 개체/이미지의 기준을 설정해야합니다.

이미지 임계 값을 사용하여 객체를 감지 할 수도 있습니다. 아래 이미지 처리 라이브러리를보고 싶을 수도 있습니다.

  1. 필터 C, C ++, C#, Visual Basic .NET, Delphi, Python 용 API
  2. http://www.catenary.com/
  3. cimg 위의 라이브러리보다 풍부하지만 C ++로 작성되었습니다.

(가능한 많은 것) 중 하나는 다음과 같습니다.

  1. 주어진 이미지에서 직선 (가장자리 등)을 "얻거나 계산하는 필터를 찾으십시오.

  2. 이제 모든 라인 (Xstart, Ystart & Xend, Yend)의 컬렉션 (배열)이 있습니다. 좌표에서 모든 라인 길이를 쉽게 계산할 수 있습니다.

  3. 이제 이미지 내부에서 항상 "1 개의 큰 제곱 / 사각형"을 기대할 수 있다는 점을 고려할 때, Wanted-Sudoku-Rectangle 영역을 찾고 계산하기가 매우 쉽습니다. 처리.

편집 : 이러한 종류의 문제는 항상 어려운 문제가 있지만 동시에 흥미 롭습니다 :)

당신은 그것을 사용해 볼 수 있습니다 허프 변환.

코너 탐지기 (Harris Detector는 훌륭함)를 사용하여 스도쿠 그리드의 교차로와 모서리를 찾는 것으로 시작합니다.

그런 다음 해당 포인트를 사용하여 이미지 설명을 수행하여 이미지를 최대한 직사각형으로 만들도록 이미지를 변환합니다. 이제 각 정사각형을 찾아 OCR을 찾는 데 어려움이 없어야합니다.

이미지 정류는 단순하지 않으며 많은 수학을 수반합니다.

독서를 할 준비를하십시오 :)

게임 보드의 이미지가 이미 직사각형에 가까운 경우 물론 정류 부분을 건너 뛰고 코너 포인트를 직접 사용하여 OCR의 제곱을 찾을 수 있습니다.

많은 사람들이 신경망을 사용하도록 제안했습니다. 나는이 문제에 신경망을 던지는 것이 완전히 필요하지 않다고 확신한다. 객체의 정의가 모호한 곳에서 물체를 분류 해야하는 경우 NNS는 (때로는) 좋습니다. "이미지에서 자동차 찾기"는 자동차가 매우 다르게 보일 수 있지만 일부 기능이 있기 때문에 신경망에 사용할 수있는 문제입니다. 따라서 충분한 데이터가 주어지면 자동차를 감지하기 위해 NN을 훈련시킬 수 있습니다. 이 문제에서 당신은 매우 규칙적이고 항상 거의 동일하게 보이므로 NN은 더 쉽게 또는 더 나은 것을 만들지 않습니다.

사용 Aforge ColorFiltering

C#에 제공되는 많은 필터링 방법이 있습니다. 주로 나는 Aforge 필터를 선호합니다.이 목적을 위해 필터가 적습니다.

* ColorFiltering
* ChannelFiltering
* HSLFiltering
* YCbCrFiltering
* EuclideanColorFiltering

여기를 봐

보세요:https://github.com/dajuric/accord-net-extensions

라이브러리는 Free Aforge.net 및 Accord.net 라이브러리를 "조인"하고 이미지 프로세싱 및 객체 추적-알코리즘을 추가합니다. 샘플 포함 :)

먼저 Bold Line 교차로를 찾아 등록 표시로 사용할 수 있습니다.

이것은 좋은 출발이 될 것입니다.

  • 그들은 꽤 균일하게 형성되었습니다
  • 당신은 얼마나 많은지 알고 있습니다
  • 당신은 그들이 서로 관련되어야하는 곳을 알고 있습니다.
  • 척도 변형을 견딜 수 있습니다

그래서:

  1. 에지 필터를 적용하십시오
  2. 이상적인 것에 대한 마스크*를 스캔하십시오 + 이미지를 가로 질러 보이고, 좋은 일치하는 모든 것을 녹음해야합니다.
  3. 서로에 대한 위치에 따라 기대치에 가장 적합한 세트를 선택하십시오.
  4. 이제 숫자가 어디에 있어야하는지 알 수 있으므로 쉽게 추출 할 수 있습니다.

*보다 정교한 솔루션은 교차로를 인식하기 위해 마스크 대신 신경 그물을 사용하는 것입니다. 아마도 당신이 아마도 숫자의 OCR에 하나를 사용할 것이기 때문에 그것은 그만한 가치가있을 것입니다.

다른 아이디어를 거부하지 않으면 서 1 단계는 이미지 회전을 감지해야합니다. 각 지점에서 로컬 그라디언트를 결정하고 히스토그램을 만들어이를 수행 할 수 있습니다. 여기에는 90도 오프셋에 4 개의 주요 구성 요소가 있습니다. 이상적으로, 이것들은 0, 90, 180 및 270이지만, 그렇지 않은 경우 이미지를 회전시켜야합니다. 예를 들어 샘플 이미지에서 약 8도 CW에 대한 회전으로 시작해야합니다.

Google을 위해해야합니다 캠 시프트 또는 블로브 추적 또는 입자 필터. 그들은 모두 당신의 문제에 유용합니다. 그리고 그들 대부분은 OpenCV와 함께 배송되며 C# 래퍼 aforge.net입니다. YouTube에서 작동 방식을 보여주는 멋진 데모를 찾을 수 있습니다.

행운을 빕니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top