ホーム
-------------------------------------------
Excel関数画像処理入門
   準備:画像の表示
   明るさ調整
   グレースケール
   ぼかす
   メディアンフィルター
   アンシャープマスク
   彩度調整
   平均色で塗り潰す
   モザイクをかける
-------------------------------------------
 空間フィルタ
   ローパスフィルタ
   ハイパスフィルタ
  エッジ検出
   ラプラシアンフィルタ
   プレウィットフィルタ
-------------------------------------------

Excel関数による画像処理入門(明るさ調整)


 このページではExcel関数による画像処理入門(準備:エクセルシートに画像を表示)で作ったExcelファイルを元に画像の明るさを変更する方法を紹介します。この画像の明るさを変更してみます。

 30%明るくするとか30%暗くするというように、明るさを調整する%を決めて処理していきます。 30%明るくするのであればRGB値を1.3倍すればよいです。Excelに以下のように式を入力します。

【編集後R】=【編集前R】* 1.3
【編集後G】=【編集前G】* 1.3
【編集後B】=【編集前B】* 1.3


 ただし、1.3倍した結果が255を超えると駄目なので、255を超えた場合は255にするという処理が必要になります。255を超えると駄目というのは画像のRGB値は0~255の整数と決まっているためで、256という値は存在できないのです。 ExcelのIF関数を使って以下のように書き直します。

【編集後R】=IF( 【編集前R】* 1.3 > 255 , 255 , 【編集前R】* 1.3 )
【編集後G】=IF( 【編集前G】* 1.3 > 255 , 255 , 【編集前G】* 1.3 )
【編集後B】=IF( 【編集前B】* 1.3 > 255 , 255 , 【編集前B】* 1.3 )


 また、少数点以下は切り捨てて整数にしたいのでExcelのINT関数を使って以下のように書き直します。整数にしたいというのも、画像のRGB値は0~255の整数と決まっているからです。少数点以下は存在できないのです。

【編集後R】=IF( INT(【編集前R】* 1.3 ) > 255 , 255 , INT(【編集前R】* 1.3 ) )
【編集後G】=IF( INT(【編集前G】* 1.3 ) > 255 , 255 , INT(【編集前G】* 1.3 ) )
【編集後B】=IF( INT(【編集前B】* 1.3 ) > 255 , 255 , INT(【編集前B】* 1.3 ) )



 【編集後R】シートのA1からKN200のセルに以下の数式を入力します。



 【編集後G】シートのA1からKN200のセルに以下の数式を入力します。



 【編集後B】シートのA1からKN200のセルに以下の数式を入力します。



 【編集後C】シートには以下の数式が入力されていますから、RGBの値を元に24ビットフルカラーの数値が表示されます。



 【編集後の画像を描く】マクロを実行します。マクロを実行したときに「実行時エラー'1004':セルの書式が多すぎるため、書式を追加できません。」というエラーが出る場合があります。その場合は【編集後画像】シートを一旦削除してファイルを保存して閉じて、開きなおして【編集後画像】シートを作り直してから、再度マクロを実行してみてください。 また、【編集後画像】シートを表示した状態でマクロを実行すると、PCの負荷が大きく途中で止まってしまうことがありますので別のシートを表示した状態で実行してください。



 「編集後画像」シートに写真が描かれました。編集前の写真を30%明るくする画像処理を行った結果です。



 編集前が下図です。上下の画像を比較してみてください。明るくなっていますね。 ただし、白い花の花びらが真っ白になってしまって、花びらの輪郭が分からなくなってしまいました。これは白飛びという現象です。 白というのはRGB値で表すとR=255 , G=255 , B=255なのですが、もともと白っぽかったところ(即ちRGB値が255に近いところ)を30%明るくしたために、白っぽかったところが完全な白(即ちRGB値が255)になってしまったというわけです。



 もちろん明るさの度合いはエクセルに入力した式の1.3を変更することで調整できます。1.2とすれば20%明るくなりますし、0.7とすれば30%暗くなります。

20%明るくしたい場合
【編集後R】=IF( INT(【編集前R】* 1.2 ) > 255 , 255 , INT(【編集前R】* 1.2 ) )
【編集後G】=IF( INT(【編集前G】* 1.2 ) > 255 , 255 , INT(【編集前G】* 1.2 ) )
【編集後B】=IF( INT(【編集前B】* 1.2 ) > 255 , 255 , INT(【編集前B】* 1.2 ) )


30%暗くしたい場合
【編集後R】=IF( INT(【編集前R】* 0.7 ) > 255 , 255 , INT(【編集前R】* 0.7 ) )
【編集後G】=IF( INT(【編集前G】* 0.7 ) > 255 , 255 , INT(【編集前G】* 0.7 ) )
【編集後B】=IF( INT(【編集前B】* 0.7 ) > 255 , 255 , INT(【編集前B】* 0.7 ) )



 このようにエクセルの数式を利用して画像処理ができるようになりました。 従来、画像処理はプログラムを書かなければ実現できなかったのですが、エクセルの数式という簡単な処理で画像処理を試してみることができます。 このページで作ったエクセルファイルを以下のリンクから提供します。ZIP形式に圧縮していますからダウンロードした後、右クリックメニューから展開して使用してください。


このページで作成したエクセルファイルのダウンロード