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

Excel関数による画像処理入門(アンシャープマスク)


 画像をぼかすではExcelのAVERAGE関数を使用して画像をぼかす方法を紹介しました。ぼかした画像と元の画像を合成すれば(足し引きすれば)アンシャープマスクという画像処理をかけることができます。 このページではExcelで画像にアンシャープマスクをかける方法を紹介します。 アンシャープマスクとは、画像からボケ成分を引き算することで画像をシャープにする画像処理です。従ってアンシャープマスクを理解するためには画像をぼかす処理を理解する必要があります。Excelで画像をぼかす方法は画像をぼかすを参照してください。

 今まで紹介してきた画像処理よりも少しややこしい説明になります。以下に編集前の画像、ぼかし編集後の画像、アンシャープマスク編集後の画像を示します。





【図1】編集前の画像




【図2】ぼかし編集後の画像




【図3】アンシャープマスク編集後の画像



【図1】編集前の画像
【図2】ぼかし編集後の画像
【図3】アンシャープマスク編集後の画像

として、大雑把に説明すると下式の通りです。

【図3】=【図1】×(1+A)-【図2】×(A)

 Aは0.1から1.0程度の変数です。Aの範囲は0.1から1.0と決まっているわけではありませんが、小さすぎるの効果がわかりませんし、大きすぎると不自然な結果となります。このページではAを0.7として説明します。

 この式の計算結果は0以下になることもありますし、255以上になることもあります。 0以下の場合は0に、255以上の場合は255になるようにExcelのIF関数を使用しなければなりません。

 今までとの大きな違いは「ぼかし」の画像処理結果を保存するワークシートが必要になるということです。「編集前画像」から「ぼかし画像」を引き算しますから、「編集前画像」と「ぼかし画像」の両方のピクセル値が必要になります。



【ぼかしR】【ぼかしG】【ぼかしB】というシートを作ります。これらのシートには編集前画像をぼかした結果が入力されるようにします。画像をぼかすで説明した通り、AVERAGE関数を使えば画像をぼかすことができます。



【ぼかしR】シートのB2からKM199のセルに以下の数式を入力します。端の列、端の行と四隅の4点は平均を取る範囲が異なります。少し異なる式を入力しますのでサンプルファイルを参照しくください。



【ぼかしG】シートのB2からKM199のセルに以下の数式を入力します。端の列、端の行と四隅の4点は平均を取る範囲が異なります。少し異なる式を入力しますのでサンプルファイルを参照しくください。



【ぼかしB】シートのB2からKM199のセルに以下の数式を入力します。端の列、端の行と四隅の4点は平均を取る範囲が異なります。少し異なる式を入力しますのでサンプルファイルを参照しくください。



 【編集後R】【編集後G】【編集後B】シートには【編集前R】【編集前G】【編集前B】シートと【ぼかしR】【ぼかしG】【ぼかしB】シートの引き算の式を入力します。計算結果が255を超える場合、0未満になる場合に備えてIF関数が入れ子になっていて非常に長い関数になってしまいますが本質部分は簡単です。

 本質部分は以下の通りです。

【編集後R】=【編集前R】×(1+A)-【ぼかしR】×(A)
【編集後G】=【編集前G】×(1+A)-【ぼかしG】×(A)
【編集後B】=【編集前B】×(1+A)-【ぼかしB】×(A)


 今回は上式のAを0.7とします。

【編集後R】=【編集前R】×1.7-【ぼかしR】×0.7
【編集後G】=【編集前G】×1.7-【ぼかしG】×0.7
【編集後B】=【編集前B】×1.7-【ぼかしB】×0.7



【編集後R】シートのA1からKN200のセルに以下の数式を入力します。複雑な式に見えますが、計算結果が255を超える場合、0未満になる場合に備えてIF関数が入れ子になっているだけで本質部分は簡単で以下の数式です。
【編集後R】=【編集前R】×1.7-【ぼかしR】×0.7



【編集後G】シートのA1からKN200のセルに以下の数式を入力します。複雑な式に見えますが、計算結果が255を超える場合、0未満になる場合に備えてIF関数が入れ子になっているだけで本質部分は簡単で以下の数式です。
【編集後G】=【編集前G】×1.7-【ぼかしG】×0.7



【編集後B】シートのA1からKN200のセルに以下の数式を入力します。複雑な式に見えますが、計算結果が255を超える場合、0未満になる場合に備えてIF関数が入れ子になっているだけで本質部分は簡単で以下の数式です。
【編集後B】=【編集前B】×1.7-【ぼかしB】×0.7



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



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



 「編集後画像」シートに画像が描かれました。アンシャープマスクを行った結果で、ぼけが取れてシャープな画像になりました。



 編集前が下図です。上下の画像を比較してみてください。アンシャープマスクは、ぼかす範囲を広げたり(今回の例で言うとAVERAGE関数の引数のセルの範囲を広げるということ)、編集前画像とぼかし画像のブレンド比率を変えたり(今回の例で言うとA=0.7としたところをA=0.3とするとか、A=0.9とするとか)することで効果が変わってきます。 このページではやりませんが興味のある方は試してみてください。


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