본문 바로가기
Matplotlib/이미지맵(imshow)

[파이썬 matplotlib] 이미지맵(imshow)의 원리

by 만다린망고 2020. 11. 26.
반응형

imshow는 원하는 사이즈의 픽셀을 원하는 색으로 채워서 만든 그림입니다. 쉽게말하면 원하는 크기의 행렬을 만들어서 각 칸을 원하는 색으로 채우는 것입니다. 

각 칸을 채우는 방법은 colormap, RGB, RGBA 의 네가지가 있습니다. 아래 순서로 설명하겠습니다.

1) colormap 디폴트
2) colormap 변경방법
3) RGB
4) RGBA

하나씩 알아봅시다. 

 

1) colormap 디폴트

먼저 3행3열의 행렬을 만들고 각 값을 아래와 같이 채워보겠습니다. 

import numpy as np
from matplotlib import pyplot as plt

Z=np.array([[10,0,0],[0,10,0],[0,0,10]])


행렬형태로 표현하면 아래와 같습니다. 

10 0 0
0 10 0
0 0 10 

imshow 함수를 적용해봅시다. 

plt.imshow(Z)
plt.show()

 

 

보라색과 노란색이 나온 이유는 colormap 의 디폴트 값이 viridis 로 설정되어 있기 때문입니다. 색을 변경해보기 전에 설정되는 원리부터 알아봅시다. viridis라는 colormap은 최솟값이 보라, 최댓값이 노랑입니다. 우리가 입력한 숫자를 0~1 사이로 노멀라이즈하여 색으로 나타냅니다. 예를들어 아래와 같이 입력해도 결과는 같습니다.

 

Z=np.array([[20,2,2],[2,20,2],[2,2,20]])

plt.imshow(Z)
plt.show()

 

 

최솟값2가 0으로, 최댓값 20이 1로 노멀라이즈 되었기 때문입니다. 사잇값들을 입력하면 마찬가지로 노멀라이즈 되어 출력됩니다.

 

Z=np.array([[20,5,2],[2,20,3],[11,2,20]])
plt.imshow(Z)
plt.show()




2) colormap 변경방법

colormap을 변경하고자 할때, cmap 옵션을 이용하여 변경할 colormap을 입력하면 됩니다. cm모듈을 import하고, cm모듈 안에 있는 colormap을 옵션값으로 입력하면 됩니다. 아래는 흑백옵션이 입력된 예시입니다. 

 

import numpy as np

import matplotlib.cm as cm

from matplotlib import pyplot as plt


Z=np.array([[20,5,2],[2,20,3],[11,2,20]])
plt.imshow(Z)plt.imshow(Z, cmap = cm.gray)
plt.show()

 

흑백 이외에 설정할 수 있는 cmap 옵션은 엄청나게 많습니다. 아래 링크에서 확인 가능합니다.

https://matplotlib.org/tutorials/colors/colormaps.html

문자열로 되어있는 값들이 전부 cmap 옵션입니다. 

3) RGB

RGB는 행렬의 각 원소로 [R,G,B] 값을 입력하면 됩니다. 값은 0-1 사이 실수 혹은 0-255 사이 정수로 입력합니다. 아래는 예시입니다. 

import numpy as np
import matplotlib.cm as cm
from matplotlib import pyplot as plt

Z=np.array(
[
     [[255,0,0],[255,0,0],[255,0,0]],
     [[0,255,0],[0,255,0],[0,255,0]],
     [[0,0,255],[0,0,255],[0,0,255]]
])

plt.imshow(Z)
plt.show()

 


4) RGBA

RGBA에서 A는 투명도입니다. RGBA는 행렬의 각 원소로 [R,G,B,A] 값을 입력하면 됩니다. 값은 0-1 사이 실수 혹은 0-255 사이 정수로 입력합니다. 투명도는 0-1사이 정수입니다. 

아래는 예시입니다. 

import numpy as np
import matplotlib.cm as cm
from matplotlib import pyplot as plt

Z=np.array(
[
     [[255,0,0,0.2],[255,0,0,0.2],[255,0,0,0.2]],
     [[0,255,0,0.5],[0,255,0,0.5],[0,255,0,0.5]],
     [[0,0,255,1],[0,0,255,1],[0,0,255,1]]
])

plt.imshow(Z)
plt.show()

 

반응형

댓글