본문 바로가기
728x90

OpenCV41

CH08 OpenCV-Python 템플릿 매칭(Template matching) 템플릿 매칭(Template matching)이란? - Classification • 입력 영상에서 (작은 크기의) 템플릿 영상과 일치하는 부분을 찾는 기법 • 템플릿: 찾을 대상이 되는 작은 영상. 패치(patch) 기본적으로 같은 위치의 픽셀끼리 곱하고 다 더해서 유사도를 판단 ==> 회전, 크기변환이 클 때는 찾기 어려움 ==> Key point활용(= Local feature matching) 유사도 => 최댓값(비슷한 부분이 밝게) 비유사도 => 최솟값(비슷한 부분이 어둡게) ==> 거리를 나타낸다 OpenCV filter VS Template filter OpenCV filtering은 영상 이미지의 가상의 픽셀(padding)이 있다는 가정하에 filter를 돌린다 == 동일한 크기를 얻을 .. 2021. 12. 24.
CH08 OpenCV-Python Moment 기반 객체 검출 모멘트(Moments)란? • 영상의 형태를 표현하는 일련의 실수값 • 특정 함수 집합과의 상관 관계(correlation) 형태로 계산 객체 위치가 바뀌어도 동일한 값의 특징 벡터를 추출 - Geometric moments 성능이 안 좋아 ==> Legendre moments, Zernike moments, ART(Angular Radial Transform)이 성능이 좋다 Hu의 7개 불변 모멘트(Hu's seven invariant moments) • 3차 이하의 정규화된 중심 모멘트를 조합하여 만든 7개의 모멘트 값 • 영상의 크기, 회전, 이동, 대칭 변환(Affine Transform)에 불변 객체와 객체 비교할 때(모양) 원하는 객체 검출 가능 # obj = spade만 골라내는 것이 목적 .. 2021. 12. 24.
CH08 OpenCV-Python 영상 분할 그랩컷(GrabCut) 그랩컷(GrabCut)이란? • 그래프 컷(graph cut) 기반 영역 분할 알고리즘 • 영상의 픽셀을 그래프 정점으로 간주하고, 픽셀들을 두 개의 그룹으로 나누는 최적의 컷(Max Flow Minimum Cut)을 찾는 방식 그랩컷 영상 분할 동작 방식 • 사각형 지정 자동 분할 • 사용자가 지정한 전경/배경 정보를 활용하여 영상 분할 영상자체를 두 개의 그룹으로 나누고 픽셀과 픽셀 사이의 관계를 어떻게 정의를 해서 최적의 컷을 만들어 낼 것이냐 전경은 시야에서 중요한 대상 배경은 그 나머지 부분으로 중요성이 덜한 대상 # 입력 영상 불러오기 src = cv2.imread('ch08\\images\\nemo.jpg') if src is None: print('Image load failed!') sy.. 2021. 12. 24.
CH07 OpenCV-Python 객체 단위 분석(Labeling) ▪ 객체 단위 분석 • (흰색) 객체를 분할하여 특징을 분석 • 객체 위치 및 크기 정보, ROI 추출, 모양 분석 등 ▪ 레이블링(Connected Component Labeling) • 서로 연결되어 있는 객체 픽셀에 고유한 번호를 지정 (레이블맵) • 영역 기반 모양 분석 • 레이블맵, 바운딩 박스, 픽셀 개수, 무게 중심 좌표를 반환 ▪ 외곽선 검출(Contour Tracing) • 각 객체의 외곽선 좌표를 모두 검출 • 외곽선 기반 모양 분석 • 다양한 외곽선 처리 함수에서 활용 가능 (근사화, 컨벡스헐 등) ▪ 레이블링(Connected Component Labeling) cv2.connectedComponents(image, labels=None, connectivity=None, ltype.. 2021. 12. 24.
CH07 OpenCV-Python 이진화(Binarization) 영상의 이진화(Binarization)란? • 영상의 픽셀 값을 0 또는 255(1)로 만드는 연산 ▪ 배경(background) vs. 객체(object) ▪ 관심 영역 vs. 비관심 영역 * GrayScale 영상의 이진화 # 검은 객체 찾기 ''' OpenCV에선 '흰색이 객체다' 라고 정의 ''' src = cv2.imread('ch07\\images\\cells.png', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load failed!') sys.exit() def onChange(pos): # cv2.THRESH_BINARY_INV = 검은 객체 흰색으로 ret, dst = cv2.threshold(src, pos, 255, cv2.THRESH.. 2021. 12. 24.
CH06 Opencv-Python Hough Transform(직선, 원) 허프 변환(Hough transform) 직선 검출이란? • 2차원 영상 좌표에서의 직선의 방정식을 파라미터(parameter) 공간으로 변환하여 직선을 찾는 알고리즘 결국에는 y= a'x+b'에서의 한 점은 b= -xa+y에서의 한점을 지나는데 이 점은 y= a'x+b'에 들어가는 파라미터 값 구체적으로 보자면 축적배열(accumulation array) - 직선 성분과 관련된 원소 값을 1씩 증가시키는 배열 직선의 방정식 y = ax + b 를 사용할 때의 문제점 - y 축과 평행한 수직선을 표현하지 못함 ==> 극좌표계 직선의 방정식을 사용(Hough Transform) why? a = 0 이면 수평선은 만들 수 있지만 수직선은 a가 무한대로 가야하기때문 표현 불가능 cv2.HoughLinesP(i.. 2021. 12. 19.
CH06 Opencv-Python 영상의 특징추출(Gradient) edge검출(detection)과 미분 에지(edge) • 영상에서 픽셀의 밝기 값이 급격하게 변하는 부분 • 일반적으로 배경과 객체, 또는 객체와 객체의 경계 1. Step Function= 보통 사용하지 않음 2. 서서히 바뀌는 형태(일반적으로 pixel를 서서히 바뀜) 3. Noise가 껴있는 상태 4. Gaussian(blur를 통해서 미분을 진행) 미분(derivative) 미분이란? 미세한 부분에서 어떤 변화가 얼마만큼 발생하고있는지 판단하는 기법(= 순간변화률) ==> 변화가 얼마만큼 나타내는 척도 - 그림1. 작아지거나 커지는 부분을 미분 - 값이 급격하게 변하는 부분을 미분(= 해당 부분의 Edge를 검출하기위해서) *영상에서는 pixel 값이 연속함수가 아니기 때문에 그림3 처럼 나오게.. 2021. 12. 19.
CH05 Opencv-Python 기하학적(Geometry) 변환 영상의 기하학적 변환(geometric transformation)이란? • 영상을 구성하는 픽셀의 배치 구조를 변경함으로써 전체 영상의 모양을 바꾸는 작업 • Image registration, removal of geometric distortion, etc 이동 변환(Translation transformation) • 가로 또는 세로 방향으로 영상을 특정 크기만큼 이동시키는 변환 • x축과 y축 방향으로의 이동 변위를 지정 영상의 전단 변환(Shear transformation) - 층 밀림 변환. x축과 y축 방향에 대해 따로 정의 cv2.warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None) -> ds.. 2021. 12. 18.