이미지 처리에서 자주 사용되는 기법 중 하나는 이미지를 빨강(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) 컬러맵을 사용하면, 값이 클수록 해당 색상이 진하게 표현됩니다. 덕분에 각 채널의 강도 분포를 직관적으로 확인할 수 있습니다.
입력 이미지


출력 결과


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