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

Excel関数による画像処理入門(メディアンフィルタ)


 このページではExcel関数による画像処理入門(準備:エクセルシートに画像を表示)で作ったExcelファイルを元に、画像にメディアンフィルタをかける方法を紹介します。 メディアンフィルタは下図のように白や黒のノイズが乗っている画像のノイズ除去に有効なフィルタです。周囲9点の中央値を入力すればノイズが除去できるというのは理解できるのではないでしょうか。白はRGB値で表すとRGB(255,255,255)、黒はRGB(0,0,0)です。 255や0が中央値になることはほとんどありませんから、中央値を入力すれば255,0のノイズは除去されるというわけです。



 画像をぼかす説明で、周囲9点の平均を取れば画像をぼかすことができると説明しました。その際に使用するエクセルの関数はAVERAGE関数だったのですが、 このページではAVERAGE関数の代わりにMEDIAN関数を使用します。メディアンとは中央値のことなのですが、MEDIAN関数は引数に指定した範囲のセルの中央値を返す関数です。 例えばB2セルに入力する数式は以下の通りです。  

【編集後R】=MEDIAN(編集前R!A1:編集前R!C3)
【編集後G】=MEDIAN(編集前G!A1:編集前G!C3)
【編集後B】=MEDIAN(編集前B!A1:編集前B!C3)


 この式は必ず0~255の範囲に入りますから、255を超えた場合はどうしようかと考える必要はありません。



 計算結果が小数点以下になる可能性はありますから、整数に切り捨てる処理は必要です。INT関数で囲います。INT関数は小数点以下を切り捨てて整数にします。例えばB2のセルに入力するのは以下の数式です。

【編集後R】=INT(MEDIAN(編集前R!A1:編集前R!C3))
【編集後G】=INT(MEDIAN(編集前G!A1:編集前G!C3))
【編集後B】=INT(MEDIAN(編集前B!A1:編集前B!C3))

 中央値が小数点以下になる可能性があるのは引数のセル数が偶数の場合です。上下左右の端はセル6個の中央値を取ることになりますから、その場合には中央値が小数点以下になる可能性があります。 端以外は小数点以下になることはないのですが、このページでは全てのセルにINT関数を使用することにします。



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



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



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



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



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



 「編集後画像」シートに画像が描かれました。メディアンフィルタを行った結果で、白や黒のノイズが除去されています。メディアンフィルタはノイズ除去はできるのですが画像の細部が潰れてしまい、塗り潰したような画像になってしまいます。



 編集前が下図です。上下の画像を比較してみてください。今回は注目画素の周囲9点(3×3)の中央値を取りました。この範囲を広くして25点(5×5)とか、49点(7×7)とすればノイズ除去の効果は大きくなりますが、その半面塗り潰されたような効果も大きくなります。 塗り潰されたようになる効果を生かして、メディアンフィルタの範囲を調整すれば写真を絵画風に変換する画像処理に使うこともできます。 このページではやりませんが興味のある方は試してみてください。


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