Pythonいぬ

pythonを使った画像処理に関する記事を書いていきます

skimage.dataに入っている画像の一覧

skimage.dataに入っている画像の一覧を調べてみた。

skimage.dataの読み出し 

まずはdataの読み出し。試しにcamera()を描画してみる。

from skimage import data
from matplotlib import pyplot as plt

img = data.camera()
plt.imshow(img)
plt.tight_layout()
plt.show()

f:id:tzmi:20191229113901p:plain

画像ファイル一覧が入っているフォルダの調べ方

ipythonで以下のコマンドを打って、画像ファイルの入ったフォルダのパスを表示する。

from skiamge import data
print(data.data_dir)

出力されたフォルダの中身を調べる。 下記がフォルダの中身。(試してみたskimageのversionsは0.14.0なので少し古いかもしれない)

__init__.py                   grass.png
__pycache__                   gray_morph_output.npz
_binary_blobs.py              green_palette.png
_blobs_3d_fiji_skeleton.tif   horse.png
astronaut.png                 hubble_deep_field.jpg
astronaut_GRAY_hog_L1.npy     ihc.png
astronaut_GRAY_hog_L2-Hys.npy lfw_subset.npy
block.png                     logo.png
brick.png                     moon.png
bw_text.png                   motorcycle_disp.npz
bw_text_skeleton.npy          motorcycle_left.png
camera.png                    motorcycle_right.png
checker_bilevel.png           mssim_matlab_output.npz
chelsea.png                   multi.fits
chessboard_GRAY.png           multipage.tif
chessboard_GRAY_U16.tif       multipage_rgb.tif
chessboard_GRAY_U16B.tif      no_time_for_that_tiny.gif
chessboard_GRAY_U8.npy        orb_descriptor_positions.txt
chessboard_GRAY_U8.npz        page.png
chessboard_RGB.png            palette_color.png
chessboard_RGB_U8.npy         palette_gray.png
chessboard_RGB_U8.npz         phantom.png
clock_motion.png              rank_filter_tests.npz
coffee.png                    rocket.jpg
coins.png                     rough-wall.png
color.png                     simple.fits
diamond-matlab-output.npz     tests
disk-matlab-output.npz        text.png
foo3x5x4indexed.png           truncated.jpg

画像リストの取得

from skimage import data
from glob import glob

tdir = data.data_dir

imgs = glob('%s/*.jpg' % tdir)
pngs = glob('%s/*.png' % tdir)
tifs = glob('%s/*.tif' % tdir)

imgs.extend(pngs)
imgs.extend(tifs)

imgs = sorted(imgs)

画像リストをリサイズして接続、描画

リサイズにはopencvを使うが入ってなかったら以下のコマンドで入れる。

$ pip install opencv-python

最後のtruncated.jpgが画像ファイルでないから開けないと言われるので、imgsリストの最後以外を開く。

import numpy as np
import cv2
from matplotlib import pyplot as plt
from skimage import io as skio # pythonのioと被らないようにskioと名付けておく

dsts = []
for ifile in imgs[:-1]:
     img = skio.imread(ifile)
     img = cv2.resize(img, (128, 128)) # 画像のリサイズ
     img = img.astype(np.uint8)
     if len(img.shape)==2: # グレー画像はRGBに変換
         img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)
     else: # pngのアルファチャネルは無視
         img = img[:,:,:3]
     dsts.append(img)

# 画像の数がm^2になるようにzero画像を追加
dsts = np.array(dsts)
n, h, w, c = dsts.shape
m = int(np.ceil(n**0.5))
add = np.zeros((m**2-n, h, w, c), dtype=np.uint8)
dsts = np.append(dsts, add, axis=0)

# 画像を縦と横に並べる
dsts = dsts.reshape(m,m,h,w,c) # nをm, mに割る
dsts = dsts.transpose(0,2,1,3,4) # m, h, m, w, cとなるように並べ替え
dsts = dsts.reshape(m*h,m*w,c) # 結合

# 画像をplotする
plt.imshow(dsts)
plt.tight_layout()
plt.show()

以下が出力された画像。

f:id:tzmi:20191229114029p:plain

画像を保存したいときは以下のコマンドで保存できる。

from skimage import io as skio
skio.imsave('output.png', dsts)

camera, astronaut, coinsくらいしか使ったことなかったので勉強になった。