ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 좌표 가져오기
    유니티/PathFinder_3Cushion 2021. 4. 10. 00:14

    먼저 당구대 영상에서 좌표를 가져와야한다.

    쿠션이 되는 당구대 영역과 공들의 좌표를 OpenCV를 이용해서 탐지하려고 한다.

    당구대회의 캡쳐화면을 이용해봤다.

     

    좌표 탐지에 쓰인 당구대와 공들 이미지

     

    당구대가 사각형영역이다보니 외곽선을 탐지하는 방법이 먼저 떠올랐다.

     

    그러려면 위의 이미지를 가지고 아래의 과정을 거쳐야한다.

    이진화 -> 외곽선탐지 -> 근사 -> 사각형, 원검출 -> 좌표가져오기

     

    로컬에서 하기 좀 그래서 구글 코랩을 이용해서 했다.

     

    - 이진화 이미지

    이진화 이미지 만들기 코드(왼쪽), 이진화 이미지

    이진화 이미지 만들기는 적응형 이진화와 열기 연산을 이용해서 얻었다.

    처음엔 그냥 이진화 이미지를 쓰고 닫기연산도 해보고 하다가 열기연산으로 정했다.

    커널은 (9,9)로 했다. 주석에 닫기연산의 흔적이 있다 ㅋㅋㅋㅋ

    결과로 오른쪽과 같은 이미지를 얻었고 이 정도 이미지라면 외곽선을 잘 찾을 수 있을거 같았다.

    하지만 이 연산들이 모바일에 들어가서 프레임이 잘 나올지는 모르겠다. ㅋㅋㅋ

     

    - 외곽선 탐지

    외곽선 탐지

    외곽선을 찾은 결과 생각보다 탐지되는 외곽선이 많다는 것을 알았다.

    로고부터 캡쳐된 동영상플레이어 UI까지 난리도 아니다.

    이걸보고 hierarchy는 이용하기 힘들거 같다고 생각했다.

     

    - 근사

    근사

    사각형과 원을 검출하기위해 탐지한 외곽선을 근사화했다.

    approxPolyDP에는 epsilon값이 필요한데, 그 값은 0.02 * 외곽선길이로 했다.

    pts에 근사화된 포인트들이 있고 이거를 이용해 사각형과 원을 검출한다.

    - 사각형, 원 검출

    사각형, 원 검출

    사각형은 pts의 개수가 4개이고 넓이 제한을 1000보다 큰 애들로 했다.

    원은 원이라면 4πL/r**2 > 0.85 를 만족한다고해 이거를 이용해서 검출했다.

     

    오른쪽 그림이 결과인데 초록선 선부분이 쿠션이 되는 당구대 영역이다.

    사각형의 경우 당구대의 바깥쪽 사각형이 탐지되지 않았는데

    위의 당구대 바깥쪽 외곽선 탐지 결과를 보면 여러가지 문구 등등 때문에 구불구불하다.

    그래서 사각형으로 근사화되지 않았으며 오히려 깔끔하게 쿠션부분만 탐지가됐다.

     

    원의 좌표와 반지름, 쿠션부분의 좌표와 width, height를 얻었다.

     

    - 좌표가져오기

    데이터를 만들때 좌표는 (0,0) 크기는 0.0 ~ 1.0으로 할거라서 미리 연습했다.

    좌표를 (0,0)을 기준으로 쿠션부분과 공의 위치 모두 옮겼다.

    0.0 ~ 1.0 크기의 데이터들에 사각형의 width, height를 곱해주고

    탐지된 쿠션부분의 좌표만큼 더해주면 얻은 데이터들의 좌표들을 얻을 수 있다.


    OpenCV는 탐지에 관한 이런 복잡한 탐지들을 간단하게 할 수 있게 만들어놨다.

    정말 대단하다. 세상에는 천재가 정말 많은거같다.

     

    데이터를 얻어야 되는데 당구 길찾기에 관한 데이터를 못찾았다.

    영상을 다 보면서 만들수도 없고 우웩

    '유니티 > PathFinder_3Cushion' 카테고리의 다른 글

    데이터 모으기  (0) 2021.04.12
    제작의도  (0) 2021.04.05
Designed by Tistory.