본문 바로가기
카테고리 없음

이미지벡터 호모그래피 계산 방법

by 구름갈대호수 2022. 3. 19.

이미지벡터 호모그래피 함수


호모그래피로 찾은 결과인 영내를 다음 반복문으로 그렸다.

// 영내 점 그리기

std::vector<cv:: Point2f>:: const iterator itPts=

points1.begin(); itin= inliers.begin();

std::vector<uchar>::const_iterator while (itPts! =pointsl.end()) { // 각 영내 위치에 놓은 원을 그리기 if (*itIn) cv::circle(image1, *itPts,3, cv:: Scalar (255,255,255),2); ++itPts: ++itin;

앞 절에서 설명한 그대로 일단 호모그래피를 계산하면 한 영상에서 다른 영상으로 영상 점을 이동할 수 있다. 사실 영상의 모든 화소에 대해 그렇게 처리할수 있고, 결과는 이 영상에서 다른 시점으로 이동된다. 이런 처리는 OpenCV함수로 다음과 같이 정확히 수행한다.

// 영상 1에서 영상 2로 워프CV::Mat result;

 

이미지 회전 image rotation 방법을 통한 이미지 변환 transformation

예제 구현

순수한 회전으로 분리한 두 영상을 갖는다고 가정한다. 두 영상은 RobustMatcher 클래스로 매칭할 수 있고, 기본 행렬 추정을 포함하므로 RANSAC 유효 단계(match 메소드 내의 5단계로 식별)를 생략할 수 있다. 대신 일치 집합(분명히 영외의 좋은 개수를 포함)에 기반을 둔 호모그래피 추정을 포함하는 RANSAC 단계를 적용한다. 이런 처리는 cv :: findFundementalMat 함수와 매우 유사한 cv:: findHomography 함수를 사용함으로 수행한다.

영상 1과 영상 2 사이의 호모그래피 찾기

 

 

image-1과 image-2의 homography 호모그래피 계산 개요

 


inliers (pointsl.size(),0);cv:: Mat homography= cv::findHomography (CV:: Mat(points1),

// 대응

cv:: Mat (points2), // 점inliers, 77 영내 일치 결과 CV RANSAC, // RANSAC 메소드// 재투영 점에 대한 최대 거리 1.);

std::vector<uchar>

순수한 회전으로 분리된 두 영상일 경우에만 호모그래피가 존재함을 상기하고, 두 영상은 다음 그림과 같다.

x Image 1 Homography Points

영상 내 투영 관계를 project합니다.


 

 

두개의 video사이의 homography calculation

일치 집합을 여러 번 필터로 적용하는 데는 이유가 있다. 물론 이 예제에서 제안했던 단계 중 하나 또는 다른 단계를 생략하게 결정할 수도 있다. 단지 계산복잡도, 최종 일치 개수, 정확히 일치한 것만 포함하는 일치 집합의 신뢰도에대한 요구 간의 균형에 달려 있을 뿐이다.

두 영상 간의 호모그래피 계산

일치 집합에서 영상 쌍의 기본 행렬을 계산하는 방법을 9장의 두 번째 예제에서다뤘다. 일치 쌍에서 다른 수학적 항목을 계산할 수 있는데, 바로 호모그래피다.호모그래피는 기본 행렬과 닮았으며, 특수한 속성을 갖는 3×3 행렬로, 이번 예제에 다루고, 특정 상황에서 이중 시점 영상에 적용한다.

 

video homography calculation preparation



9장의 첫 번째 예제에서 소개했던 카메라에서 3D 점과 해당 영상 간의 투영관계를 다시 고려해보자. 기본적으로 관계를 3×4 행렬로 표현함을 배웠다. 이제 순수한 회전으로 분리한 장면의 두 시점인 특별한 경우를 고려한다면 외부행렬의 네 번째 열이 모두 0(즉, 이동은 null)으로 만들어짐을 관찰할 수 있다. 결과로 이 특별한 경우 투영 관계는 3×3 행렬이 된다. 이 행렬은 호모그래피라고하며, 특별한 상황(여기서 순수한 회전)임을 내포하고, 선형 관계로 한 시점 내의점 영상은 다른 동일한 점의 영상과 관계를 갖는다.

호모그래피 계산 방법
호모그래피 계산방법 


동차 좌표에서 관계는 스칼라 값 s로 대표하는 크기 인자를 갖는다. 일단행렬을 추정했다면 이 관계를 이용해 한 시점의 모든 점을 두 번째 시전으로옮길 수 있다. 참고로 순수한 회전에 대한 호모그래피 관계의 부작용이런 경우 기본 행렬을 정의할 수 없게 된다.


OpenCV video encoding function number

단일 채널은 0(세 번째 파라미터)이다. 히스토그램은 자체적으로 각 차원 내 빈도수(일곱 번째 파라미터, 정수형 배열)와 최솟값과 최댓값(여덟 번째 파라미터, 2요소 배열을 갖는 배열)으로 기술한다. 각 빈도의 한계를 설정해야 하는 경우에는 비균등 히스토그램을 정의할 수도 있다.

많은 OpenCV 함수에서 원하는 개수(마스크의 모든 화소값이 0이면 무시)가 들어 있는 화소를 의미하는 마스크를 지정할 수 있다. 두 개의 부가적인 옵션 파라미터를 설정할 수 있는데, 모두 불리언 값이다. 첫 번째는 히스토그램이 균등화 하느냐 아니냐(균등화는 기본 값)를 나타낸다. 두 번째는 여러 히스토그램 계산 결과를 누적한다. 마지막 파라미터가 참이면 영상의 화소 개수에 입력 히스토그램의 현재 값을 더한다. 이는 영상 그룹의 히스토그램을 계산하길 원할 때 유용하다. 저장한다. N차원 행렬을 조작할

cv::NatND 인스턴스에 히스토그램 결과를 때 사용하는 일반적인 클래스다. 편리하게도 이 클래스는 1, 2, 3차원 행렬을 위해 정의된 at 메소드를 갖고 있다. 작성 방법은 다음과 같다.

float binVal = hist.at<float> (h);

getHistogramImage 메소드 내 1차원 히스토그램의 각 빈도에 접근할 때 히스토그램 값을 float로 저장했음에 주의한다.

Video transformation detailed explanation

이번 예제에서 소개한 Histogram1D 클래스는 1차원 히스토그램에 국한된 cv:: calcHist 함수를 단순화했고, 그레이레벨 영상에만 유용하다. 이와 유사하게 BGR 영상의 히스토그램을 계산하기 위한 클래스를 정의할 수 있다.

class ColorHistogram { private: int histSize [3]; float hranges [2]; const float* ranges [3];


호모그래피 계산 방법 개요

 

1인 선인 수평선은 0과 동일한 9 각도 값을 갖고, 수평선(예를 들어 5인 선)은 그와 동일한 0 값을 갖는다. 그러므로 3인 선은 4와 동일한 각도 A를 갖고, 4인 선은 0.70에 가깝다. 가능한 모든 선을 [0, 범위에 있는 )로 표현하기 위해서는 반지름 값을 음수로 만들 수 있다. 2인 선의 경우에는 p가 음수 값으로서 값이 0.8T와 동일하다.

 

OpenCV에서 호모그래피 계산 방법 예제

OpenCV는 선을 감지하기 위한 두 가지 허프 변환을 제공한다. 기본 버전은::: HoughLines이다. 입력은 점집합(넌제로 화소로 표현)을 포함하는 이진 맵이고, 일부는 선 형태로 정렬한다. 보통 예를 들어 에지 맵에서 캐니 연산자로 얻는다. cv:: HoughLines 함수의 결과는 cv:: Vec2f 요소의 벡터로, 부동소수점 값의 각 쌍은 감지된 선 (p, 0)의 파라미터를 표현한다. 이 함수를 사용한 예제는 다음과 같다. 즉, 영상 외곽선을 얻기 위해 먼저 캐니 연산자를 적용한 곳에 허프 변환을 이용해 선을 감지한다.

// 캐니 알고리즘 적용

CV:: Mat contours;

cv:: Canny (image, contours, 125,350);

// 선 감지 위한 허프 변환

std::vector<cv::Vec2f> lines;

CV :: HoughLines (contour, lines, 1, PI/180, // 단계별 크기

80);

// 투표(vote) 최대 개수

3과 4인 파라미터는 선을 찾기 위한 단계별 크기에 해당한다. 이번 예제에서 이 함수는 1과 180의 단계별로 가능한 모든 각도로 가능한 모든 반지름의 선을 찾는다. 마지막 파라미터 역할은 다음 절에서 설명한다. 특정 파라미터 값으로는 이전 절의 도로 영상에서 열다섯 개의 선을 감지한다. 감지 결과를 시각화하려면 원본 영상 내에 이 선을 그리는 게 흥미로울 것이다. 다만 중요한 점은

7 선, 외곽선, 컴포넌트 추출한다.

댓글