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. 영상의 산술 및 논리 연산
영상의 산술 연산
- 덧셈 연산

- 가중치 합(weighted sum)

-
두 영상의 같은 위치 픽셀 값에 대해 가중합을 계산하여 결과 영상의 픽셀 값으로 설정
-
보통 α+β=1 이 되도록 설정 → 두 입력 영상의 평균 밝기 유지

-
src1 : 첫번째 영상
-
alpha : 첫번째 영상 가중치
-
src2 : 두번째 영상. src1 과 같은 크기 & 같은 타입
-
beta : 두번째 영상 가중치
-
gamma : 결과 영상에 추가적으로 더할 값
-
dst : 가중치 합 결과 영상
-
dtype : 출력 영상(dst)의 타입
- 평균 연산(average)
- 뺄셈 연산

- 차이 연산

- 연산 별 결과

영상의 논리 연산
- 비트 단위 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)
- 히스토그램 평활화를 위한 변환 함수 구하기
- 히스토그램 함수 구하기 : h(g)=Ng
- 정규화 된 히스토그램 함수 구하기 : p(g)=h(g)/wxh
- 누적 분포 함수(cdf) 구하기 : ∑0<=i<gp(i)
- 변환 함수 : dst(x,y)=round(cdf(src(x,y))×Lmax
- 히스토그램 평활화와 히스토그램 누적 분포 함수와의 관계

- 히스토그램 스트레칭과 평활화 비교

컬러 영상의 히스토그램 평활화
- 컬러 히스토그램 평활화
-
직관적 방법 : 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를 활용한 컴퓨터비전과 딥러닝>