ここでは,matplotlib の様々なオプションを指定して画像を表示させるための show
関数と,画像の一部を拡大表示してグレースケールについては画素ごとに色情報も表示できる show_zoom_with_color
関数を定義します.まず,後で利用するものも含めて必要なライブラリをインポートします.
import numpy as np
from skimage import color
from skimage import filters
from skimage import restoration
from skimage import util
import matplotlib.pyplot as plt
# 次の2行は高解像度ディスプレイ対応
from IPython.display import set_matplotlib_formats
# from matplotlib_inline.backend_inline import set_matplotlib_formats # バージョンによってはこちらを有効に
set_matplotlib_formats('retina')
次に,show
関数を定義します.
def show(img,
cmap=plt.cm.gray,
file_name = 'output.png',
figsize=(6,6),
set_axis_off= False,
save_png=True,
dpi=300):
fig, ax = plt.subplots(1, 1, figsize=figsize, constrained_layout=True)
ax.imshow(img, cmap=cmap)
if set_axis_off:
ax.set_axis_off()
if save_png:
plt.savefig(file_name, dpi=dpi, facecolor='white')
plt.show()
グレースケールの画像を表示して,色情報を画素に出力する show_zoom_with_color
関数も定義しておきます.
def show_zoom_with_color(
img,
cmap=plt.cm.gray,
xlim=(0,10),
ylim=(10, 0),
fontsize=12,
figsize=(6,6),
show_color=True,
file_name='output.png',
save_png=True,
set_axis_off=False,
dpi=300,
):
fig, ax = plt.subplots(1, 1, figsize=figsize, constrained_layout=True)
ax.imshow(img, cmap=cmap)
ax.set_xlim(xlim)
ax.set_ylim(ylim)
if show_color:
for y in range(int(ylim[1]+1), int(ylim[0]+1)):
for x in range(int(xlim[0]+1), int(xlim[1]+1)):
gray = int(img[y,x]*255+0.5) # 四捨五入
if gray > 127:
color = 'black'
else:
color = 'white'
ax.text(x, y, gray,
linespacing=1, size=fontsize,
verticalalignment='center',
horizontalalignment='center',
color=color)
if set_axis_off:
ax.set_axis_off()
if save_png:
plt.savefig(file_name, dpi=dpi, facecolor='white')
plt.show()
関数 show
にオプショナル引数を指定しない場合は,画面に表示されるだけでなく,カレントディレクトリに output.png というファイル名で保存されます.そのときに保存されるファイルの解像度が 300dpi になります.
ink_img = plt.imread('ink.png')
show(ink_img)
書き出されるファイル名を指定するには file_name
引数を利用します.
ink_img = plt.imread('ink.png')
show(ink_img, file_name='output_ink.png')
ファイルに書き出す必要がない場合は save_png
引数に False
を指定します.
ink_img = plt.imread('ink.png')
show(ink_img, save_png=False)
軸メモリを消去するには set_asis_off
引数に True
を指定します.
ink_img = plt.imread('ink.png')
show(ink_img, set_axis_off=True)
ファイルに書き出す際のデフォルトの解像度は 300dpi です.これを変更するには dpi
引数を指定します.例えば 50dpi で書き出した場合は次のようになります.上の結果と比較すると,軸メモリの値の表示が荒くなっていることが確認できるはずです.
ink_img = plt.imread('ink.png')
show(ink_img, dpi=50)