[OpenCV] cornerSubPix : 코너 검출 정확도 향상

2024. 6. 12. 07:54·Programming/DIP
728x90
728x90

OpenCV 라이브러리에서 제공하는 cornerSubPix는
코너 검출의 정확도를 높이기 위해 사용되는 함수임.

이 함수는 초기 검출된 코너 위치를 서브픽셀 수준으로 정밀하게 조정하기 위해 사용됨.

함수 설명

cornerSubPix 함수는 다음과 같은 인자를 받음:

  • image (이미지): 입력 이미지로, 그레이스케일 이미지여야 함.
  • corners (코너들): 초기 코너 위치로, goodFeaturesToTrack나 findChessboardCorners와 같은 함수로부터 얻은 값임.
  • winSize (윈도우 크기): 코너를 세밀하게 조정할 때 사용하는 검색 윈도우의 절반 크기임. 예를 들어, (5, 5)로 설정하면 실제 윈도우 크기는 11x11이 됨.
  • zeroZone (제로 존): 검색 중 중심 영역을 무시할 영역임. 일반적으로 (-1, -1)로 설정하여 무시하지 않음.
  • criteria (종료 기준): 정확도를 높이기 위해 사용하는 종료 기준임. cv2.TERM_CRITERIA_EPS 또는 cv2.TERM_CRITERIA_MAX_ITER와 같은 플래그를 사용함.

winSize의 역할

winSize는 서브픽셀 정밀도로 코너 위치를 조정할 때 참조하는 영역의 크기를 결정하는 값임. 이는 검색 윈도우의 절반 크기를 나타내며, 너무 작거나 너무 크면 원하는 결과를 얻기 어려움.

  • 작은 winSize:
    • 작은 영역 내에서 정밀한 조정을 시도함.
    • 노이즈에 민감할 수 있으며, 코너가 정확하게 검출되지 않을 수 있음.
    • 처리 속도가 빠를 수 있음.
  • 큰 winSize:
    • 넓은 영역을 참조하여 코너 위치를 조정함.
    • 더 많은 정보(픽셀 값)를 사용하여 정밀한 위치를 계산하므로, 더 정확한 결과를 얻을 수 있음.
    • 처리 시간이 길어질 수 있음.

최적의 winSize 설정

  • 이미지 해상도 및 특성:
    • 고해상도 이미지에서는 큰 winSize가 필요할 수 있음.
    • 저해상도 이미지에서는 작은 winSize가 적절할 수 있음.
  • 코너 밀도:
    • 코너가 밀집된 영역에서는 작은 winSize가 더 적합할 수 있음.
    • 코너가 드문드문 있는 경우 큰 winSize가 유리할 수 있음.
  • 실험적 접근:
    • 다양한 winSize 값을 실험하여 최적의 값을 찾는 것이 중요함.

알고리즘 개요

cornerSubPix는 다음과 같은 단계를 통해 작동함:

  1. 초기 코너 위치 설정: 초기 코너 위치는 다른 코너 검출 알고리즘(goodFeaturesToTrack, findChessboardCorners)으로부터 얻음.
  2. 검색 윈도우 설정: winSize로 지정된 영역 내의 픽셀 값을 분석함.
  3. 픽셀 값 분석: 초기 코너 위치를 중심으로 winSize로 지정된 영역 내의 픽셀 값을 분석하여 정밀한 위치를 계산함.
  4. 반복적 위치 조정: 종료 조건(criteria)이 만족될 때까지 반복적으로 코너 위치를 조정함.

예시 코드

다음은 cornerSubPix 함수의 예시 코드임:

import cv2
import numpy as np

# 그레이스케일 이미지 로드
gray = cv2.imread('chessboard.jpg', cv2.IMREAD_GRAYSCALE)

# 코너 검출 (초기 추정)
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

# winSize 설정
winSize = (5, 5)  # 코너 위치를 정밀하게 조정할 때 사용할 검색 윈도우의 절반 크기

# 종료 기준 설정
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)

# 코너를 부드럽게 조정
refined_corners = cv2.cornerSubPix(gray, corners, winSize, (-1, -1), criteria)

# 결과 출력
for corner in refined_corners:
    x, y = corner.ravel()
    cv2.circle(gray, (x, y), 3, 255, -1)

cv2.imshow('Corners', gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

이 코드는 cornerSubPix를 사용하여 초기 코너 위치를 서브픽셀 수준으로 정밀하게 조정하는 예시임. winSize 설정에 따라 검색 영역의 크기가 달라지며, 적절한 winSize를 선택하면 더 정확한 코너 위치를 얻을 수 있음.

References

https://docs.opencv.org/4.x/da/d0d/tutorial_camera_calibration_pattern.html

 

OpenCV: Create calibration pattern

Next Tutorial: Camera calibration with square chessboard Original author Laurent Berger Compatibility OpenCV >= 3.0 The goal of this tutorial is to learn how to create calibration pattern. You can find a chessboard pattern in https://github.com/opencv/open

docs.opencv.org

 

'Programming > DIP' 카테고리의 다른 글

[DIP] Image Stitching  (0) 2024.06.13
[CV] Homography 에 대해서  (0) 2024.06.13
[DIP] functional plot and image plot.  (0) 2024.01.21
[DIP] Image Quality 관련 정량화 지표들: Resolution, Contrast, SNR  (0) 2023.10.04
[DIP] Function plot and Image display  (0) 2023.09.26
'Programming/DIP' 카테고리의 다른 글
  • [DIP] Image Stitching
  • [CV] Homography 에 대해서
  • [DIP] functional plot and image plot.
  • [DIP] Image Quality 관련 정량화 지표들: Resolution, Contrast, SNR
dsaint31x
dsaint31x
    반응형
    250x250
  • dsaint31x
    Dsaint31's blog
    dsaint31x
  • 전체
    오늘
    어제
    • 분류 전체보기 (742)
      • Private Life (13)
      • Programming (188)
        • DIP (106)
        • ML (26)
      • Computer (119)
        • CE (53)
        • ETC (33)
        • CUDA (3)
        • Blog, Markdown, Latex (4)
        • Linux (9)
      • ... (351)
        • Signals and Systems (103)
        • Math (172)
        • Linear Algebra (33)
        • Physics (42)
        • 인성세미나 (1)
      • 정리필요. (54)
        • 의료기기의 이해 (6)
        • PET, MRI and so on. (1)
        • PET Study 2009 (1)
        • 방사선 장해방호 (4)
        • 방사선 생물학 (3)
        • 방사선 계측 (9)
        • 기타 방사능관련 (3)
        • 고시 (9)
        • 정리 (18)
      • RI (0)
      • 원자력,방사능 관련법 (2)
  • 블로그 메뉴

    • Math
    • Programming
    • SS
    • DIP
  • 링크

    • Convex Optimization For All
  • 공지사항

    • Test
    • PET Study 2009
    • 기타 방사능관련.
  • 인기 글

  • 태그

    Optimization
    numpy
    math
    Term
    SIGNAL
    opencv
    function
    Python
    fourier transform
    signal_and_system
    Probability
    인허가제도
    random
    Convolution
    SS
    Vector
    Programming
    DIP
    signals_and_systems
    linear algebra
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dsaint31x
[OpenCV] cornerSubPix : 코너 검출 정확도 향상
상단으로

티스토리툴바