[OpenCV] 영상의 산술 및 논리 연산

zzwon1212·2023년 10월 28일
0

OpenCV

목록 보기
11/16
post-thumbnail

1. 산술 연산

1.1. 덧셈 연산

  • 두 영상의 같은 위치에 존재하는 픽셀값을 더하여 결과 영상의 픽셀값으로 설정(포화 연산까지)
dst(x,y)=saturate(src1(x,y)+src2(x,y))dst(x, y) = saturate(src1(x, y) + src2(x, y))

1.2. 가중치 합 연산(weighted sum)

  • 1.1.의 덧셈에서 각 이미지에 가중치를 부여하는 방법
  • 보통 α+β=1\alpha + \beta = 1이 되도록 설정하여 두 입력 영상의 평균 밝기를 유지한다.
  • 비디오 편집 이펙트인 디졸브(dissolve)는 한 값을 점진적으로 증가시키고, 다른 값을 점진적으로 감소시키는 것이 원리이다.
dst(x,y)=saturate(αsrc1(x,y)+βsrc2(x,y))dst(x, y) = saturate(\alpha \cdot src1(x, y) + \beta \cdot src2(x, y))

  • 평균 연산(average)

    • 가중치가 같은 경우(e.g. α=β=0.5\alpha = \beta = 0.5)

    • 잡음 제거에 응용할 수 있다.


www.attakim.com

1.3. 뺄셈 연산

  • 덧셈 연산과 달리 영상의 순서에 따라 결과가 달라진다.
dst(x,y)=saturate(src1(x,y)src2(x,y))dst(x, y) = saturate(src1(x, y) - src2(x, y))

1.4. 차이 연산(absolute difference)

  • 뺄셈 연산을 수행한 후, 절댓값을 이용한다.
  • 뺄셈 연산과 달리 입력 영상 순서에 영향을 받지 않는다.
  • 두 장의 영상에서 서로 다른 부분을 찾는 데에 응용할 수 있다.(e.g. 간단한 형태의 감시 시스템)
dst(x,y)=src1(x,y)src2(x,y)dst(x, y) = |src1(x, y) - src2(x, y)|

1.5. OpenCV 함수

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);
  • dst: 출력 행렬. dst의 깊이는 src1, src2의 깊이와 같거나 또는 dtype 인자에 의해 결정됨.
  • dtype: 출력 행렬의 깊이.
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta,
                 double gamma, OutputArray dst, int dtype = -1);

void absdiff(InputArray src1, InputArray src2, OutputArray dst);
  • gamma: 가중합 결과에 추가적으로 더할 값

2. 논리 연산

  • 각 픽셀값을 이진수로 변경하고, 비트 단위로 논리 연산을 수행한 결과를 결과 영상의 픽셀값으로 설정한다.

2.1. 논리 연산 표

2.2. OpenCV 함수

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());

📙강의 - 강사 황선규

profile
JUST DO IT.

0개의 댓글