티스토리 뷰

728x90

1. 개요

 사천성 게임을 사진으로 가져와 분석하고 사천성을 해결하는 프로그램입니다. 사천성 이미지는 거상의 작업장 이미지를 사용하였으며 이후 거상 작업장 메크로 프로젝트에 사용할 예정입니다.


개인적인 요청인해 사천성 입력 사진 파일도 올립니다.

이미지 추출 및 데이터화 소스 코드 : get_Sichuan_Data.py

입력 데이터 : img_sichuan.zip

사천성 알고리즘 통합 소스 코드 : Sichuan.py



2. 이미지 추출

 우선 기존 사천성 이미지 입니다.


 해당 프로젝트에서 이미지를 다루기 위해 opencv를 사용하였습니다.  그런데 openve로 불러온 이미지 파일을 출력해보면 파란 빛을 띱니다. 이 부분은 정확인 이유를 잘 모르겠습니다. 아마 제가 잘못한 것이 있을 것이라 생각합니다.

 

크기를 자르고 색상을 반전시켜줍니다.

 흑백화와 GaussianBlur 필터를 씨워줍니다. GaussianBlur을 적용하는 이유는 책과 색의 경계선을 찾기 위해서 입니다. 정확한 원리와 사용 이유에 대해선 저도 모르겠습니다. 아마 포토샵을 사용하실 줄 아시는 분은 잘 알고 계실거라고 생각합니다.


 다음은 픽셀에 대한 값을 비교하여 입력한 threshold값보다 작을 경우 색을 모두 죽여버립니다. 


 살아 남은 픽셀들의 집합에 사각형 틀을 입혀 줍니다... 예상으로는 6 * 4, 총 24개가 나와야 하지만 더 많이 출력이 됩니다.


 시각적으로 확인하기 위해 원본 사진에 그려봅니다. 확인 후에는 주석 처리 합니다.

 닭에게 먼가 이상한게 있네요... 사과 역시 무언가가 잡힙니다. 저것들을 제거해야하는데 저는 사각형의 넓이를 이용하여 제거하겠습니다. sort는 데이터의 순서를 찾기위해 하였고 x좌표를 기준으로 정렬하였습니다.

이쁘게 잘됬네요. ㅎㅎ


  다음은 그림들이 나타내고 있는 배열의 크기를 구하고 각각의 그림들을 배열에 집어 넣는 코드입니다. 그림과 종류를 나타내기 node라는 클레스를 정의 하였습니다.



 마지막으로 이미지끼리 비교하여 같은 이미지에게는 같은 번호를 주고 이미지가 나타내고 있는 2차원 배열을 구하는 부분입니다.


 맨 위의 첨부 파일의 소스코드는 아래 사진과 같이 숫자가 아닌 문자, 그리고 '*'로 테투리까지 표현하도록 하였습니다.



3. 사천성 알고리즘

 빠르게 구현한다고 최적화는 되어 있지 않습니다. C++로 알고리즘 구현하다가 파이썬으로 구현하려고 하니 많이 어렵더라구요. 우선 결과를 보겠습니다. 

  

왼쪽 사진은 입력이며 오른쪽은 사진을 출력입니다. 사천성을 푸는 많은 해답 중 먼저 발견된 해답이며 (1,2), (3,4)....(79,80)이 짝입니다.


소스코드는 3개의 함수로 구현되어 있으며 설명은 아래와 같습니다.

checkContent 함수 : 컨텐츠 같은 컨텐츠를 찾는 함수입니다. 2번까지 방향을 꺽을 수 있도록 구현하였습니다.

checkLoop 함수 : 주어진 시작 좌표부터 문제를 해결해 나갑니다. 만약 성능 개선을 해야한다면 이 함수를 수정하시면 됩니다.

getSichuanOrder 함수 : 알고리즘 시작 지점을 다르게 하여 순서를 찾을 수 있도록 합니다. 중간에 해답을 찾으면 멈춥니다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함