フォトモザイク
フォトモザイクとは、小さな画像を組み合わせて、
一枚の大きな画像を表現する手法のことを言います。
少し前、Macの雑誌の表紙で、故スティーブジョブスの顔写真にフォトモザイク処理が
施されているのを見て、ちょっと、パクって見ようと思いたち、プログラムを作って見ました。
作ったプログラムと、フォトモザイク作成手順は下記リンクに
それぞれ、PhotoMosaic.zip、モザイク.xlsxとしておいてます。
(※書きなぐったプログラムで、動けば良いという割り切り、
僕の開発環境に依存しまくりエラー処理なんか特に厳密に実施してないので
目に毒なのですが...。バグもまだあるしなー。)
ひとまず動くプログラムの試験運用も兼ねて、僕が一番大好きな
ハリウッド女優のmilla jovovichのご尊顔に対して、フォトモザイクの結果を得ました。
それがこれ↓
モザイク前
モザイク後
アップするのに解像度を落としてます。
フル解像度のデータは、こちら↓
サイズ、馬鹿みたいにデカイのでクリックには気をつけて下さい。14Mbyteあります。
https://5182697819625198790-a-1802744773732722657-s-sites.googlegroups.com/site/k3ijogadget/milla-gonna-be-a-mosaic/mira_tmp_avg_mosa.png?attachauth=ANoY7cqyNfYoCw4Msd793OI6opi2VDf7vgUS0CIfBs7XWRnxzXpf8uGlI4grSUOV1xplQO_8jIXNKfhaaPcmlzcwgw_px9sMyDhv58svaPfmlyDlV5nQietkZMpelkl7fVziYiYiZFiNv__jizw0x5FU6tGAvvcGSr6p4gvfTFeI0-X8oX_8qH-O11Zs8Huc25s10RTfmsvaNuxEjdA8uEUv6h0ilEDjxumT4dgx4jkL6V1F3zXvJf4%3D&attredirects=0
フル解像度のデータを見たら
複数の小さな画像で、milla jovovichのご尊顔がこんな感じ↓で構成されているのが分かるかと...。
相変わらず、お美しい...。いいなぁ、こんな美人を嫁に貰える人って。
ひとまず、試験運用は無事?済みました。
一応、フォトモザイクの理論?というか原理を下記に説明しておきます。
フォトモザイクの原理
ベース画像:モザイク処理を掛ける元となる画像
サブ画像 :ベース画像に埋め込む画像
セル :ベース画像を四角形に分割したもの。
1. モザイク処理を掛けたい画像(以下、ベース画像といいます)を、
小さい四角形(以下、セル)に分割します。
2. 分割されたセルにそれぞれに対して、色の3原色(RGB値)の平均値を求めます。
3. サブ画像一枚一枚に対して、RGBそれぞれの平均値を求めます。
4. 個々のセルの平均RGB値に対してもっとも色が近い(※)サブ画像を決定し、
ベース画像に埋め込んで行きます。
人間の眼?脳?は結構いい加減なもので、色が似ていると勝手に、
視覚イメージを補完してイメージを脳内に構成し、認識するみたいです。
上記、四角形とか書いてますけど、
今回、ベース、サブ画像、セルは正方形に整形して取り扱ってます。
その方が、プログラム作るのが楽だったので。
※色の距離を、ピタゴラスの定理(三平方の定理)を利用して求めます。
x = サブ画像のR値 - ベース画像のR値
y = サブ画像のG値 - ベース画像のG値
z = サブ画像のB値 - ベース画像のB値
a = x^2 + y^2 + z^2
んで、aの平方根を取って"距離"と出来ます。