본문 바로가기

전체 글

(27)
[OpenCV] 호모그래피와 영상매칭 findHomography, drawMatches, RANSAC * 호모그래피(Homography)란? - 두 평면 사이의 투시변환(Perspective transform)으로, - 두 평면 사이의 투시변환 관계를 의미한다. 바닥에 있는 사진을 v1에서 찍어 l1으로 저장되었다고 가정, 왼쪽 위에서 찍었으니 기울어짐. 원래 사진과 기울어진 사진과의 관계를 호모그래피라고 하며 이것을 H1이라고 표현한다. - 8DOF : 최소 4개의 대응점 좌표가 필요 1. srcPoints 2. dstPoints, Shape 는 N, 1, 2이며, N은 점의 개수, 1은 더미, dataType은 float32이다. 3. method은 기본값이 0인데, 그것은 잘못된 값을 줄 수 있기 때문에, RANSAC을 사용한다. * RANSAC이란? RANSAC은 영어로 RANdom SAmple ..
[openCV]영상처리 - image matching import numpy as np import cv2 as cv import matplotlib.pyplot as plt queryImage= 'cv_cover.jpg' trainImage='cv_desk.png' plt.figure(figsize=(15,8)) plt.subplot(1,2,1) plt.imshow(cv.cvtColor(cv.imread(queryImage), cv.COLOR_BGR2RGB)) plt.title('Query image') plt.subplot(1,2,2) plt.imshow(cv.cvtColor(cv.imread(trainImage), cv.COLOR_BGR2RGB)) plt.title('Desk image') plt.show() img1 = cv.imread(queryI..
[OpenCV] 영상처리_매칭점 찾기 1. 올바른 매칭점 찾기 (1) match() 함수 - match()함수는 모든 디스크립터를 하나하나 비교하여 매칭점을 찾고, - 가장 작은 거리 값과 큰 거리값의 상위 몇 퍼센트만 골라서 올바른 매칭점을 찾게 된다. : 모든 디스크립터를 하나하나 비교하여 매칭점을 찾는다 : 가장 작은 거리 값과 큰 거리 값의 상위 몇 퍼센트만 골라서 올바른 매칭점을 찾을 수 있음 인자를 3개를 기본으로 넣어주면 되는데, 구간 시작점, 구간 끝점, 구간 내 숫자 개수 3가지를 순서대로 채워주시면 됩니다. 예를 들어 1과 10 사이를 숫자 100개(끝점 포함)로 채운 예시를 보도록 하겠습니다. import cv2 import numpy as np img1 = cv2.imread('img/taekwonv1.jpg') img..
[OpenCV] 특징점 연결 BF Matcher 파노라마 사진을 만들기 위해선 image stitching이라고도 부르는 image registration (영상 정합)을 해야한다. 그리고 이를 위해서는 두 이미지에서 같은 지점을 가리키는 좌표들의 쌍들을 먼저 알아내야 한다. 그래야 변환 행렬을 계산해 registration을 할 수 있기 때문이다. image registration은 보통 아래와 같은 흐름으로 진행된다. 이번 글에서는 matching과정에서 쓰이는 cv2.BFMatcher()함수에 대해 정리하고자 한다. * 목표 이 챕터에서는 1) 우리는 한 이미지에서 특징점을 추출한 것을 다른 것과 어떻게 연결시키는 지를 확인하고, 2) OpenCV에서 Brute-Force matcher와 FLANN Matcher을 사용할 것이다. 1. Brute..
[OpenCV] 특징 디스크립터 검출기 (SIFT, SURF, ORB) 특징점이란 말 그대로 이미지에서 특징이 되는 부분을 의미합니다. 이미지끼리 서로 매칭이 되는지 확인을 할 때 각 이미지에서의 특징이 되는 부분끼리 비교를 합니다. 즉, 이미지 매칭 시 사용하는 것이 바로 특징점입니다. 특징점은 영어로 키 포인트(Keypoints)라고도 합니다. 1. 특징 디스크립터 이 특징점은 객체의 좌표뿐만 아니라 그 주변 픽셀과의 관계에 대한 정보를 가집니다. 그중 가장 대표적인 것이 size와 angle 속성이며, 코너(corner)점인 경우 코너의 경사도와 방향도 속성으로 가집니다. 특징 디스크립터(feature descriptor)란 특징점 주변 픽셀을 일정한 크기의 블록으로 나누어 각 블록에 속한 픽셀의 그레디언트 히스토그램을 계산한 것입니다. 주로 특징점 주변의 밝기, 색상..
[Computer Vision기초] openCV를 사용하여 Image cropping과 masking하기 1. openCV를 이용하여 이미지 간단히 불러오기(함수화) import cv2 ## opencv import matplotlib.pyplot as plt ## matplotlib ## 이미지 읽어오는 것 함수화 def read_image(im_name): image = cv2.imread(im_name) image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) plt.imshow(image_rgb) plt.show() return image_rgb ## 이미지 두 개 불러오기 im1=read_image('image.jpeg') im2=read_image('image2.jpeg') ## 이미지 사이즈 출력 print(im1.shape, im2.shape) 2. openC..
Matplotlib를 활용하여 기본 차트 시각화 1. 라인플롯 np.linspace 함수의 사용법은 간단합니다. 인자를 3개를 기본으로 넣어주면 되는데, 구간 시작점, 구간 끝점, 구간 내 숫자 개수 3가지를 순서대로 채워주시면 됩니다. 예를 들어 1과 10 사이를 숫자 100개(끝점 포함)로 채운 예시를 보도록 하겠습니다. import matplotlib.pyplot as plt import numpy as np 여기서 끝점을 포함하지 않고 싶으면 endpoint = False를 추가해주시면 되고, retstep = True를 추가하시면 숫자 사이의 간격이 얼마인지에 대한 값을 같이 반환하게 됩니다. 예제를 간단히 보여드리겠습니다. a = np.linspace(0, 10, 100, endpoint = False, retstep = True) 1-2)..
[Computer Vision] 2. openCV 이미지 읽어오기 및 시각화 1. openCV 이미지 읽어오기 import cv2 ## opencv import matplotlib.pyplot as plt ## matplotlib im_name = 'image.jpeg' image = cv2.imread(im_name) print(image) 이미지 형태로 출력하기 위해서는 plt를 이용하여 출력하면 된다. plt.imshow(image) plt.show() openCV를 사용하여 이미지를 출력할 경우, RGB가 아닌 GBR형태로 출력이 되기 때문에 RGB로 변환하여 주기 위해 아래의 코드를 입력한다. image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) plt.imshow(image_rgb) plt.show() image_gray = cv2..