Pythonでフォトモザイクを実装する方法をわかりやすく解説
フォトモザイク(Photomosaic)とは、1枚の画像を正方形のグリッドに分割し、その各マスを別の画像や色のブロックに置き換える技法です。離れた場所から見ると元の画像がはっきりと見えますが、近づいて観察すると、さまざまな色の小さなブロックが集まって構成されていることが分かります。
この記事では、Pythonの「photomosaic」というモジュールを使って、簡単にフォトモザイク画像を作成する方法をご紹介します。
photomosaicモジュールのインストール
まずは以下のコマンドでphotomosaicモジュールをインストールします。依存関係としてscikit-learnモジュールも同時にダウンロードされます。
sudo pip3 install photomosaic
photomosaicモジュールの主な特徴
- タイルのサイズを自由に変更できる。
- 画像のディテール(細部)が重要な部分には、より小さなタイルを設定できる。
- Flickr APIを利用して、タイルとして使える大量の画像コレクションを取得できる。
この記事では、このモジュールを最もシンプルな形で実装する方法を見ていきます。サンプル画像にはscikit-image(skimage)ライブラリに含まれる画像を使用します。
使用する元画像

フォトモザイク作成の手順
- 元となる画像を読み込む(ここではskimageライブラリの画像を使用)。
- グリッドのタイルサイズを定義する。
- カラフルなRGB画像ブロックを作成し、プール(Pool)として保存する場所を指定する。
- そのフォルダをフォトモザイク用のプールとして設定する。
- プールとグリッドサイズを使ってフォトモザイクを生成する。
- 生成した画像を保存する。
- 終了する。
サンプルコード
from skimage.io import *
import sys
import photomosaic as phmos
from skimage import data
image = data.coffee() # skimageからコーヒーの画像を取得
# コマンドライン引数からモザイクのサイズを取得
mos_size = (int(sys.argv[1]), int(sys.argv[2]))
# すべての画像ブロックを作成し、プールを生成
phmos.rainbow_of_squares('square/')
square_pool = phmos.make_pool('square/*.png')
# モザイク画像を作成して保存
mosaic = phmos.basic_mosaic(image, square_pool, mos_size)
imsave('mosaic_op.png', mosaic)実行結果(1回目:グリッドサイズ 100 × 100)
$ python3 225.Photomosaic.py 100 100
5832it [00:02, 2506.05it/s]
analyzing pool: 100%|| 5832/5832 [00:08<00:00, 717.90it/s]
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:105: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15.
warn("The default mode, 'constant', will be changed to 'reflect' in "
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:110: UserWarning: Anti-aliasing will be enabled by default in skimage 0.15 to avoid aliasing artifacts when down-sampling images.
warn("Anti-aliasing will be enabled by default in skimage 0.15 to "
partitioning: depth 0: 100%|| 10000/10000 [00:00<00:00, 852292.94it/s]
analyzing tiles: 100%|| 10000/10000 [00:00<00:00, 93084.50it/s]
matching: 100%|| 10000/10000 [00:00<00:00, 30864.50it/s]
drawing mosaic: 100%|| 10000/10000 [00:00<00:00, 13227.12it/s]
/usr/local/lib/python3.6/dist-packages/skimage/util/dtype.py:141: UserWarning: Possible precision loss when converting from float64 to uint8
.format(dtypeobj_in, dtypeobj_out))
実行結果(2回目:グリッドサイズ 500 × 500)
$ python3 225.Photomosaic.py 500 500
5832it [00:02, 2634.16it/s]
analyzing pool: 100%|| 5832/5832 [00:08<00:00, 709.54it/s]
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:105: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15.
warn("The default mode, 'constant', will be changed to 'reflect' in "
/usr/local/lib/python3.6/dist-packages/skimage/transform/_warps.py:110: UserWarning: Anti-aliasing will be enabled by default in skimage 0.15 to avoid aliasing artifacts when down-sampling images.
warn("Anti-aliasing will be enabled by default in skimage 0.15 to "
partitioning: depth 0: 100%|| 250000/250000 [00:00<00:00, 456159.45it/s]
analyzing tiles: 100%|| 250000/250000 [00:02<00:00, 113937.01it/s]
matching: 100%|| 250000/250000 [00:07<00:00, 32591.43it/s]
drawing mosaic: 100%|| 250000/250000 [00:02<00:00, 104349.90it/s]
/usr/local/lib/python3.6/dist-packages/skimage/util/dtype.py:141: UserWarning: Possible precision loss when converting from float64 to uint8
.format(dtypeobj_in, dtypeobj_out))
まとめ
このように、Pythonのphotomosaicモジュールを使えば、わずか数行のコードで美しいフォトモザイク画像を生成できます。グリッドサイズを大きくするほど、各タイルが細かくなり、遠目にも近くでも自然に見える高精細なモザイクが完成します。ぜひご自身のお気に入りの画像でも試してみてください。
-
Pythonで画像を読み込む方法:OpenCVとPILを使った基本操作を解説
OpenCVによる画像処理OpenCV(Open Source Computer Vision)は、機械学習とコンピュータビジョンのために開発されたオープンソースのプログラミングライブラリです。コンピュータビジョンアプリケーション開発のための共通基盤を提供し、商用製品への機械学習の導入を迅速化します。OpenCVには、2,500以上の最適化されたアルゴリズムが含まれており、古典的な手法から最先端の手法まで、コンピュータビジョンと機械学習の両分野をカバーしています。これらの豊富なアルゴリズムにより、顔検出・認識、物体识别、動画内の人間の動作の分類、カメラの動きの追跡、複数画像の結合による高解像度
-
PythonのSunPyライブラリで太陽画像をプロットする方法
Pythonでは、SunPyというパッケージを使って太陽画像を作成・表示することができます。SunPyには、各地の太陽観測所や太陽研究機関が提供する陽子フラックスや電子フラックスなど、さまざまな太陽観測データが含まれています。 SunPyは、以下のコマンドで簡単にインストールできます。 pip install sunpy AIA画像とは ここではサンプルとしてAIA画像をプロットします。AIA(Atmospheric Imaging Assembly:大気圏撮像装置)は、NASAの太陽観測衛星SDO(Solar Dynamics Observatory)に搭載された観測機器の一つで、太陽大気を