こんにちは、牧野です。最近、夏みたいに暑い日が続いていますね。
今日は、これからオフィス移転のための引越準備です。このブログをアップしたら、本格的に片付けです。
今回は、趣味のプログラミングです。ずっと前からやってみたいと思っていたネタがあったので、それを作ってみました。
それは、小さな画像を並べて、全然別の大きな画像を作る、というものです。
今回は、次のような処理の流れににしました。
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枚)ミニ画像を作ってながめてみると、色に相当偏りがあります。オレンジや茶色の暖色系が多かったので、再現したい画像も同じような色合いのものを選びました。
できた画像がこちらです。
さて、これの元画像は何でしょう?