IO
imshow 함수
import matplotlib.pyplot as plt
import numpy as np
# 5x5 랜덤 배열
data = np.random.rand(5, 5)
plt.imshow(data, cmap='viridis', interpolation='nearest')
plt.colorbar() # 값과 색의 대응 막대 추가
plt.show()
Color map (cmap) 옵션
import matplotlib.pyplot as plt
import numpy as np
# 100x100 배열: 0~255 값 (가상의 화상)
grain_map = np.random.randint(0, 255, (100, 100))
fig=plt.figure(figsize=(8,2))
# 1x3 axes 생성
ax1=fig.add_subplot(131)
ax2=fig.add_subplot(132)
ax3=fig.add_subplot(133)
#--
# random하게 만들어진 0~255 사이의 값 확인
ax1.hist(grain_map.flatten())# histogram
##
cmaps=['jet','gray']
for i, ax in enumerate([ax2,ax3]):
ax.imshow(grain_map, cmap=cmaps[i])
ax.set_title(f'color map: {cmaps[i]}')

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
fn='../data/dualphase_sem.png' ## file name을 경로를 포함하여 정확하게 기입해야 한다.
img_rgba = Image.open(fn) ## PIL, RGBA
img_gray=img_rgba.convert('L') ## convert image into gray scale
img_gray=np.asarray(img_gray)
plt.imshow(img_gray,cmap='gray')
위 사진은 ferrite와 martensite가 같이 존재하는 dual-phase 철강 제품의 주사 전자 현미경 사진이다. 이 사진에서 밝은 부분은 ferrite, 어두운 부분은 martensite 상이다. 이를 구분하여 두 상의 ‘분율’을 구해보자.
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=Image.open('../data/dualphase_sem.png')
img=np.asarray(img)
print(img.shape)
## Canvas와 사용할 축을 2x2 grid의 형태로 만들자.
fig=plt.figure(figsize=(7,4))
ax1=fig.add_subplot(221)
ax2=fig.add_subplot(222)
ax3=fig.add_subplot(223)
ax4=fig.add_subplot(224)
## 첫번째 axis에는 각 화상(pixel)에서 0~255사이의
# 값들이 어떻게 분포하는지 histogram으로 그리자.
ax1.hist(img.flatten())
# 그리고 그 옆에 불러온 SEM 이미지를 그려보자.
ax2.imshow(img,cmap='gray')
## 아래는 ferrite상과 martensite 상을 구분하는 간단한 예시를 살펴보자.
#newimg=img.copy()
#flg=img>img.mean()
#newimg[flg]=255
#newimg[~flg]=0
#h=ax3.hist(newimg.flatten())
#ax4.imshow(newimg,cmap='gray')
#for i, ax in enumerate([ax1,ax3]):
# ax.set_ylim(0,300000)
#white,black=h[0][0],h[0][-1]
#ferrite=white/(white+black)
#martensite=black/(white+black)
#print(ferrite,martensite)