해당 포스트는 "OpenCV로 배우는 영상 처리 및 응용", "C++ API OpenCV 프로그래밍" 책의 내용을 요약한 것이다.



※ 단위 행렬 및 대칭 행렬

void setIdentity(InputOutputArray mtx, const Scalar& s=Scalar(1))

: mtx의 대각 요소값을 스칼라 s로 초기화한다.


void completeSymm(InputOutputArray mtx, bool lowerToUpper=false)

: mtx 행렬을 대칭행렬로 만든다. false이면 대각선 위쪽 부분을 다각선 아래쪽 부분으로 복사한다. true이면 대각선 아래쪽 부분을 대각선 위쪽 부분으로 복사한다. 대각선 요소는 복사하지 않는다. mtx 행렬은 행과 열의 크기가 같은 정방행렬이다.


※ 행렬의 놈

double norm(InputArray src1, int normType=NORM_L2, InputArray mask=noArray())

: src1의 절대 놈을 normType에 따라 계산한다.



double norm(InputArray src1, InputArray src2, int normType=NORM_L2, InputArray mask = noArray())

: src1과 src2의 상대 놈을 normType에 따라 계산한다.



void normalize(InputArray src, OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, int dtype=-1, InputArraymask=noArray())

: src의 놈 또는 값의 범위를 정규화한다. 밑에 사진에서 normType이 위 조건과 맞는다면 noreType에 따라 생성된 src의 놈이 alpha 값과 같도록 만들어 준다. normType이 사진에서 밑의 조건에 해당한다면 행렬을 정규화하는 데 alpha 값에서 beta값의 범위로 정규화하여 dst에 저장한다.



※ 행렬의 곱셈 및 변환

void gemm(InputArray src1, InputArray src2, double alpha, InputArray src3, double gamma, OutputArray dst, int flags=0)

: dst = alpha*op(src1)*op(src2) + gamma*op(src3) 이다. 만약 flags 가 GEMM_1_T 라면 op(src1)은 src1의 전치행렬이 된다. flags가 GEMM_2_T 라면 op(src2)가 src2의 전치행렬이고 GEMM_3_T라면 op(src3)가 src3의 전치행렬이다.


void transform(InputArray src, OutputArray dst, InputArray m)

: src의 모든 원소에 행렬 변환을 수행한다. 회전 변환과 같은 변환을 할 때 사용된다. 수식은 다음과 같다. 

dst(i) = m*src(i), if  m.cols = src.channels() || m.cols = src.channels()+1


void perspectiveTransform(InputArray src, OutputArray dst, InputArray m)

: src에 투영 변환 행렬 m을 적용하여 dst에 저장한다.



void mulTransposed(InputArray src, OutputArray dst, bool aTa, InputArray delta = noArray(), double scalse = 1, int dtype=-1)
: 공분산 행렬을 계산하여 dst에 저장한다.



※ 행렬의 트레이스, 전치행렬, 행렬식

- Scalar trace(InputArray mtx)

: mtx의 대각 요소의 합계인 행렬의 트레이스를 반환한다.


- void transpose(InputArray src, OutputArray dst)

: src의 전치행렬을 dst에 저장한다.


- double determinant(InputArray mtx)

: mtx의 행렬식을 반환한다. 행렬식을 계산해야 해서 mtx는 행과 열의 크기가 같은 정방행렬이어야 한다.


※ 역행렬과 연립 방정식 해 구하기

double invert(InputArray src, OutputArray dst, int flags=DECOMP_LU)

: dst에 src의 역행렬을 저장한다. flags 값에 따라 역행렬을 계산하는 방식이 달라진다.


bool solve(InputArray src1, InputArray src2, OutputArray dst, int flags=DECOMP_LU)

: src1은 연립방정식의 왼쪽 행렬이고 src2는 오른쪽 행렬이다. dst는 연립 방정식 해를 저장하는 행렬이다. 행렬을 통해 연립 방정식 해를 구하려면 역행렬을 계산해야 하는 데 계산 방식은 flags에 따라 달라진다.


+ Recent posts