Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib에서 이미지를 RGB 채널별로 다른 색상으로 표시하는 방법

이미지 처리에서 자주 사용되는 기법 중 하나는 이미지를 빨강(Red), 초록(Green), 파랑(Blue) 채널로 분리한 뒤, 각 채널을 서로 다른 색상 맵(colormap)으로 시각화하는 것입니다. Matplotlib의 imread() 함수를 사용하면 이 과정을 간단하게 구현할 수 있습니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯(subplot) 사이의 여백을 조정합니다.
  • plt.imread()를 사용해 파일에서 이미지를 읽어 배열(array)로 변환합니다.
  • 색상 맵과 제목 목록을 준비합니다.
  • 그림과 서브플롯 세트를 생성합니다.
  • 축(axes), 채널 이미지, 제목, 색상 맵을 zip()으로 묶습니다.
  • 묶인 객체들을 반복(iterate)하면서 각 채널 이미지의 제목을 설정하고 표시합니다.
  • show() 메서드를 사용해 최종 그림을 화면에 출력합니다.

예제 코드

import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

image = plt.imread('bird.png')
titles = ['With red channel', 'With green channel', 'With blue channel']
cmaps = [plt.cm.Reds_r, plt.cm.Greens_r, plt.cm.Blues_r]

fig, axes = plt.subplots(1, 3)
objs = zip(axes, (image, *image.transpose(2, 0, 1)), titles, cmaps)

for ax, channel, title, cmap in objs:
   ax.imshow(channel, cmap=cmap)
   ax.set_title(title)
   ax.set_xticks(())
   ax.set_yticks(())

plt.show()

코드 설명

핵심은 image.transpose(2, 0, 1) 부분입니다. 이미지 배열의 형태는 일반적으로 (높이, 너비, 채널) 순서인데, transpose를 통해 채널 차원을 앞으로 가져오면 빨강, 초록, 파랑 채널을 각각 개별적인 2차원 배열로 언패킹할 수 있습니다.

또한 Reds_r, Greens_r, Blues_r처럼 이름 뒤에 _r이 붙은 역방향(reversed) 컬러맵을 사용하면, 값이 클수록 해당 색상이 진하게 표현됩니다. 덕분에 각 채널의 강도 분포를 직관적으로 확인할 수 있습니다.

입력 이미지

Matplotlib에서 이미지를 RGB 채널별로 다른 색상으로 표시하는 방법Matplotlib에서 이미지를 RGB 채널별로 다른 색상으로 표시하는 방법

출력 결과

Matplotlib에서 이미지를 RGB 채널별로 다른 색상으로 표시하는 방법Matplotlib에서 이미지를 RGB 채널별로 다른 색상으로 표시하는 방법

실행 결과를 보면 왼쪽부터 빨간색 계열, 초록색 계열, 파란색 계열로 각 채널의 밝기 정보가 별도의 색상으로 렌더링된 것을 확인할 수 있습니다. 이 기법은 이미지의 색상 구성 분석, 채널별 특성 검토, 전처리 과정 디버깅 등에 유용하게 활용됩니다.