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()
画像ファイル一覧が入っているフォルダの調べ方
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()
以下が出力された画像。
画像を保存したいときは以下のコマンドで保存できる。
from skimage import io as skio skio.imsave('output.png', dsts)
camera, astronaut, coinsくらいしか使ったことなかったので勉強になった。