平均色で塗り潰すでは画像全体の平均色で画像全体を塗り潰す処理を紹介しました。
画像全体ではなくて、画像の一部分を平均色で塗り潰せば画像にモザイクをかけることができます。このページではExcel関数を使用して画像にモザイクをかける方法を説明します。
【図1】編集前の画像
上図が編集前の画像です。チョウの頭の部分にモザイクをかけた画像が下図です。
モザイク部分の平均色で塗り潰すことで実現できます。
【図2】モザイクをかけた画像
以下の式でモザイクをかけることができます。AVERAGEは平均値を求めるExcel関数で、その引数にモザイク範囲のセルを指定すればよいのです。
【編集後R】のモザイク範囲=AVERAGE(【編集前R】のモザイク範囲のセル)
【編集後G】のモザイク範囲=AVERAGE(【編集前G】のモザイク範囲のセル)
【編集後B】のモザイク範囲=AVERAGE(【編集前B】のモザイク範囲のセル)
この式は必ず0~255の範囲に入りますから、255を超えた場合はどうしようかと考える必要はありません。
計算結果が小数点以下になる可能性はありますから、整数に切り捨てる処理は必要です。INT関数で囲います。INT関数は小数点以下を切り捨てて整数にします。
【編集後R】のモザイク範囲=INT(AVERAGE(【編集前R】のモザイク範囲のセル))
【編集後G】のモザイク範囲=INT(AVERAGE(【編集前G】のモザイク範囲のセル))
【編集後B】のモザイク範囲=INT(AVERAGE(【編集前B】のモザイク範囲のセル))
モザイクをかけない範囲のセルは編集前の値をコピーしておきます。そうすることでモザイクをかけない範囲は元の画像を表示させることができます。
【編集後R】のモザイクをかけない範囲=【編集前R】のモザイクをかけない範囲
【編集後G】のモザイクをかけない範囲=【編集前G】のモザイクをかけない範囲
【編集後B】のモザイクをかけない範囲=【編集前B】のモザイクをかけない範囲
なんだか式がややこしくなってしまいました。サンプルファイルをダウンロードして確認してみてください。難しいことではないです。単に範囲指定して平均値を取っているだけです。
【編集後R】シートのモザイクをかける範囲のセルに下図の数式を入力します。セルのアルファベットを$$で囲うことでセル範囲の絶対参照をしています。
下図の黄色とオレンジで塗り潰した範囲がモザイクをかける範囲です。ちょっと説明が難しいのでサンプルファイルをダウンロードして確認してみてください。モザイクをかける範囲はAVERAGE関数を入力し、それ以外の範囲は単に【編集前R】シートのセルをコピーしています。
【編集後G】シートも同様です。黄色とオレンジに塗り潰しているのはモザイクをかける処理とは何の関係もありません。単に見やすくするために塗り潰しているだけで、同じ色の範囲が同じ数式ですよという意味です。
【編集後B】シートも同様です。
【編集後C】シートには以下の数式が入力されていますから、RGBの値を元に24ビットフルカラーの数値が表示されます。
黄色の範囲とオレンジの範囲は全て同じ数字が並んでいます。これは、これらの範囲が同じ色で塗り潰されることを意味しています。
【編集後の画像を描く】マクロを実行します。マクロを実行したときに「実行時エラー'1004':セルの書式が多すぎるため、書式を追加できません。」というエラーが出る場合があります。その場合は【編集後画像】シートを一旦削除してファイルを保存して閉じて、開きなおして【編集後画像】シートを作り直してから、再度マクロを実行してみてください。
また、【編集後画像】シートを表示した状態でマクロを実行すると、PCの負荷が大きく途中で止まってしまうことがありますので別のシートを表示した状態で実行してください。
下図のように画像の一部にモザイクをかけることができました。
AVERAGE関数の入力が面倒ですが難しくはないと思います。入力範囲を間違えないようにセルに色を塗ったり、シートの表示を工夫してみてください。
|