2011-09-23 5 views
2

일치하는 3 개의 게임 스크린 샷 (예 : http://www.gameplay3.com/images/games/jewel-quest-ii-01S.jpg)이 있으면 격자 (격자가있는 테이블)의 바운드 상자를 찾는 올바른 방법은 무엇입니까? 보드는 스크린 샷에서 볼 수있는 것처럼 완벽한 사각형 일 필요는 없지만 각 셀은 완전히 사각형입니다.이미지의 격자 찾기

몇 가지 게임을 시도했는데 그리드 내부의 타일을 향상시키기 위해 수행 할 수있는 게임마다 이미지 변환이 있음을 발견했습니다 (예 :이 게임에서 V 채널을 HSV 색상 공간). 그런 다음 타일을 겹쳐서 겹치게하여 이미지의 가장 큰 윤곽을 찾아서 바운드 박스를 얻을 수 있습니다.

위의 접근법의 문제점은 모든 게임 (또는 동일한 게임 내부의 레벨)이 타일을 유지하기 위해 다른 변형이 필요할 수 있다는 것입니다. 그리하여 질문은 - 그리드 또는 그리드의 라인 내부에서 타일을 향상시키는 표준적인 방법이 있습니까 (나는 Hough 변환을 사용하여 라인을 찾으려했지만, 그리드는 눈에 잘 보이지만 Hough는 그것을 찾지 못합니다) ?

또한 데스크톱 화면 캡처 대신 전화 카메라를 사용하여 스크린 샷을 얻은 경우 어떻게해야합니까? 필자의 경험에 따르면, 캡쳐 된 이미지는 조명에 의존하는 덜 정의 된 색상을 가지며, 또한 화면 앞쪽에 전화기를 정확히 놓을 방법이 없기 때문에 조금 왜곡 될 수 있습니다.

답변

2

나는 스크린 샷에 대한 다음과 같은 방식으로 갈 것 :

  1. 것은 예를 들어 에지 검출기와 같은 영리한를 사용하여 이미지의 모서리를 찾을 수 있습니다.
  2. 호프 라인 변환을 수행합니다. 이것은 가장자리 이미지에서 아주 잘 작동합니다.
  3. 타일의 크기에 대한 정보가있는 경우 격자의 공간 모델을 사용하여 위양성 선을 제거 할 수 있습니다 (예 : 이미지의 x/y 축에 작은 각을 갖는 선 및/또는 거리/타일 ​​테두리의 각도. 라인 옆에 /에서 영리한에 의해 발견 가장자리를 찾고에 의해 발견 된 무릎 라인에서
  4. 그것을 식별 타일 테두리.
  5. 허프의 구현을 사용 않았다 변환

? 당신이 어떻게했는지 전처리 이미지?

또 다른 방법은 일종의 기계 학습 접근법을 사용하는 것입니다. OpenCV에서는 Haar와 같은 기능을 사용할 수 있습니다. 기능처럼 하르을 사용하여 얼굴 인식에 대한 예는 여기에서 찾을 수 있습니다 :

OpenCV Haar Face Detector example

또 다른 기계 학습 접근 방식은 지원 벡터 기계와 함께 지향 그라디언트 (돼지) 방식의 히스토그램을 따라하는 것 (SVM)을 . 예는 여기에 있습니다 : 나는 라인을 찾기 위해 이력서 :: HoughLinesP를 사용하거나 너무 많은있다

Hog detection

+0

:

HOG example

당신은 돼지 감지에 대한 일반적인 정보를 찾을 수 있습니다 선택할 수있는 선 (대부분의 이미지를 포함 할 수 있음) 또는 그리드의 선을 찾을 수 없습니다. Canny와 HoughLinesP의 매개 변수를 사용하여 위양성의 수를 줄일 수 있지만 이러한 매개 변수는 다른 게임에는 좋지 않을 것입니다.보드 크기 나 타일 수에 대한 정보가 없기 때문에 쉽게 제거 할 수있는 방법이 없습니다. –

+0

또한 나는 4 단계를 완전히 이해하지 못한다고 생각합니다. –

+0

네 번째 단계에 관하여 : 당신이 canny 이미지에서 hough line 변환을 수행하면 검색중인 타일 사이의 실제 테두리보다 긴 라인이 생길 수 있습니다. 타일의 실제 범위를 찾는 한 가지 방법은 canny edge detector의 응답을 위해 발견 된 hough line을 따라 검색하는 것입니다. – tisch