본문 바로가기

OpenCV

선형 보간법과 쌍선형 보간법 다양한 Conv 연산 방법들 중 하나인 Deformable Conv에 대해 공부하기 위해 [논문] Deformable Convolutional Networks을 읽던 중, 쌍선형 보간법(Bilinear Interpolation)이라는 처음 보는 개념을 접하게 됐다. 보간법, 선형 보간법은 들어봤는데 쌍선형 보간법은 뭘까? 그래서 이 놈은 무엇인지 구글링하면서 공부 좀 해봤고, 그 과정에서 깨달은 내용들을 수식과 코드 위주로 정리해놓고자 한다. 보간법 ? 이미 알려진 값들을 활용하여 원하는 위치에서의 값을 추정하는 방법의 한 종류이다. 보간법, 선형 보간법, 쌍선형 보간법에 대한 더 자세한 정의는 여기에서 참고하길 바란다. 1. 선형 보간법 우리는 이미 알고 있는 x1, y1, x2, y2, a 값을 활용.. 더보기
homography matrix 다루기 / cv2.findHomography( ), cv2.warpPerspective( ) 제목을 뭐로 해야할지 몰라서 homography matrix 다루기라 두루뭉실하게 적어놨다. 오늘은 아래의 그림과 목차 흐름으로 정리하고자 한다. cv2.xfeatures2d.SIFT_create( ) 함수로 keypoint와 descriptor 추출 cv2.BFMatcher( ) 함수로 keypoint 매칭 cv2.findHomography( ) 함수로 homography matrix, H 추출 추출한 H로 이미지 변환 → cv2.warpPerspective( ) 함수 사용하면 쉽게 할 수 있는데, 이번 글에서는 H를 직접 다루는 방법으로 정리하고자 한다. 정합 결과 확인 먼저 말해두자면, 난 SIFT 이론에 대해 아직은 정확히 모른다. -> 20.01.15 논문 쓰려고 공부했다. 이해한 데까지 정리도.. 더보기
SIFT 알고리즘 Scale Invariant Feature Transform (SIFT) 개발하기 급급해서 OpenCV 함수로만 사용해왔는데 논문을 쓰는 입장이 되어보니 원리에 대해 공부해야할 필요성이 생겨버렸다. 그래서 내가 할 수 있는 최대로 구글링해서 공부했고 그 내용들을 정리해두려고 한다. 시간이 지나면 일부분은 까먹게 될테니깐..! SIFT Algorithm 이미지의 Scale (크기) 및 Rotation (회전)에 Robust한 (= 영향을 받지 않는) 특징점을 추출하는 알고리즘이다. 이미지 유사도 평가나 이미지 정합에 활용할 수 있는 좋은 알고리즘이다. 논문에서는 4단계로 구성되어 있다고 밝히고 있다. Scale-space extrema detection Keypoint localication Orienta.. 더보기
perspective transformation 와 homography 차이 기하 변환(geometric transformation)에 대해 공부 중이다. 다크프로그래머 블로그(영상처리 -> [영상 Geometry] 시리즈에 많은 개념들이 이해하기 쉽게 정리되어 있다)를 보며 많이 배우고 있다. 오늘은 블로그 글을 읽으며 공부하던 중에 헷갈리는 개념이 있어서 알아본 결과를 정리해보고자 한다. perspective transformation(원근 변환)와 homography( = projective transformation) 이 두 개념 사이에 어떤 차이가 있는 걸까?? 알아본 결과 perspective transformation = homography 관계라고 한다. OpenCV에서는 cv2.getPerspectiveTransform( )와 cv2.findHomography( .. 더보기
OpenCV4 다운받는 방법 OpenCV3는 pip install 이나 conda install 을 사용해서 다운받아줄 수 있는데, OpenCV4는 이와는 다르게 조금 복잡한 방식으로 받아줘야하나보다. 여기에서 opencv_python-4.1.1-cp36-cp36m-win_amd64.whl을 받아주자. cp36은 python3.6, win_amd64는 window 64비트를 위한 파일이란 뜻이다. 다운받은 파일을 바탕화면으로 옮긴 뒤 명령 프롬프트 창에서도 경로를 바탕화면까지 이동시켜주자. 그 다음 pip install opencv_python-4.1.1-cp36-cp36m-win_amd64.whl 명령을 입력해주면 OpenCV4를 설치할 수 있다. [ 참고 사이트 ] https://pysource.com/2019/03/15/how.. 더보기
custom keypoint를 설정해 descriptor를 얻는 방법 / sift.compute( ) 앞선 글에서는 keypoint 추출을 SIFT로 했었는데 이를 custom keypoints로 대체해 사용하는 방법에 대해 정리하고자 한다. cv2.KeyPoint( )를 사용해서 keypoint를 정의해 사용해주면 된다. 다음의 예제에선 내가 만든 모델이 keypoint 좌표로 (370, 200)을 뽑아냈다 가정한 상태로 진행했다. import cv2 imageA = cv2.imread('./pano_1.jpeg') grayA = cv2.cvtColor(imageA,cv2.COLOR_BGR2GRAY) keypoint_x = 370 keypoint_y = 200 keypoint_size = 100 keypoint = cv2.KeyPoint(keypoint_x, keypoint_y, keypoint_siz.. 더보기
cv2.BFMatcher( )에 대해 알아보자 파노라마 사진을 만들기 위해선 image stitching이라고도 부르는 image registration (영상 정합)을 해야한다. 그리고 이를 위해서는 두 이미지에서 같은 지점을 가리키는 좌표들의 쌍들을 먼저 알아내야 한다. 그래야 변환 행렬을 계산해 registration을 할 수 있기 때문이다. image registration은 보통 아래와 같은 흐름으로 진행된다. 이번 글에서는 matching 과정에서 쓰이는 cv2.BFMatcher( ) 함수에 대해 정리하고자 한다. cv2.BFMatcher( ) 에서 BF는 Brute Force의 약자이다. Brute Force는 원래부터 있던 개념으로 무식하게 전부 다 확인해본다는 의미를 갖는다. 다르게 말하면 가능한 모든 경우에 대해 다 계산해본 후 최.. 더보기