티스토리 뷰
Original Post
http://aishack.in/tutorials/sudoku-grabber-opencv-plot/
나의 작은 프로젝트를 위한 번역본
OpenCV를 활용한 sudoku solver. (quick and fun proejct)
시작에 앞서
Recognizing Sudoku Puzzle
우리가 제일먼저 해야할 것은 퍼즐을 인지하는것이다. 그런데, 이건 절대 쉬운일이 아니다. 다음을 고려해보자.
- 스도쿠 안의 작은 상자의 선은 가늘며, 그래서 인지하기 힘들 수 있다.
- 선이 완전하지 않을 수 있다.
- 스도쿠의 큰 상자는 다른 요소들과 유사한 색을 가지고 있어 구별이 필요하다.
이 모든 것들을 해소하려면, 다음과 같은 가정이 필요하다.
1 "퍼즐은 이미지에서 가장 큰 원소이다."
이건, 꽤 안전한 가정인데, 왜냐하면 여러분이 해당 프로그램을 사용할 때 스도쿠퍼즐을 사진에서 작게나오게 찍을리가 없기 때문이다.
또 다른 가정이 하나 더 필요한데,
2 "퍼즐의 큰 상자 테두리가 항상 두꺼운 검은색이여야만한다."
위의 사진에서, 3*3 상자또한 굵은 선을 가지고 있다. 이건 꼭 필수사항은 아닌데, 그냥 젤 바깥선은 반드시 굵은 선을 가지고 있어야만 한다.
step 1. Segmenting the Sudoku Puzzle
이 작업뒤에는 우린 다음과 같은 검은 퍼즐 사진을 얻을 수있다.
물론, 이 작업엔 또 다른 전처리 작업이 포함되긴한다. noise를 줄인다던가, 어떤 morphological operation이라던가, 등등.
이 부분에 대해선 구현할 때, 좀 더 디테일하게 살펴볼 예정이다.
step 2. Detecting the puzzle blob
아직 우린 이미지에서 선을 감지하진못한다. 이 위 이미지에는 이상치들이 많은데, 퍼즐 바깥에는 위와 오른쪽에 글자들과 숫자들이 있다. 그리고 또 다른 선들이 있다.
그러므로 우리는, 여기서, "퍼즐은 이미지에서 가장 큰 원소다."라는 가정이 사용한다. 우리는 이미지내의 모든 object들의 크기를 검사한다. 그리고, 퍼즐의 상자만이 사진에서 젤 큰 면적을 차지한다.
가장 큰 영역을 차지하는 object를 선택하게되면, 우린 다음과 같은 결과물을 얻을 수 있다.
자, 다음에는 이 noise 없는 이미지에서 선들을 인식시켜 볼것이다.
우선, 여기까지 구현을 다음 포스트에서 볼수있다.
post 2. Grid detection 바로가기
step 3. Locating the puzzle
수식으로 선을 반환하는데, 이 단계를 거치고나면, 정확히 어디에 선이 위치하고 있는지 알 수 있게된다.
이 선들이 다필요한건아니고, 각 꼭지점들의 선만을 가져갈거다. 그리고 그건 수식으로 표현한 선이기 때문에, 교차점 또한 구할 수 있다. 그리고 이건 퍼즐의 네 꼭지점이 될것이고. 우린 정확히 퍼즐이 어디에 위치하고 있는지 알게된다.
우리의 예제파일로는, 다음과 같은 결과를 얻게된다.
네 꼭지점이 꼭 정확하지는 않다. 하지만 거의 근사하고, 이 정도로 충분하다.
step 4. fixing the image and accessing each cell
post 3. Extracting the grid
'IoT 과정' 카테고리의 다른 글
sudoku grabber 3 Extracting the grid (0) | 2017.11.24 |
---|---|
sudoku grabber 2 Grid detection (0) | 2017.11.23 |
임베디드 관련 블로그 (0) | 2017.09.08 |
라즈베리파이와 개발pc와의 nfs 설정 및 tftp등등 (0) | 2017.09.07 |
LVM & RAID (0) | 2017.07.19 |
- Total
- Today
- Yesterday
- javascript
- arena simulation
- 아레나시뮬레이션
- flutter
- 이산수학
- 엄청난 인내심과 시뮬레이션을 위한 아레나 툴
- 아레나 시뮬레이션
- 시뮬레이션
- 명제논리
- rosen
- 대규모 시스템 설계 기초
- 이산 수학
- 아레나
- 그라파나
- Simulation
- Arena
- paul wilton
- 데이터 중심 애플리케이션 설계
- 백준
- 자바스크립트
- 조합 코딩
- Discrete Mathematics
- 자바스크립트 예제
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- Trie
- 로젠
- 최단경로 알고리즘
- grafana cloud
- Propositional and Predicate Logic
- beginning javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |