이미지 향상 프로세스는 이미지의 시각적 무결성을 향상시키는 것을 궁극적인 목표로 컴퓨터 비전과 이미지 편집 모두에서 필수적인 구성 요소로 작용합니다.

이미지 품질을 개선함으로써 이미지 평가 및 처리 방법의 정밀도와 신뢰성을 현저하게 높일 수 있습니다. 이는 물체를 식별, 구분, 분할, 추적해야 하는 경우에 특히 중요합니다.

낮은 조명 조건, 센서 노이즈, 모션 블러 또는 전송 오류와 같은 다양한 요인으로 인한 이미지 품질 저하를 개선하기 위해 이미지 향상 기술을 사용할 수 있습니다.

환경 설정

파이썬 환경을 초기화한 후 터미널에서 다음 명령을 실행하여 OpenCV 라이브러리를 설치합니다. OpenCV를 활용하여 기본 이미지를 로드 및 처리하고 최종 증강 이미지를 저장합니다.

 pip install opencv-python

Matplotlib를 활용하여 두 가지 시각적 표현을 표시합니다. 설치하려면 다음 명령을 실행하세요:

 pip install matplotlib

궁극적으로 감마 보정을 위한 룩업 테이블을 생성하고 이미지 선명화를 위한 커널을 묘사할 수 있는 수치 계산에 활용되는 라이브러리인 NumPy를 설치해야 합니다.

 pip install numpy 

환경 내에 이러한 라이브러리를 설치했으면 이제 프로그래밍을 시작할 준비가 된 것입니다.

이 데모의 전체 소스 코드는 GitHub 리포지토리에서 확인할 수 있습니다.

필요한 라이브러리 가져오기

이전에 사용자 환경으로 가져온 라이브러리를 사용하는 것이 좋습니다.

 import cv2
import matplotlib.pyplot as plt
import numpy as np

기존 코드와의 호환성을 보장하고 다른 개발자가 쉽게 이해할 수 있도록 OpenCV를 “cv2″로 임포트해야 한다는 점에 유의하시기 바랍니다.

원본 이미지 불러오기 및 표시하기

프로그램에서 다양한 이미지 향상 기법을 적용하기 위한 기초가 되는 cv2.imread 함수를 활용하여 초기 이미지를 임포트하는 것으로 시작합니다. 그런 다음 적절한 matplotlib 함수를 통해 이미지를 표시합니다.

 image = cv2.imread('example.jpg')
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.show()

실제 시각적 표현의 활용은 향후 응용 프로그램에서 생성된 결과의 비교를 용이하게 하는 역할을 합니다.

앞서 언급한 그림은 프로그램의 입력으로 사용됩니다.

이미지의 노이즈 줄이기

노이즈 제거 프로세스는 이미지 내에 존재하는 임의의 왜곡을 제거하여 보다 유동적이고 시각적으로 매력적인 결과물을 얻기 위해 노력하는 비로컬 수단이라는 알고리즘을 활용합니다.OpenCV에서 제공하는 빠른 NL 수단 노이즈 제거 컬러 기능은 이러한 목적을 효과적으로 수행하여 사용자가 원본 이미지의 복잡한 디테일을 보존하면서 노이즈 내용을 줄일 수 있도록 합니다.

 # Apply image enhancements
# Denoise the image
denoised_image = cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21)

빠른 NL 수단 알고리즘에서 사용하는 노이즈 제거 프로세스에는 원본 이미지, 필터 강도, 템플릿 창 크기 및 검색 창 크기와 같은 여러 입력 변수가 포함됩니다. 이 방법의 구현은 고도로 사용자 정의할 수 있으므로 이러한 변수를 조정하여 최적의 시각적 결과를 얻을 수 있습니다.

이 글도 확인해 보세요:  Rust에서 기본 HTTP 웹 서버를 빌드하는 방법

대비를 늘려 디테일 가시성 향상

대비 스트레칭이라고도 하는 정규화에는 특정 범위를 포함하도록 강도 값 스케일을 확장하여 이미지의 디테일에 대한 인지도를 향상시키는 작업이 포함됩니다.

OpenCV의 노멀라이제이션 기술을 활용한 콘트라스트 스트레칭을 적용하여 노이즈가 제거된 이미지의 선명도를 향상시키는 과정은 다음과 같이 수행할 수 있습니다.

 # Perform contrast stretching
contrast_stretched_image = cv2.normalize(denoised_image, None, 255, 0, cv2.NORM_MINMAX, cv2.CV_8UC1)

이미지 선명하게 하는 방법

이미지 선명화 기술을 적용하면 시각적 표현의 윤곽과 복잡성을 강조하여 묘사된 요소의 선명도와 명료도를 더욱 뚜렷하게 만들 수 있습니다.

 # Image Sharpening
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
sharpened_image = cv2.filter2D(contrast_stretched_image, -1, kernel=kernel)

이 프로그램을 구현하면 입력 이미지 내의 윤곽과 특징을 강조하는 커널 매트릭스가 생성됩니다. 특히 콘트라스트가 확장된 시각적 표현에 cv2.filter2D 함수를 적용하면 더 선명하고 명확하게 표현할 수 있습니다.

노출 개선을 위한 밝기 조정

밝기 조정 기능은 시각적 표현의 일반적인 휘도를 조절하여 미적 매력을 향상시키고 최적의 노출을 달성하기 위한 것입니다.

 # Brightness Adjustment
brightness_image = cv2.convertScaleAbs(sharpened_image, alpha=1, beta=5)

`cv2.convertScaleAbs` 함수는 밝기와 대비를 조작하여 이미지의 조명 수준을 수정합니다. 구체적으로 `alpha` 매개변수는 대비를 변경하고 `beta` 매개변수는 밝기에 영향을 줍니다. 베타` 값을 높이면 이미지가 더 밝아집니다.

감마 보정을 적용하여 이미지 밝게 하기

감마 보정을 적용하면 노출 조정 후 이미지가 지나치게 밝게 보일 수 있습니다. 감마 보정은 시각적 표현의 일반적인 밝기와 대비를 조절하여 노출 부족 또는 과포화 상태를 보정하는 데 사용됩니다.

 # Gamma Correction
gamma = 1.5
lookup_table = np.array([((i / 255.0) ** gamma) * 255 for i in np.arange(0, 256)]).astype("uint8")
gamma_corrected_image = cv2.LUT(brightness_image, lookup_table)

앞서 언급한 코드 세그먼트는 밝기 변조된 이미지에 감마 보정 변환을 적용하는 룩업 테이블을 구성합니다.감마 계수에 따라 조정이 결정되며, 1을 초과하는 값을 사용하여 이미지를 어둡게 하고 1 미만의 값을 사용하여 휘도를 향상시킵니다.

최종 보정 이미지 저장 및 표시

앞서 언급한 보정 방법을 구현한 후 보정된 디지털 이미지를 지정된 파일에 저장하는 것이 좋습니다.

 # Save final image
cv2.imwrite('final_image.jpg', gamma_corrected_image)

프로그램의 결과를 보다 정교하게 표현하기 위해 계산된 값의 시각화를 만들기 위해 matplotlib와 numba 라이브러리를 활용했습니다. 첫 번째 단계는 컴퓨터 코드에서 생성된 수치 데이터를 쉽게 해석할 수 있는 그래픽 표현으로 변환하는 것이었습니다. 여기에는 원시 데이터 포인트를 x-y축 좌표계에 그리기에 적합한 형식으로 변환하는 작업이 포함되었습니다. 다음으로, 분석의 특정 요구 사항에 따라 선 그래프, 막대 차트 또는 분산형 차트와 같은 다양한 유형의 플롯을 생성하기 위해 matplotlib의 내장 함수를 사용했습니다. 마지막으로 이러한 시각화를 원본 입력 데이터와 함께 표시하여 사용자가 두 가지 형식의 정보를 비교하고 대조할 수 있도록 했습니다. 이를 통해 사용자에게 직관적이고 시각적으로 매력적인 이해 수단을 제공할 수 있었습니다.

 # Display the final enhanced image
plt.imshow(cv2.cvtColor(gamma_corrected_image, cv2.COLOR_BGR2RGB))
plt.title('Final Enhanced Image')
plt.show()

필요한 모든 수정 및 개선 작업을 완료한 결과, 아래와 같은 이미지가 완성되었습니다.

이 글도 확인해 보세요:  어수선한 카메라 롤을 정리하는 방법: 검증된 7가지 방법

이미지 개선의 미래

이미지 개선의 발전은 인공 지능의 영역으로 기울어지고 있습니다. 머신 러닝을 통해 설계된 알고리즘은 외부의 도움 없이도 영상에 이미지 개선 기술을 자율적으로 실행하도록 지시받고 있습니다.

이 세트의 각 프로그램은 개별 비주얼을 자율적으로 처리하므로 각 이미지에 대해 앞서 언급한 방법을 다양하게 사용합니다.

By 박준영

업계에서 7년간 경력을 쌓은 숙련된 iOS 개발자인 박준영님은 원활하고 매끄러운 사용자 경험을 만드는 데 전념하고 있습니다. 애플(Apple) 생태계에 능숙한 준영님은 획기적인 솔루션을 통해 지속적으로 기술 혁신의 한계를 뛰어넘고 있습니다. 소프트웨어 엔지니어링에 대한 탄탄한 지식과 세심한 접근 방식은 독자에게 실용적이면서도 세련된 콘텐츠를 제공하는 데 기여합니다.