[CV] #06. 영상의 산술 및 논리 연산

Jnary·2024년 1월 20일
0

Computer Vision

목록 보기
8/18
post-thumbnail

#06-1. 영상의 산술 연산

산술 연산

  • 영상은 일종의 2차원 행렬 → 행렬의 산술 연산 그대로 적용 가능
  • 덧셈 : 이미지 밝기 높아지는 효과 → 포화 연산 필요
  • 뺄셈 : 이미지 밝기 낮아지는 효과

→ 곱셈, 나눗셈은 거의 사용 X

덧셈

  • add(src1, src2, dst, mask = noArray(), dtype = -1)

    • dtype : 출력행렬의 깊이

      → src1 깊이 = src2 깊이 : dtype = -1

      → src1 깊이 ≠ src2 깊이 : dtype 지정 필수 !

    • 영상/행렬 or 정수/실수 자료형 전달

      → broadcasting 적용

    • 자동으로 포화연산 수행

    • 두 입력 영상의 윤관 조금씩 포함

    • 전반적으로 밝게 포화

  • addWeighted(src1, alpha, src2, beta, gamma, dst, dtype = -1)

    • gamma : 가중합 결과에 추가적으로 더할 값

    • 가중치 부여한 덧셈

    • 보통 a+b = 1이 되도록

      → 포화상태가 되지 않도록

    • a + b > 1 : 포화 현상 발생, 훨씬 밝아지게 됨

    • a + b < 1 : 평균 밝기보다 어두운 결과 영상

      Mat src1 = imread("a.bmp", IMREAD_GRAYSCALE);
      Mat src2 = imread("b.bmp", IMREAD_GRAYSCALE);
      Mat dst;
      addWeighted(src1, 0.5, src2, 0.5, 0, dst);
    • 평균 밝기 그대로 유지

뺄셈

  • subtract(src1, src2, dst, mask = noArray(), dtype = -1)

    • 영상 순서에 따라 결과 달라짐
  • absdiff(src1, src2, dst)

    • 뺄셈순서에 상관없이 픽셀 값 차이가 큰 영역 두드러지게 하고 싶을 때

    • 결과영상 : 차영상(difference image)

    • 두 개의 영상에 변화있는 영역 찾기

      → 현실에 적용 어려움 : 태양의 밝기 등 외부요소

곱셈, 나눗셈

  • 수행하는 경우 거의 X

  • 같은 위치에 있는 픽셀값끼리 연산

  • multiply(src1, src2, dst, scale = 1, dtype = -1)

    • scale : 추가적으로 확대/축소할 비율
  • divide(src1, src2, dst, scale = 1, dtype = -1)

#06-2. 영상의 논리 연산

논리 연산

  • 픽셀 값 → 이진수 : 각 비트 단위 논리 연산
  • AND, OR, XOR, NOT
  • 그레이스케일영상 : 1byte(8bit) 할당

OpenCV의 논리연산 함수

  • bitwise_and(src1, src2, dst, mask = noArray())
    • mask = 0 인 위치 논리연산 수행 X
    • 흰색 부분만 표시, 나머지 검정
  • bitwise_or(src1, src2, dst, mask = noArray())
    • 검정색 부분만 표시, 나머지 흰색
  • bitwise_xor(src1, src2, dst, mask = noArray())
    • 흰색 부분만 반전
  • bitwise_not(src1, dst, mask = noArray())
    • 전체 반전

+) pyplot

from matplotlib import pyplot as plt
plt.subplot(231), plt.axis('off'), plt.imshow(src1, 'gray'), plt.title('src1')
...
plt.show()

profile
숭실대학교 컴퓨터학부 21

0개의 댓글