관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

지역 특징 8 - 연습문제 풀기 4 : 문제 7~8번 본문

인공지능/컴퓨터 비전

지역 특징 8 - 연습문제 풀기 4 : 문제 7~8번

huenuri 2024. 11. 11. 20:12

남은 두 문제도 마저 풀어보려고 한다. 8번 문제는 조금 어려워보이지만 한번 도전해볼 것이다.


 

 

 

 

연습문제 풀기 네번째

 

문제 7번

알고리즘 5-2에서는 임계값에 따라 FP를 줄이려면 임계값 t, d, e, 각각을 늘려야 하는지 줄여야 하는지 쓰고 그 이유를 설명하시오.

 

 

알고리즘 5-2

 

 

알고리즘 5-2는 매칭된 점 쌍의 집합을 입력으로 받아 최적의 호모그래피 행렬을 추정하기 위해 RANSAC(Random Sample Consensus) 알고리즘을 적용하는 과정이다. 호모그래피 행렬은 두 이미지 간의 대응점 쌍을 통해 변환 관계를 나타내며, 이 알고리즘을 사용하면 외란점(outlier)을 걸러내어 최적의 변환 행렬을 구할 수 있다.

 

알고리즘 설명

  1. 변수 초기화 (h=[]):
    • 최적의 호모그래피 행렬을 저장할 리스트 h를 빈 리스트로 초기화한다.
  2. 반복문 시작 (for j=1 to m):
    • 주어진 m 횟수만큼 반복하며 최적의 호모그래피 행렬을 찾기 위해 RANSAC 과정을 수행한다.
  3. 임의의 4쌍 점 선택 및 호모그래피 행렬 추정:
    • 매칭된 점 쌍 중에서 임의로 4개의 점 쌍을 선택하여, 이 점들을 기반으로 호모그래피 행렬 HH를 추정한다.
  4. inlier 집합 초기화:
    • 선택한 네 점 쌍은 기본적으로 inlier 집합에 포함시킨다.

5-6. 다른 점 쌍에 대해 오차 계산 및 inlier에 추가:

  • 선택한 4개의 점을 제외한 나머지 점 쌍에 대해, 추정된 호모그래피 행렬 HH을 적용해 오차 pp를 계산한다.
  • 이 오차가 임계값 tt보다 작으면 해당 점 쌍을 inlier 집합에 추가한다.
  1. inlier 수 검사:
    • 현재 inlier 집합에 포함된 점 쌍의 수가 임계값 dd 이상일 경우, inlier가 충분하다고 판단한다.
  2. inlier 집합으로 호모그래피 행렬 재추정:
    • inlier 집합에 포함된 점들을 기반으로 다시 호모그래피 행렬 HH를 추정한다.
  3. 오차 검사 후 최적의 행렬 업데이트:
    • 새로 추정된 HH의 오차가 이전에 저장된 행렬의 오차보다 작다면, 최적의 행렬로 갱신한다.
  4. 최적의 호모그래피 행렬 선택:
  • 모든 반복이 끝난 후, 최종적으로 가장 좋은 품질의 호모그래피 행렬을 H^\hat{H}로 선택한다.

 

요약

이 알고리즘은 RANSAC을 사용하여 최적의 호모그래피 행렬을 추정하며, 외란점(outlier)을 걸러내어 일치하는 점 쌍만을 사용해 안정적인 변환 행렬을 계산하도록 한다.


 

 

 

문제 풀기

알고리즘 5-2에서 False Positive(FP)를 줄이기 위해 임계값 , ,  각각을 어떻게 조정해야 하는지 설명한다.

 

  1. 임계값 t (오차 임계값)
    • 줄여야 한다.
    • 이유 : t 오차 허용 범위를 나타내므로, 이를 줄이면 더 작은 오차를 가지는 점만 inlier로 간주하게 된다. 이는 실제로 변환에 맞지 않는 외란점(outlier)이 inlier로 잘못 포함되는 것을 방지하여 FP를 줄이는 데 도움이 된다.
  2. 임계값 d (필요한 최소 inlier 개수)
    • 늘려야 한다.
    • 이유 : 는 호모그래피 행렬을 유효하게 판단하는 데 필요한 inlier의 최소 개수이다. d를 늘리면 더 많은 inlier가 포함된 경우에만 행렬을 유효한 것으로 간주하게 되어, 외란점이 포함된 잘못된 호모그래피 행렬이 선택되는 가능성을 줄일 수 있다.
  3. 임계값 ee (오차 평균)
    • 줄여야 한다.
    • 이유 : 는 호모그래피 행렬 H의 품질을 평가하는 데 사용되는 평균 오차 임계값이다. 를 줄이면 오차가 작은, 즉 변환 정확도가 높은 행렬만 선택되기 때문에 외란점을 포함한 잘못된 행렬이 선택되는 가능성이 줄어들어 FP를 감소시킬 수 있다.

요약

  • 임계값 : 줄여야 한다 (작은 오차만 허용)
  • 임계값 : 늘려야 한다 (더 많은 inlier 필요)
  • 임계값 : 줄여야 한다 (평균 오차가 낮은 행렬만 허용)

이렇게 조정하면 외란점이 포함된 잘못된 호모그래피 행렬이 선택될 가능성이 줄어들어, FP를 감소시킬 수 있다.


 

 

 

 

문제 8번

아래 제시한 모델 영상과 장면 영상을 참고하여 프로그램 5-4를 간판 인식 또는 교통 표지판 인식할 수 있도록 수정하시오.

 

 

 

 

위의 프로그램은 두 이미지 간의 SIFT 기반 특징점을 찾아 매칭하고, RANSAC을 사용하여 호모그래피 행렬을 추정한 후 모델 영상의 위치를 장면 영상에서 찾는 코드이다. 

 

이 프로그램은 두 개의 입력 이미지(모델 영상과 장면 영상)를 사용하여 모델 영상에서 찾은 특징점을 장면 영상에서 찾도록 설계된 것이다.

따라서 새로운 장면 영상 이미지에서 간판이나 표지판이 있는 위치를 탐지하려면, 원래 코드에서 사용하는 'mot_color70.jpg'와 'mot_color83.jpg' 대신 모델 이미지(간판이나 표지판 이미지)와 장면 이미지(간판이나 표지판이 포함된 전체 이미지)를 입력으로 준비해야 한다.

 

 

 

 

코드 오류가 떠서 몇 가지를 수정했다. 이전의 버스 이미지에서 모델과 장면 이미지로만 교체했더니 문제가 발생한 거였다.

 

  • Cropping Issue : img1 = cv.imread('logo.png')[190:350, 440:560] 라인에서 모델 이미지에 대해 크롭을 하고 있다. 그러나 logo.png 이미지에서는 특정 영역을 크롭하지 말고, 전체 이미지를 사용해 보자.
  • 특정 변수가 None인지 확인 필요 : 이미지가 정상적으로 불러와졌는지 확인해보자. cv.imread()가 파일 경로를 제대로 읽지 못한 경우 None을 반환할 수 있다.
  • 호모그래피 계산을 위한 충분한 매칭점 : 호모그래피를 계산할 때 충분한 매칭 포인트가 필요하다. 좋은 매칭 포인트가 충분하지 않을 경우 호모그래피가 계산되지 않아 오류가 발생할 수 있다.

 

 

하지만 여전히 문제가 발생했다.


 

 

 

임계값도 조정하고 여러 코드를 수정했지만 잘 되지 않았다. 이미지는 이걸 사용했다.

 

 

 

 

 

 

 

 

 


 

 

 

학습을 마치고

비록 8번 문제는 어려워서 풀지 못했지만 그래도 오늘 아침과 오후에 연습문제를 풀면서 정말 많은 것들을 배울 수 있었다. 이번 단원에서는 3문제를 해결하지 못했다. 하지만 잘 풀었던 문제도 생각해보면 진짜로 제대로 아는 건 아니었다. 

아쉬움이 남지만 5장 학습은 여기서 마치기로 했다.