영상의 산술 및 논리연산

BERT·2023년 4월 22일
0

Computer Vision

목록 보기
20/56

덧셈 연산

두 영상의 같은 위치에 존재하는 픽셀 값을 더하여 결과 영상의 픽셀 값으로 설정
덧셈 결과가 255보다 크면 픽셀 값을 255로 설정 (포화 연산)

dst(x,y)=saturate(src1(x,y)+src2(x,y))dst(x,y)=saturate(src1(x,y)+src2(x,y))

가중치 합

보통 α+β=1\alpha+\beta=1이 되도록 설정 \rarr 두 입력 영상의 평균 밝기 유지

평균 연산

가중치를 α=β=0.5\alpha=\beta=0.5로 설정한 가중치 합
dst(x,y)=12(src1(x,y)+src2(x,y))dst(x,y)=\displaystyle\frac{1}{2}(src1(x,y)+src2(x,y))

dst(x,y)=saturate(αsrc1(x,y)+βsrc2(x,y))dst(x,y)=saturate(\alpha \cdot src1(x,y)+\beta \cdot src2(x,y))

평균 연산 응용
잡음 제거

뺄셈 연산

두 영상의 같은 위치에 존재하는 픽셀 값을 뺄셈하여 결과 영상의 픽셀 값으로 설정
덧셈 결과가 0보다 작으면 픽셀 값을 0으로 설정 (포화 연산)
덧셈 연산과 달리 영상의 순서에 따라 결과가 달라짐
dst(x,y)=saturate(src1(x,y)src2(x,y))dst(x,y)=saturate(src1(x,y)-src2(x,y))

차이 연산

두 입력 연산에 대하여 뺄센 연산을 수행한 후 절댓값을 이용하여 결과 영상을 생성하는 연산
뺄셈 연산과 달리 입력 영상 순서에 영향을 받지 않음
dst(x,y)=src1(x,y)src2(x,y)dst(x,y)=|src1(x,y)-src2(x,y)|

OpenCV 함수

행렬의 덧셈 & 뺄셈 연산

src1 : 첫 번째 입력 행렬 또는 스칼라
src2 : 두 번째 입력 행렬 또는 스칼라
dst : 출력 행렬. dst 깊이는 src1, src2의 깊이와 같거나 dtype 인자에 의해 결정됨
mask : 마스크 영상. mask 행렬 원소 값이 0이 아닌 위치에서만 연산 수행
dtype : 출력 행렬의 깊이

void add(InputArray src1, InputArray src2, OutputArray dst, 
		 InputArray mask = noArray(), int dtype = -1);
void subtract(InputArray src1, InputArray src2, OutputArray dst, 
		 InputArray mask = noArray(), int dtype = -1);

행렬의 가중합 연산

src1 : 첫 번째 입력 행렬
alpha : src1 행렬의 가중치
src2 : 두 번째 입력 행렬
beta : src2 행렬의 가중치
gamma : 가중합 결과에 추가적으로 더할 값
dst : 출력 행렬
dtype : 출력 행렬의 깊이

void addWeighted(InputArray src1, double alpha, 
				 InputArray src2, double beta, 
                 double gamma,
				 OutputArray dst, 
                 int dtype = -1);

행렬의 차이 연산

src1 : 첫 번째 입력 행렬 또는 스칼라
src2 : 두 번째 입력 행렬 또는 스칼라
dst : 출력 행렬

void absdiff(InputArray src1, InputArray src2, OutputArray dst);

행렬의 논리 연산

src1 : 첫 번째 입력 행렬 또는 스칼라
src2 : 두 번째 입력 행렬 또는 스칼라
src : 입력 행렬 또는 스칼라
dst : 출력 행렬
mask : 마스크 행렬

void bitwise_and(InputArray src1, InputArray src2, OutputArray dst,
				 InputArray mask = noArray());
void bitwise_or(InputArray src1, InputArray src2, OutputArray dst,
				 InputArray mask = noArray());
void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst,
				 InputArray mask = noArray());
void bitwise_not(InputArray src, OutputArray dst,
				 InputArray mask = noArray());

0개의 댓글