영상의 화소 처리 기법
화소 처리 (Point processing)
- 입력 영상의 특정 좌표 픽셀 값을 변경하여 출력 영상의 해당 좌표 픽셀 값으로 설정하는 연산
\( dst(x,y) \ = \ f(src(x,y)) \quad f \) : 변환함수
- 결과 영상의 픽셀 값이 정해진 범위 (e.g. 그레이 스케일)에 있어야 한다
- 반전, 밝기 조절, 명암비 조절 등등
영상의 밝기 조절
밝기 조절 수식
\( dst(x,y) \ = \ saturate(src(x,y) + n) \)
밝기 조절을 위한 덧셈 연산 (함수)
cv2.add(src1, src2, dst=None, mask=None, dtype=None)
- src1: (입력) 첫 번째 영상 또는 스칼라
- src2: (입력) 두 번째 영상 또는 스칼라
- dst: (출력) 덧셈 연산의 결과 영상
- mask: 마스크 영상
- dtype: 출력 영상(dst)의 타입. (e.g.) cv2.CV_8U, cv2.CV_32F 등
- 참고사항
- 스칼라(Scalar)는 실수 값 하나 또는 실수 값 네 개로 구성된 튜플
- dst를 함수 인자로 전달하려면 dst의 크기가 src1, src2와 같아야 하며, 타입이 적절해야 함
Grayscale , 밝기 100 증가 예제 코드
src = cv2. imread('lenna.bmp', cv2.IMREAD_GRAYSCALE)
dst1 = cv2.add(src, 100)
dst2 = src + 100
Color 영상 , 밝기 100 증가 예제 코드
src = cv2.imread('lenna.bmp')
dst1 = cv2.add(src, (100, 100, 100, 0))
dst2 = np.clip(src + 100., 0, 255).astype(np.uint8)
영상의 산술 연산
영상의 산술 연산
덧셈 연산
\( dst(x,y) = saturate(src1(x,y) + src2(x,y)) \)
- 두 영상의 같은 위치에 존재하는 픽셀 값을 더하여 결과 영상의 픽셀 값으로 설정한다.
- 덧셈 결과가 255보다 크다면 픽셀 값을 255로 설정 (포화 연산)
cv2.add(src1, src2, dst=None, mask=None, dtype=None)
함수 인자 정보는 위 서술한 세부내용 확인
가중치 합 (weighted sum)
\( dst(x,y) = saturate(\alpha * src1(x,y) \ + \ \beta * src2(x,y)) \)
- 두 영상의 같은 위치에 존재하는 픽셀 값에 대하여 가중합을 계산하여 결과 영상의 픽셀 값으로 설정
- 보통 \(\alpha \ + \ \beta = 1\) 이 되도록 설정 ☞ 두 입력 영상의 평균 밝기를 유지한다.
cv2.addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=None)
- src1: 첫 번째 영상
- alpha: 첫 번째 영상 가중치
- src2: 두 번째 영상. src1과 같은 크기 & 같은 타입
- beta: 두 번째 영상 가중치
- gamma: 결과 영상에 추가적으로 더할 값
- dst: 가중치 합 결과 영상
- dtype: 출력 영상(dst)의 타입
평균 연산 (average)
- 가중치를 \(\alpha \ = \ \beta \ = \ 0.5 \) 로 설정한 가중치 합
\( dst(x,y) = \frac{1}{2}(src1(x,y) + src2(x,y)) \)
뺄셈 연산
\( dst(x,y) = saturate(src1(x,y) - src2(x,y)) \)
- 두 영상의 같은 위치에 존재하는 픽셀 값에 대하여 뺄셈 연산을 수행하여 결과 영상의 픽셀 값으로 설정
- 뺄셈 결과가 0보다 작으면 픽셀 값을 0으로 설정 (포화 연산)
cv2.subtract(src1, src2, dst=None, mask=None, dtype=None)
src1: 첫 번째 영상 또는 스칼라
src2: 두 번째 영상 또는 스칼라
dst: 뺄셈 연산 결과 영상
mask: 마스크 영상
dtype: 출력 영상(dst)의 타입
차이 연산
\( dst(x,y) = |src1(x, y) src2(x, y)| \)
- 두 영상의 같은 위치에 존재하는 픽셀 값에 대하여 뺄셈 연산을 수행한 후, 그 절댓값을 결과 영상의 픽셀 값으로 설정
- 뺄셈 연산과 달리 입력 영상의 순서에 영향을 받지 않음
cv2.absdiff(src1, src2, dst=None)
- src1: 첫 번째 영상 또는 스칼라
- src2: 두 번째 영상 또는 스칼라
- dst: 차이 연산 결과 영상 (차영상)
영상 산술연산
'컴퓨터 비전' 카테고리의 다른 글
OpenCV :: Mat Class (1) (0) | 2023.01.10 |
---|---|
OpenCV :: 기본 자료형 클래스 (0) | 2023.01.09 |
히스토그램 (Histogram) (2) | 2022.12.28 |
OpenCV 기초 - 영상 속성과 픽셀 값 처리 (0) | 2022.12.19 |