ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [퍼즐:06] 1차 중간 점검
    개발 2023. 8. 13. 18:14

    다른 퍼즐 100 조각을 가지고 테스트 해본다.

     

     

     

    1. resize

    2. outline 추출

    3. corner 추출

    4. edge 분리

     

    뭐 하나 쉽게 되는게 없다.

     

    1. 모서리 분리 과정에서 모서리의 경계 찾기

    그림에서 보는 것과 같이 자주색 엣지가 노란색 쪽으로 약간 넘어갔다.

    이 오차를 무시할 수 없는 이유는

    끝 점을 기준으로 정규화를 할 텐데,

    끝이 저렇게 붕 뜨게 되면 나중에 모서리 비교할 때 제 짝을 못 찾게 된다.

     

    이렇게 되는 이유는 코너 검출에서 코너가 완벽히 구석이 아니라

    약간 안쪽으로 설정되는데,

    모서리 중 하나에 더 가까이 붙는 경우가 많았다.

    몇 픽셀 차이 아니지만 확대해서 보면 차이가 보였다.

     

     

    2. 코너 검출 하기

    코너가 딱 4개가 안 찾아지는 것도 문제이지만,

    이 경우는 이미 알고있고 지금 당장 고민하지 않는다.

     

    지금 문제는 앞에 1번에서 얘기했듯이 모서리를 잘 검출할 수 있는 코너를 찾는 것이다.

    알고리즘이 찾은 코너를 바탕으로 퍼즐 모서리로 활용할 수 있는 코너를 찾는 것이다.

     

    1차 시도

    코너 근처의 모든 점끼리 서로 선을 그어서 선이 가장 많이 지나간 점을 코너로 삼는 작전이다.

    선이 지나간 자리에 rgb의 r값을 1씩 올렸다.

    아래와 같은 그림이 나왔다.

    성공했다고 생각했다.

    코너 부근이 가장 붉을 것이라고 예상했지만,

    흰색 점 부근 어딘가가 가장 붉은 곳이었다.

    전반적인 아이디어는 좋았지만,

    가장 코너가 가장 붉지 않았다는 문제가 있었다.

    (원인)

    점을 찍을 때 직선의 방정식을 구한뒤, x순회하며 y를 구해서 빨간 점을 찍었다.

    기울기가 완만하면 점이 많이 찍히고,

    기울기가 가파르면 점이 듬성듬성 찍히는 문제가 있었다.

    오른쪽 붉은 색 교차점이 내가 원하는 코너

     

    2차 시도

    기울기의 가파르면 x, y의 역할을 바꿔서 y를 순회하며 x를 구해서 빨간 점을 찍는다.

    그러면 기울기의 차이에 따른 문제는 피할 수 있었다.

    하지만 역시 결과는 좋지 않았다. (캡쳐화면이 없다)

    (원인)

    가파른 면은 외곽선도 많이 생략되어 있기 때문에 그 빨간 선 개수가 적어진다.

    빨간 점은 잘 찍지만 선 자체가 적어서 제대로 된 코너를 검출할 수 없었다.

     

    3차 시도

    선의 개수를 맞추기 위해서 여러 시도를 했다.

    1. 빨간 점을 점수라고 생각했을 때 점수를 1씩 더하는 것이 아니라 거리의 비례해서 늘린다.

    2. 점의 빈 칸을 interpolation해서 다 채웠다.

     

    1번 방법은 대각선의 빨간 선만 진해지는 결과를 가져왔고,

    2번 방법은 별 효과를 보지 못했다.

     

    4차 시도

    각 모서리의 대표 직선을 구한 후 교점을 구한다.

    그 교점이 코너이다.

     

    대표 직선을 구하는 방법

    1. 코너에서 가장 먼 점을 구한다.

    2. 1번에서 찾은 점에 가까운 점들을 모은다.

    3. 1번 점과 너무 가까운 점은 버린다. 기울기 오차가 심하다.

    4. 코너에 너무 가까운 점도 버린다. 에러만 높아진다.

    5. 코너에서 모은 점들에 선을 긋는다.

    6. 선의 평균을 대표 직선으로 삼는다.

     

    파란 점과 청록 점이 1번 점이고,

    빨간 점들이 1번 점과 직선을 만들게 될 점이다.

    연두색 점은 기존 코너 점으로 계산된 점이다.

    (코너에서 약간 오른쪽으로 치우쳐져있다.)

     

    노란 선의 교점이 새로 지정한 코너이다.
    분홍 점이 다시 계산한 코너이다.

    분홍 점이 다시 계산한 코너이다.

    기존 코너 (연두색 점)에 비해 훨씬 코너에 가깝게 이동했다.

     

     

     

     

     

Designed by Tistory.