상세 컨텐츠

본문 제목

[영상처리] 행렬과 영상에 관한 연산

Programming/영상처리

by 영상털이범 2013. 12. 17. 15:24

본문

영상처리 행렬에 관련된 연산과 영상에 관한 연산을 쭉 정리해 보았습니다.
아직 계속 정리중입니다..

cvAbs : 행렬의 모든 원소들의 절대값을 구한다.

void cvAbs( const CvArr* src, CvArr* dst );

  -> src 행렬 내의 모든 원소의 절대값을 계산하여 그 결과를 dst 행렬에 저장한다.


cvAbsDiff : 두 행렬의 차를 구하고, 결과행렬의 모든 원소들의 절대값을 구한다.

void cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );

  -> src1으로부터 src2 행렬을 뺀 다음 그 절대값을 dst 행렬에 저장한다.

 

cvAbsDiffS : 행렬에서 원소 단위로 스칼라값을 빼고, 그 절대값을 구한다.

void cvAbsDiffs( const CvArr* src, CvArr* dst, CvScalar value );

  -> src 행렬의 모든 원소로부터 상수값 value를 빼고, 그 절대값을 dst 행렬에 저장한다.

 

 

cvAdd : 두 행렬의 원소끼리 덧셈 연산을 수행한다.

void cvAdd( const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask = NULL ); 

  -> src1의 모든 원소값에 src2의 원소값을 더한 결과를 dst 배열에 저장한다. 만약 mask가 NULL이 아니라면 mask 행렬에서 0이 아닌 원소가 있는 위치에서만 덧셈 연산을 수행한다.


cvAddS : 하나의 행렬과 스칼라값을 원소 단위로 더한다.

void cvAddS( const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask = NULL );

  -> 하나의 행렬인 src에 상수값 value를 더한다.

 

cvAddWeighted : 두 행렬에 가중치를 부여한 후 더한다. (알파 블렌딩)

void cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst );

  -> 하나의 영상과 다른 영상을 서로 합성하여 반투명한 형태의 영상을 만든다.(보충자료 요망)

 

cvSub : 두 행렬의 원소끼리 뺄셈 연산을 수행한다.

void cvSub( const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask = NULL );

  -> src1의 모든 원소값에서 src2의 원소값을 빼서 그 결과를 dst 배열에 저장한다. 만약 mask가 NULL이 아니라면 mask 행렬에서 0이 아닌 원소가 있는 위치에서만 뺄셈 연산을 수행한다. mask는 8비트 데이터 타입이어야 한다.

 

cvSubS : 하나의 행렬에서 스칼라값을 뺀다.

void cvSubS( const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask = NULL );

  -> 하나의 행렬 src에서 상수값 value를 뺀다.

 

cvSubRS : 스칼라값으로부터 행렬의 원소값을 뺀다.

void cvSubRS( const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask = NULL );

  -> cvSubs와 반대로 주어진 상수값 value로부터 행렬의 모든 원소값을 뺀 결과를 dst에 저장한다.


cvDiv : 두 행렬의 원소끼리 나눗셈 연산을 수행한다.

cvMul : 두 행렬의 원소끼리 곱셈 연산을 수행한다.


cvSum : 행렬의 모든 원소값의 합을 구한다.

CvScalar cvSum( CvArr* arr );

  -> 입력행렬 arr의 모든 원소값의 합을 구한다. cvSum() 함수는 다채널행렬에도 적용될 수 있다.(반환타입이 CvScalar) 각 채널의 합은 CvScalar 반환값의 각 원소에 저장된다.


cvAvg : 행렬의 모든 원소값의 평균을 구한다.

CvScalar cvAvg( const CvArr* arr, const CvArr* mask = NULL )

  -> arr 내부에 있는 원소값의 평균을 계산한다. 만약 mask가 NULL이 아니면, mask에서 0이 아닌 값을 갖는 위치에 있는 원소들만 이용하여 평균을 계산한다.

 

cvAvgSdv : 행렬의 모든 원소값의 평균과 표준편차를 구한다.


cvAnd, cvAndS


cvCalcCovarMatrix : n차원 벡터들의 집합으로부터 공분산행렬을 계산한다.


cvCmp : 두 행렬의 모든 원소에 대하여 선택된 비교 연산을 수행한다.

cvCmpS : 행렬과 스칼라값 사이에 선택된 비교 연산을 수행한다.


cvConvertScale : 선택적으로 값을 증감하면서 행렬 타입을 변경한다.

cvConvertScaleAbs : 선택적으로 값을 증감하고, 절대값으로 바꾼 후 행렬 타입을 변경한다.


cvCopy : 행렬의 원소들을 다른 행렬로 복사한다.

void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask = NULL )

  -> 하나의 영상을 다른 영상으로 복사할 때 사용한다. 두 배열은 동일한 자료형, 동일한 크기, 동일한 차원 수를 갖고 있어야 한다. 만약 mask가 NULL이 아니면, mask에서 0이 아닌 위치에서의 값만 복사된다.


cvCountNonZero : 행렬에서 0이 아닌 원소의 개수를 반환한다.


cvCrossProduct : 두 개의 3차원 벡터에 대한 외적을 계산한다.


cvCvtColor : 행렬의 채널을 하나의 색 공간에서 다른 색 공간으로 변환한다.

void cvCvtColor( const CvArr* src, CvArr* dst, int code );

  -> 특정 색 공간을 다른 색 공간으로 변환한다. 채널의 개수는 변할 수 있으나 영상의 데이터 타입은 동일해야 한다. 세 번째 인자인 code 값에 의해 변환 방법이 결정된다.


cvDet : 정방행렬의 행렬식의 계산한다.


cvDotProduct : 두 벡터의 내적을 계산한다.


cvEigenVV : 정방행렬의 고유벡터와 고유값을 계산한다.


cvFilp : 선택한 축을 기준으로 행렬을 뒤집는다.

void cvFlip( const CvArr* src, CvArr* dst = NULL, int flip_mode = 0 );

  -> 영상을 x축, y축, 또는 양축 모든 방향으로 뒤집는다. flip_mode가 0으로 설정되면 x축을 기준으로 뒤집는다. flip_mode가 양수이면 y축을 기준으로 뒤집어지고, 음수이면 양축 모두를 기준으로 뒤집는다.


cvGEMM : 범용적인 행렬의 곱셈 연산을 수행한다.


cvGetCol : 행렬에서 하나의 열을 추출하여 벡터 형태로 반환한다.

cvGetCols : 행렬에서 여러 개의 인접한 열을 추출하여 행렬 형태로 반환한다.

cvGetRow : 행렬에서 하나의 행을 추출하여 벡터 형태로 반환한다.

cvGetRows : 행렬에서 여러 개의 인접한 행을 추출하여 행렬 형태로 반환한다.


cvGetDiag : 행렬에서 대각 성분을 벡터 형태로 반환한다.


cvGetDims : 행렬의 차원 수를 반환하고 선택적으로 각 차원의 크기를 알려준다.

cvGetDimSize : 행렬에서 지정된 차원의 크기를 반환한다.


cvGetSize : 2차원 행렬의 크기를 CvSize 타입으로 반환한다.

CvSize cvGetSize( const CvArr* arr );

  -> 행렬의 크기를 반환한다. 2차원 형태인 영상과 행렬에 대해서만 사용가능하다. 반환값이 CvSize 이기 때문에 동일한 크기의 영상이나 행렬을 새로 생성할 때 주로 사용된다.

 

cvGetSubRect : 행렬에서 일부 사각형 영역을 추출한다.


cvInRange : 행렬의 원소값이 두 행렬로 지정된 범위 안에 존재하는 지를 검사한다.

cvInRangeS : 행렬의 원소값이 두 스칼라값으로 지정된 범위 안에 존재하는 지를 검사한다.


cvInvert : 정방행렬의 역행렬을 구한다.


cvMahalonobis :  두 벡터 사이의 마할라노비스 거리를 계산한다.


*마할라노비스 거리 : 각각의 케이스가 여러가지 변인(variables) 중심값 (평균값, mean)들로 이루어진 중심 (centroid) 에 대해서 갖는 거리를 말한다. 개념적으로 살펴보면, 여러변인을 동시에 이용하여 살펴보는 테스트 (multivariate) 경우에 각각의 중심값을 중앙에 교차시켜 케이스 값들을 나열해보면 일종의 군집을 이루게 되는데, Mahalanobis distance는 특정 케이스의 값이 여기서 심하게 벗어났는가를 보기 위한 거리값이다.


cvMax : 두 행렬에서 큰 값을 골라서 새 행렬을 만든다.

cvMaxS : 행렬의 원소값과 스칼라값 중에서 큰 값을 골라서 새 행렬을 만든다.

cvMin : 두 행렬에서 작은 값을 골라서 새 행렬을 만든다.

cvMinS : 행렬의 원소값과 스칼라값 중에서 작은 값을 골라서 새 행렬을 만든다.

cvMinMaxLoc : 행렬 내부에서 최대값과 최소값을 구한다.


cvMerge : 여러 개의 단일 채널 영상을 모아서 다중 채널 영상을 생성한다.


cvNot : 행렬의 모든 원소값의 비트를 반전한다.


cvNorm : 단일 행렬의 전체 놈 또는 두 행렬 사이의 거리 놈을 계산한다.


cvNormalize : 행렬을 정규화하거나 특점 범위로 원소값을 매핑한다.


cvOr : 두 행렬의 비트 단위 OR 연산을 수행한다.

cvOrS : 한 행렬과 스칼라값 사이의 비트 단위 OR 연산을 수행한다.


cvReduce : 2차원 행렬을 지정된 방법에 의해 벡터로 변환한다.


cvRepeat : 행렬을 타일 형태로 깔아서 새 행렬을 생성한다.


cvSet : 행렬의 모든 원소를 주어진 값으로 설정한다.

cvSetZero : 행렬의 모든 원소를 0으로 설정한다.

cvZero : 행렬의 모든 원소를 0으로 설정한다. cvSetZero()와 동일하다.

cvSetIdentity : 행렬의 대각 성분은 1로, 나머지 원소들은 0으로 설정한다.


cvSolve : 선형 방정식의 해를 구한다.


cvSplit : 다중 채널행렬을 여러 개의 단일 채널행렬로 분할한다.


cvSVD : 2차원 행렬의 특이값 분해(SVD)를 수행한다.


cvSVBkSb : 특이값 역치환을 계산한다.


cvTrace : 행렬의 대각합(trace)을 구한다.


cvTranspose : 행렬의 행과 열을 서로 교환한 전치 행렬을 구한다.


cvXor : 두 행렬의 원소 사이의 비트 단위 XOR 연산을 수행한다.

cvXorS : 행렬과 스칼라 사이의 비트단위 XOR 연산을 수행한다.

관련글 더보기

댓글 영역