cv.cornerSubPix : 코너 검출 정확도 향상

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

OpenCV 라이브러리에서 제공하는 cornerSubPix는

 

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

Function Signature

cv.cornerSubPix(
    image,          # 입력 이미지 (그레이스케일)
    corners,        # 초기 코너 위치들 (numpy array)
    winSize,        # 윈도우 크기 (width, height)
    zeroZone,       # 제외할 중심 영역 크기 (width, height)
    criteria        # 종료 조건 (type, max_iter, epsilon)
)

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

  • image (이미지): 입력 이미지로, 반드시 grayscale 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를 선택하면 더 정확한 코너 위치를 얻을 수 있음.


같이 보면 좋은 자료들

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

https://ds31x.tistory.com/339

 

[CV] Chessboard관련 함수들: OpenCV

cv.findChessboardCorners()cv.findChessboardCorners() 함수는 OpenCV 라이브러리에서 제공하는 함수chessboard 패턴의 코너를 찾는 데 사용됨.이 함수는 camera calibration 과정에서 자주 사용됨.입력 이미지에서 chessbo

ds31x.tistory.com

https://ds31x.tistory.com/347

 

[CV] cv2.calibrateCamera

cv2.calibrateCamerahttps://docs.opencv.org/4.x/d9/d0c/group__calib3d.html#ga3207604e4b1a1758aa66acb6ed5aa65d OpenCV: Camera Calibration and 3D ReconstructionThe functions in this section use a so-called pinhole camera model. The view of a scene is obtained

ds31x.tistory.com


 

728x90

'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
  • 전체
    오늘
    어제
    • 분류 전체보기 (787)
      • Private Life (15)
      • Programming (206)
        • DIP (116)
        • ML (35)
      • Computer (120)
        • CE (54)
        • ETC (33)
        • CUDA (3)
        • Blog, Markdown, Latex (4)
        • Linux (9)
      • ... (368)
        • Signals and Systems (115)
        • Math (176)
        • Linear Algebra (33)
        • Physics (43)
        • 인성세미나 (1)
      • 정리필요. (61)
        • 의료기기의 이해 (6)
        • PET, MRI and so on. (7)
        • PET Study 2009 (1)
        • 방사선 장해방호 (5)
        • 방사선 생물학 (3)
        • 방사선 계측 (9)
        • 기타 방사능관련 (3)
        • 고시 (9)
        • 정리 (18)
      • RI (0)
      • 원자력,방사능 관련법 (2)
  • 블로그 메뉴

    • Math
    • Programming
    • SS
    • DIP
  • 링크

    • Convex Optimization For All
  • 공지사항

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

  • 태그

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

  • 최근 글

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

티스토리툴바