PHPで作る面白コラージュ写真

こんにちは、牧野です。最近、夏みたいに暑い日が続いていますね。

今日は、これからオフィス移転のための引越準備です。このブログをアップしたら、本格的に片付けです。
今回は、趣味のプログラミングです。ずっと前からやってみたいと思っていたネタがあったので、それを作ってみました。
それは、小さな画像を並べて、全然別の大きな画像を作る、というものです。

今回は、次のような処理の流れににしました。
1.ミニ画像の元となる画像をたくさん用意し、ミニ画像を作成。
2.再現したい大きな画像を用意して、小さく分割。
3.分割した各画像について、ミニ画像の中から一番似ている画像をピックアップ。
4.ピックアップした画像を並べて、新しい画像を作成。

今回のプログラムの要になるのが、「ミニ画像の中からどうやって一番似た画像を見つけるか」というところになります。
各ピクセルのRGBの平均、とかやると全然ダメそうな気がしたので調べてみると、いいロジックがありました。

http://d.hatena.ne.jp/aidiary/20091003/1254574041

画像ごとに、各ピクセルの色分布を用意し、一番近い色分布の画像を選ぶ、というものです。
2つの画像の色分布の、同じ分布位置の数のうち、小さい方を選んでいって合計する、というのに一瞬あれ?と思ったのですが、色分布の合計は画像のピクセル数になるので、納得です。

作ったプログラムがこちらです。

common.php
create_mini_pic.php
create_resemble_pic.php

imagickとGD両方使っていたり、コマンドのエスケープをしていなかったり、エラー処理がなかったりしますが、目をつむる方向で。。。

ミニ画像を作るための画像は、会社の誕生日会や社員旅行の写真を使用しました。(約100枚)ミニ画像を作ってながめてみると、色に相当偏りがあります。オレンジや茶色の暖色系が多かったので、再現したい画像も同じような色合いのものを選びました。

できた画像がこちらです。

さて、これの元画像は何でしょう?