[2021/11/02] OpenCV Chapter3 기본적인 영상 처리 기법

5nam·2023년 8월 27일

ComputerVision

목록 보기
3/3

Chapter 3 기본적인 영상 처리 기법

1. 영상의 밝기 조절

영상의 화소 처리 기법

  • 화소 처리 (Point processing)
    • 입력 영상의 특정 좌표 픽셀 값을 변경하여 출력 해당 좌표 픽셀 값으로 설정하는 연산

    • 아래의 변환 함수를 사용함. 아래 그래프의 f1, f2, f3 는 각각 변환 정도가 다른 것.

    • 결과 영상의 픽셀 값이 정해진 범위(0 ~ 255 등) 에 있어야 함.

    • 반전, 밝기 조절, 명암비 조절 등

밝기 조절

  • 영상을 전체적으로 더욱 밝거나 어둡게 만드는 연산
  • 밝기 조절 수식

  • 위의 saturate 연산은 연산 결과가 0 ~ 255 범위내에 위치할 수 있도록(음의 혹은 양의 정수 n 과의 연산에서 음수나 255 초과가 나오지 않도록) 그런 값들은 0 or 255 로 바꿔주는 것.

영상의 밝기 조절을 위한 영상의 덧셈 연산

  • src 1 : (입력) 첫 번째 영상 또는 스칼라
  • src 2 : (입력) 두 번째 영상 또는 스칼라

→ 위의 src1, src2 로 연산하여 출력 이미지가 나오는 것.

  • dst : (출력) 덧셈 연산의 결과 영상
  • mask : 마스크 영상
  • dtype : 출력 영상(dst)의 타입.
  • 참고 사항
    • 스칼라는 실수 값 하나 또는 실수값 네 개로 구성된 튜플
    • dst 를 함수 인자로 전달하려면 dst 의 크기가 src1, src2와 같아야 하며, 타입이 적절해야 함.

2. 영상의 산술 및 논리 연산

영상의 산술 연산

  • 덧셈 연산
    • 두 영상의 같은 위치 픽셀 값을 더하여 결과 영상의 픽셀로 설정

    • 덧셈 결과 255보다 크면, 픽셀 값을 255로 설정 (포화 연산)

    • 참고 사항

      • 스칼라는 실수 값 하나 또는 실수 값 네 개로 구성된 튜플
      • dst 를 함수 인자로 전달하려면 dst의 크기가 src1, src2 와 같아야 하고 타입 적절해야 함.
  • 가중치 합(weighted sum)
    • 두 영상의 같은 위치 픽셀 값에 대해 가중합을 계산하여 결과 영상의 픽셀 값으로 설정

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

    • src1 : 첫번째 영상

    • alpha : 첫번째 영상 가중치

    • src2 : 두번째 영상. src1 과 같은 크기 & 같은 타입

    • beta : 두번째 영상 가중치

    • gamma : 결과 영상에 추가적으로 더할 값

    • dst : 가중치 합 결과 영상

    • dtype : 출력 영상(dst)의 타입

  • 평균 연산(average)
    • 가중치를 α=β=0.5\alpha=\beta=0.5 로 설정한 가중치 합

  • 뺄셈 연산 Untitled
    • 두 영상의 같은 위치 픽셀 값에 대하여 뺄셈 연산을 수행한 값을 결과 영상의 픽셀 값으로 설정

    • 뺄셈 결과가 0보다 작으면 픽셀 값을 0으로 설정 (포화 연산)

    • src1 : 첫 번째 영상 또는 스칼라

    • src2 : 두 번째 영상 또는 스칼라

    • dst : 뺄셈 연산 결과 영상

    • mask : 마스크 영상

    • dtype : 출력 영상(dst)의 타입

  • 차이 연산
    • 두 영상의 같은 위치 픽셀 값에 대하여 뺄셈 연산을 수행한 후, 그 절댓값을 결과 영상 픽셀 값으로 설정

    • 뺄셈 연산과 달리 입력 영상 순서에 영향을 받지 않음.

    • src1 : 첫번째 영상 또는 스칼라

    • src2 : 두번째 영상 또는 스칼라

    • dst : 차이 연산 결과 영상(차영상)

  • 연산 별 결과

영상의 논리 연산

  • 비트 단위 AND, OR, XOR, NOT 연산
    • src1 : 첫번째 영상 또는 스칼라
    • src2 : 두번째 영상 또는 스칼라
    • dst : 출력 영상
    • mask : 마스크 영상
    • 참고 사항
      • 각각의 픽셀 값을 이진수로 표현하고, 비트(bit) 단위 논리 연산을 수행

3. 컬러 영상과 색 공간

  • OpenCV와 컬러 영상
    • 컬러 영상은 3차원 numpy.ndarray 로 표현. img.shape = (h, w, 3)
    • openCV 에서는 RGB 순서 X, BGR 순서 기본 사용
  • RGB 색 공간
    • 빛의 삼원색인 빨간색(R), 녹색(G), 파란색(B)을 혼합하여 색상 표현 (가산 혼합)
  • (색상) 채널 분리
    • m : 다채널 영상(B,G,R) 로 구성된 컬러 영상
    • mv : 출력 영상
    • dst : 출력 영상의 리스트
  • (색상) 채널 결합
    • mv : 입력 영상 리스트 또는 튜플
    • dst : 출력 영상
  • RGB 색상 평면 나누기
  • 색 공간 변환
    • 영상 처리에서는 특정한 목적을 위해 RGB 색 공간을 HSV, YCrCb, Grayscale 등의 다른 색 공간으로 변환하여 처리
  • 색 공간 변환 함수
    • src : 입력 영상
    • code : 색 변환 코드 (ppt 참고)
    • dstCn : 결과 영상의 채널 수. 0이면 자동 결정.
    • dst : 출력 영상
  • RGB 색상 → 그레이스케일 : 변환
    • 장점 : 데이터 저장 용량 감소, 데이터 처리 속도 향상
    • 단점 : 색상 정보 손실
  • HSV 색 공간, 범위
    • Hue : 색상, 색의 종류
    • Saturation : 채도, 색의 탁하고 선명한 정도
    • Value : 명도, 빛의 밝기
    • 범위는 타입에 따라 다름.
  • YCrCb 색 공간, 범위
    • PAL, NTSC, SECAM 등 컬러 비디오 표준에 사용되는 색 공간
    • 영상 밝기 정보와 색상 정보를 분리하여 부호화 (흑백 호환을 위해)
    • Y : 밝기 정보(luma)
    • Cr, Cb : 색차(chroma)
    • 범위는 타입에 따라 다름.

4. 히스토그램 분석

히스토그램 분석

  • 히스토그램(Histogram)
    • 영상 픽셀 값 분포를 그래프 형태로 표현

    • 예로 그레이 스케일 영상에서 각 그레이 스케일 값에 해당하는 픽셀의 개수를 구하고, 이를 막대그래프 형태로 표현

  • 정규화된 히스토그램(Normalized histogram)
    • 각 픽셀의 개수를 영상 전체 픽셀 개수로 나눈 것

    • 해당 그레이스케일 값 갖는 픽셀이 나타날 확률

  • 히스토그램 구하기
    • images : 입력 영상 리스트
    • channels : 히스토그램을 구할 채널을 나타내는 리스트
    • mask : 마스크 영상. 입력 영상 전체에서 히스토그램을 구하려면 None 지정.
    • histSize : 히스토그램 각 차원의 크기(빈(bin)개수)를 나타내는 리스트
    • ranges : 히스토그램 각 차원의 최솟값과 최댓값으로 구성된 리스트
    • hist : 계산된 히스토그램 결과 (numpy.ndarray 타입)
    • accumulate : 기존의 hist 히스토그램에 누적하려면 True, 새로 만드려면 False.

5. 영상의 명암비 조절

영상의 명암비 조절

  • 명암비(Contrast)?
    • 밝은 곳과 어두운 곳 사이에 드러나는 밝기 정도의 차이
    • 컨트라스트, 대비
  • 기본적인 명암비 조절 함수
  • 효과적인 명암비 조절 함수
  • 히스토그램 스트레칭(Histogram stretching)
    • 영상의 히스토그램이 그레이스케일 전 구간에 걸쳐 나타나도록 변경하는 선형 변환 기법

영상의 자동 명암비 조절

  • 정규화 함수
    • src : 입력 영상
    • dst : 결과 영상
    • alpha
      • (노름 정규화인 경우) 목표 노름 값
      • (원소 값 범위 정규화) 최솟값
    • (원소 값 범위 정규화) 최댓값
    • norm_type : 정규화 타입
    • dtype : 결과 영상의 타입
    • mask : 마스크 영상
  • 히스토그램 스트레칭 변환 함수
    • 변환 함수의 직선의 방정식 구하기

6. 히스토그램 평활화

히스토그램 평활화

  • 히스토그램 평활화(Histogram equalization)
    • 히스토그램이 그레이스케일 전체 구간에서 균일한 분포로 나타나도록 변경하는 명암비 향상 기법

    • 히스토그램 균등화, 균일화, 평탄화

    • src : 입력 영상, 그레이스케일 영상.

    • dst : 결과 영상

  • 히스토그램 평활화를 위한 변환 함수 구하기
    • 히스토그램 함수 구하기 : h(g)=Ngh(g) = N_g
    • 정규화 된 히스토그램 함수 구하기 : p(g)=h(g)/wxhp(g) = h(g)/wxh
    • 누적 분포 함수(cdf) 구하기 : 0<=i<gp(i)\sum_{0<=i<g}{p(i)}
    • 변환 함수 : dst(x,y)=round(cdf(src(x,y))×Lmaxdst(x,y) = round(cdf(src(x,y))\times L_{max}
  • 히스토그램 평활화와 히스토그램 누적 분포 함수와의 관계
  • 히스토그램 스트레칭과 평활화 비교

컬러 영상의 히스토그램 평활화

  • 컬러 히스토그램 평활화
    • 직관적 방법 : R,G,B 각 색 평면에 대해 히스토그램 평활화

    • 밝기 성분에 대해서만 히스토그램 평활화 수행(색상 성분은 불변)

7. 특정 색상 영역 추출

특정 색상 영역 추출

  • RGB 색 공간에서 녹색 영역 추출 : 실습
  • HSV 색 공간에서 녹색 영역 추출 : 실습
    • src : 입력 행렬
    • lowerb : 하한 값 행렬 또는 스칼라
    • upperb : 상한 값 행렬 또는 스칼라
    • dst : 입력 영상과 같은 크기의 마스크 영상 (numpy.uint8), 범위 안에 들어가는 픽셀은 255, 나머지는 0으로 설정
  • 트랙바 이용한 특정 색상 영역 추출 : 실습

8. 히스토그램 역투영

히스토그램 역투영

  • 히스토그램 역투영(Histogram backprojection)
    • 영상의 각 픽셀이 주어진 히스토그램 모델에 얼마나 일치하는지 검사하는 방법
    • 임의의 색상 영역 검출 시 효과적
    • 히스토그램 역투영 함수
      • images : 입력 영상 리스트
      • channels : 역투영 계산에 사용할 채널 번호 리스트
      • hist : 입력 히스토그램(numpy.ndarray)
      • ranges : 히스토그램 각 차원의 최솟값, 최댓값으로 구성된 리스트
      • scale : 출력 역투영 행렬에 추가적으로 곱할 값
      • dst : 출력 역투영 영상. 입력 영상과 동일 크기, cv2.CV_8U

9. 실전 코딩 : 크로마 키 합성

  • 크로마 키(Chroma key) 합성이란?
    • 녹색 or 파란색 배경에서 촬영한 영상에 다른 배경 영상을 합성하는 기술
  • 구현할 기능
    • 녹색 스크린 영역 추출
    • 녹색 영역에 다른 배경 영상 합성하여 저장
    • 스페이스바 이용해 크로마 키 합성 동작 제어
  • 실습 코드 : chroma_ket.py

출처 : 패스트캠퍼스 <OpenCV를 활용한 컴퓨터비전과 딥러닝>

profile
포기하지 않는 백엔드 개발자 5nam입니다.

0개의 댓글