def gamma(f,gamma=1.0):
f1=f/255.0
return np.uint8((255*(f1**gamma)))
"""
감마 보정을 적용하는 함수
Parameters:
f (ndarray): 입력 이미지
gamma (float): 감마 값, 기본값은 1.0
Returns:
ndarray: 감마 보정이 적용된 이미지
"""
gc = np.hstack((gamma(img,0.5),gamma(img,0.75),gamma(img,1.0),gamma(img,2.0),gamma(img,3.0)))
히스토그램이 평평하게 되도록 영상을 조작해서 명암 대비를 높이는 기법
=> 물체를 더 잘 식별가능함
# OpenCV와 Matplotlib
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread("./.data/segmentation.png")
# 컬러 이미지를 그레이스케일로 변환
# BGR 이미지를 그레이스케일로 변환하여 픽셀당 1개의 채널만 가지도록 함
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 그레이스케일 이미지 출력
plt.imshow(gray, cmap="gray"), # 그레이스케일 이미지 표시 (cmap='gray'로 그레이스케일 컬러맵 사용)
plt.xticks([]), # x축 눈금 제거
plt.yticks([]), # y축 눈금 제거
plt.show() # 그래프 표시
# 원본 그레이스케일 이미지의 히스토그램 계산
# 히스토그램: 이미지의 픽셀 값 분포를 보여주는 그래프
h = cv.calcHist(
[gray], # 히스토그램을 계산할 이미지 (리스트 형태로 제공)
[0], # 채널 인덱스 (그레이스케일은 채널이 1개이므로 0)
None, # 마스크 (None은 전체 이미지 사용)
[256], # 히스토그램 구간(bin) 개수
[0, 256] # 계산할 픽셀 값 범위 (0-255)
)
# 원본 이미지의 히스토그램 표시
plt.plot(h, color='r', linewidth=1), # 빨간색 선으로 히스토그램 그래프 그리기
plt.show() # 그래프 표시
# 히스토그램 평활화 적용
# 히스토그램 평활화: 픽셀 값의 분포를 균일하게 만들어 대비(contrast)를 향상시키는 기법
equal = cv.equalizeHist(gray)
# 히스토그램 평활화가 적용된 이미지 출력
plt.imshow(equal, cmap='gray'), # 평활화된 그레이스케일 이미지 표시
plt.xticks([]), # x축 눈금 제거
plt.yticks([]), # y축 눈금 제거
plt.show() # 그래프 표시
# 평활화된 이미지의 히스토그램 계산
h = cv.calcHist(
[equal], # 히스토그램을 계산할 평활화된 이미지
[0], # 채널 인덱스
None, # 마스크
[256], # 히스토그램 구간(bin) 개수
[0, 256] # 계산할 픽셀 값 범위
)
# 평활화된 이미지의 히스토그램 표시
plt.plot(h, color='r', linewidth=1), # 빨간색 선으로 히스토그램 그래프 그리기
plt.show() # 그래프 표시
컨볼루션은 이미지 처리에서 가장 기본적이고 중요한 연산으로, 각 화소(픽셀)에 필터(또는 커널)를 적용하여 곱의 합을 구하는 연산.
import cv2
import numpy as np
# 이미지 로드
img = cv2.imread('image.jpg', 0) # 그레이스케일로 로드
# 커널 정의 (3x3 평균 필터)
kernel = np.ones((3, 3), np.float32) / 9
# 컨볼루션 적용
filtered_img = cv2.filter2D(img, -1, kernel)
# 또는 OpenCV의 내장 함수 사용
blurred_img = cv2.blur(img, (3, 3)) # 평균 블러
gaussian_img = cv2.GaussianBlur(img, (3, 3), 0) # 가우시안 블러
스무딩(블러링): 노이즈 제거, 이미지 부드럽게 만들기
샤프닝: 이미지의 디테일과 에지를 강조
에지 검출: 이미지에서 경계선 추출
특징 추출: 이미지에서 특정 패턴이나 특징 검출
컨볼루션은 이미지 처리뿐만 아니라 딥러닝의 CNN(Convolutional Neural Network)에서도 핵심 연산으로 사용.