Loading [MathJax]/jax/output/HTML-CSS/config.js

[matplotlib] 43. 画像を2n×2nに分割して表示

matplotlib

はじめに

画像を2×2,4×4や8×8に分割して表示する方法について説明する。

コード

#image分割
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import ImageGrid
image = plt.imread('moonworld.jpg')
image.shape
#(800, 800, 3)
def image_div(image, div):
image_list = []
image_size = image.shape[0]
im_size = int(image_size/div)
for i in range(div):
for l in range(div):
im = image[im_size*i:im_size*(i+1)+1,im_size*l:im_size*(l+1)+1]
image_list.append(im)
fig = plt.figure(figsize=(8, 8))
grid = ImageGrid(fig, 111,
nrows_ncols=(div, div),
axes_pad=0.05,
share_all=True,
)
for i in range(len(image_list)):
grid[i].imshow(image_list[i])
grid[i].set_axis_off()
image_div(image,2)
view raw image_div.py hosted with ❤ by GitHub

解説

モジュールのインポート

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import ImageGrid
view raw image_div.py hosted with ❤ by GitHub

画像の読み込み

image = plt.imread('moonworld.jpg')
view raw image_div.py hosted with ❤ by GitHub

エピテランサ 月世界の発芽後4ヶ月の画像を用いる。画像の大きさは800×800となっている。

image.shape
#(800, 800, 3)
view raw image_div.py hosted with ❤ by GitHub

画像を分割し、Imagegrid で表示する関数

画像の分割

image_list = []
image_size = image.shape[0]
im_size = int(image_size/div)
for i in range(div):
for l in range(div):
im = image[im_size*i:im_size*(i+1)+1,im_size*l:im_size*(l+1)+1]
image_list.append(im)
view raw image_div.py hosted with ❤ by GitHub

image_listという空のリストを作成して、それに分割した画像を加えていく方法で画像の分割を行う。
divは分割数であり、2とした場合には2×2=4個に分割される。

Imagegridによる分割画像の表示

fig = plt.figure(figsize=(8, 8))
grid = ImageGrid(fig, 111,
nrows_ncols=(div, div),
axes_pad=0.05,
share_all=True,
)
for i in range(len(image_list)):
grid[i].imshow(image_list[i])
grid[i].set_axis_off()
view raw image_div.py hosted with ❤ by GitHub

axes_padにより画像間の間隔を調整できる。

画像の表示

image_div(image,2)
view raw image_div.py hosted with ❤ by GitHub

4×4に分割した画像の表示

image_div(image,4)
view raw image_div.py hosted with ❤ by GitHub

8×8に分割した画像の表示

image_div(image,8)
view raw image_div.py hosted with ❤ by GitHub
コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

numpyで画像の分割と連結 - Qiita
Deep Learning等で大きな画像をいくつかに分割したり、分割した画像を結合させたりすることがよくあるが、まとまった記事がなさそうだったのでメモ。動作環境Ubuntu 16.04Pyth…
[matplotlib] 19. mpl_toolkits.axes_grid1 の使い方(画像の表示)
axes_grid1のImageGridを用いて複数の画像を表示する方法

コメント