006 年度卒業研究 アンシャープ処理 ( ディジタル画像の強調処理 ) 岡山理科大学 総合情報学部 情報科学科 澤見研究室 I03I054 澤田慧 I03I055 柴田勇輝
目次 1 はじめに ディジタル画像の強調処理 3 強調処理の種類 3.1 ヒストグラム均等化法 (HE) 3. コンボリューション処理 (Convolution) 3.3 アンシャープ処理 (Unsharp) 4 アンシャープ処理の実現 4.1 アルゴリズム 4. ボケ画像の作成方法 4.3 元画像の拡張 4.4 アンシャープ処理の方法 5 実験 5.1 プログラムの構成 5. データ配列の計算順序について 5.3 結果 6 まとめ 参考文献付録プログラム
1. はじめに画像処理の方式は次の四つに分けることができる. 1 写真技術による画像処理 光学的画像処理 3 アナログ画像処理 4 ディジタル画像処理このうち, 写真技術による画像処理 1と光学的画像処理 は画像の特徴である二次元的な空間広がりを保持したまま処理してしまう方式である. 写真技術による画像処理では, レンズ 露光時間 現象時間の制御やガンマ特性の異なる感光材料などを利用して, コントラストの改善, 画像の拡大 縮小などを行っている. しかし, フィルムを使うため処理時間が長く, 個人レベルでの実用性に欠ける アナログ画像処理 3は, リアルタイム性が実現できるメリットはあるが, 処理機能は線形処理が中心であり, 精度, 融通性に問題がある 現在では, ほとんどディジタル画像処理 4に変わってしまった. 今後, 画像処理専用装置の高速化も重要であるが, ディジタル画像処理 4はコンピュータの高速化に伴って, 並列処理や操作性に関する新しいソフトウェア技術の重要性がますます増加すると思われる. 特に操作性や処理手順のインテリジェンス化を目的とした場合, 画像データにオブジェクト指向の概念をもたせることが重要となり, こうしたオブジェクト指向による画像処理の研究開発がますます重要になろう. この画像処理方式のうち, 今回我々はディジタル画像の鮮明化について研究した.
. ディジタル画像の強調処理画像強調は画像の有用性を高めるための処理で, その方法と目的は応用の種類によってかなり異なる. たとえば, テレビのように報道 娯楽 観賞のために画像が強調される場合は画質, 明瞭さ, 見映えという視覚状況を改善するのが目的になる. 機械による物体認知の応用では, 機械の性能を補うよう画像強調などの前処理をする. 画像強調は画像復元と密接に関連するが, 両者の間には重要ないくつかの差異が存在する. 画像復元では理想の元画像が劣化されていることを前提に, 処理後の画像をできるだけ元画像に近づけることが目的である. 一方, 画像強調では処理前の画像を改良し処理後の画像をある意味でよく見えるようにするのが目的である. 言い換えると, 劣化のない元画像をさらに復元することに意味はないが, 明瞭さを高めることによってそれをより見やすくすることはできる. 画像の強調処理は対象物を見やすくするために画質を改善する処理であり, コントラスト強調と画像鮮鋭化の二種類に大別される. コントラスト強調は白い部分はより白く, 黒い部分はより黒く表現する処理である. 画像鮮鋭化は光学的なぼけで劣化している画像に関してエッジや細部などの高周波数成分を強調し見やすくする処理である.
3. 強調処理の種類以下に強調処理の手法の代表的なものとして, ヒストグラム均等化法, コンボリューション処理, アンシャープ処理を紹介する. 3.1 ヒストグラム均等化法 (HE) ヒストグラムとは濃度値の分布の全体像をとらえるために多用される. ヒストグラム均等化法はコントラスト強調法の一つであり, 画素数の多い濃度値の範囲で濃度値の間隔を細かくし, 画素数の少ない範囲では間隔を荒くする処理を行う. 具体的にはすべての画素の数を n, 階調数を m とするとき, 画素を濃度値が低いほうから n / m 個ごとに分割し, それぞれを 1 つの濃度値に割り当てていく. 簡単にいうと, 全体もしくは大部分の明るさに差が無く, 見えにくい画像について画像の濃淡をより強調して明確にし, 見せ掛けの画質を改善させる処理である. 図 3.1.1 ヒストグラム均等化前 図 3.1. ヒストグラム均等化後 ヒストグラム均等化前のような濃度がある範囲に偏っている ( 図 3.1.1) ものを, ヒストグラム均等化によってより広い範囲に濃度の分布を拡大する処理である ( 図 3.1.).
3. コンボリューション処理 (Convolution) コンボリューションは, 畳み込みと呼ばれている処理である. 元画像の平滑化 ( ノイズを除去したり, 軟調化したりする ), 鮮鋭化 ( ボケ画像をシャープにする ), エッジ検出 ( 線画のように輪郭を抽出する ) などに広く用いられる. 3.3 アンシャープ処理 (Unsharp) アンシャープ処理は, 文字通り解釈すると シャープでは無くする と言う意味になってしまう. ところが, 実際にはシャープにする処理である. アンシャープ処理はピンぼけした画像を補正するときや, 画像の光沢のある部分などを鮮明にそれらしくしたいときによく使用される. アンシャープマスクが通常のシャープ処理と違うのは しきい値 という設定項目でシャープ処理する範囲をコントロールできることにある. 閾値が0の場合は画像全体にシャープ処理を実行し, 設定する数値を大きくすると, 輪郭部分の階調の差が大きい部分にだけシャープ処理が実行される.
4. アンシャープ処理の実現今回我々が実験で行うアンシャープ処理について以下で説明する. 4.1 アルゴリズム画像をシャープにする処理というのは, 隣接するピクセルの連続した階調の差分を大きくすると言う事でもある. 逆にぼかしをかけるとは, 連続する階調をよりなだらかにする処理である. なだらかになった階調から元の階調を引いた差分に元の階調を足すと, 階調差分がより大きくなった画像にする事ができる. これがアンシャープ処理のアルゴリズムである. 図 4.1 アンシャープ処理のアルゴリズム アンシャープ処理のアルゴリズムについて説明する ( 図 4.1), まず, オリジナルの階調データ O から, なだらかな階調 B を作成し,O と B の差分をとり, 差分とオリジナルの和でアンシャープ処理後の階調データ (O-B)+O が得られる.
4. ボケ画像の作成方法ボケ画像を作るには, アンシャープマスクを作成する必要がある. アンシャープマスクの作成方法は以下に示す二次元ガウス分布式を使用し計算する. 分布の度合いを標準偏差 σ( シグマ ) により調整する. 尚, 調整の様子は次のページのより説明する. 1 ), ( σ πσ y x e y x f + = ( 式 1) ( 式 ) 二次元ガウス分布 ( 式 1) を作成するには,1 次元ガウス分布 ( 式 ) を式 3 のように掛け合わせる. 1 ) ( σ π σ x e x f = 1 1 1 ) ( ) ( ), ( σ σ σ πσ π σ σ π y x y x e e e y f x f y x f + = = = ( 式 3)
アンシャープマスクを設計するに当って, 注目するピクセルの周辺の何個分位まで含めるべきか, また,σ の値はどの程度の範囲を用意すれが良いかをσ=0.3 のガウス分布を使ったアンシャープマスク ( 表 4..1) を用いて見当をつける. 縦を y 軸に横を x 軸とする. -5-4 -3 - -1 0 1 3 4 5-5 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000-4 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000-3 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000-0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000-1 0.0000 0.0000 0.0000 0.0000 0.0000 0.0068 0.0000 0.0000 0.0000 0.0000 0.0000 0 0.0000 0.0000 0.0000 0.0000 0.0068 1.7684 0.0068 0.0000 0.0000 0.0000 0.0000 1 0.0000 0.0000 0.0000 0.0000 0.0000 0.0068 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 3 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 4 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 5 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 表 4..1 σ=0.3 のガウス分布を使ったアンシャープマスク σ 0.3 合計 1.7958 表 4.. 分布の合計 標準偏差 σ=0.3 の場合は,-~ までの範囲の分布の合計が 1 を超えており, 分散の範囲が注目する中心のピクセル内にほぼ留まっていることを示している. したがって, 標準偏差の値として 0.3 を使用するのは, 下限に近いのでアンシャープマスクとして使うには画素値や輝度が大幅に変化するため不適切であることが分かる.
-5-4 -3 - -1 0 1 3 4 5-5 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000-4 0.0000 0.0000 0.0000 0.0000 0.0000 0.0001 0.0000 0.0000 0.0000 0.0000 0.0000-3 0.0000 0.0000 0.0000 0.000 0.0011 0.0018 0.0011 0.000 0.0000 0.0000 0.0000-0.0000 0.0000 0.000 0.009 0.0131 0.015 0.0131 0.009 0.000 0.0000 0.0000-1 0.0000 0.0000 0.0011 0.0131 0.0585 0.0965 0.0585 0.0131 0.0011 0.0000 0.0000 0 0.0000 0.0001 0.0018 0.015 0.0965 0.159 0.0965 0.015 0.0018 0.0001 0.0000 1 0.0000 0.0000 0.0011 0.0131 0.0585 0.0965 0.0585 0.0131 0.0011 0.0000 0.0000 0.0000 0.0000 0.000 0.009 0.0131 0.015 0.0131 0.009 0.000 0.0000 0.0000 3 0.0000 0.0000 0.0000 0.000 0.0011 0.0018 0.0011 0.000 0.0000 0.0000 0.0000 4 0.0000 0.0000 0.0000 0.0000 0.0000 0.0001 0.0000 0.0000 0.0000 0.0000 0.0000 5 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 表 4..3 σ=1.0 のガウス分布を使ったアンシャープマスク σ 1.0 合計 1.0000 表 4..4 分布の合計標準偏差 σ=1.0 の場合は, 分布の合計が 1 になっており,11 x 11 のマスク範囲内に十分収まっていることが分かる. 多少の誤差を許せば, マスクの範囲を- から までの,5 x 5 のマスクでも十分である.
-5-4 -3 - -1 0 1 3 4 5-5 0.0011 0.0018 0.007 0.0035 0.004 0.0044 0.004 0.0035 0.007 0.0018 0.0011-4 0.0018 0.0030 0.0044 0.0058 0.0069 0.0073 0.0069 0.0058 0.0044 0.0030 0.0018-3 0.007 0.0044 0.0065 0.0086 0.0101 0.0107 0.0101 0.0086 0.0065 0.0044 0.007-0.0035 0.0058 0.0086 0.0113 0.0134 0.014 0.0134 0.0113 0.0086 0.0058 0.0035-1 0.004 0.0069 0.0101 0.0134 0.0158 0.0167 0.0158 0.0134 0.0101 0.0069 0.004 0 0.0044 0.0073 0.0107 0.014 0.0167 0.0177 0.0167 0.014 0.0107 0.0073 0.0044 1 0.004 0.0069 0.0101 0.0134 0.0158 0.0167 0.0158 0.0134 0.0101 0.0069 0.004 0.0035 0.0058 0.0086 0.0113 0.0134 0.014 0.0134 0.0113 0.0086 0.0058 0.0035 3 0.007 0.0044 0.0065 0.0086 0.0101 0.0107 0.0101 0.0086 0.0065 0.0044 0.007 4 0.0018 0.0030 0.0044 0.0058 0.0069 0.0073 0.0069 0.0058 0.0044 0.0030 0.0018 5 0.0011 0.0018 0.007 0.0035 0.004 0.0044 0.004 0.0035 0.007 0.0018 0.0011 表 4..5 σ=3.0 のガウス分布を使ったアンシャープマスク σ 3.0 合計 0.8733 表 4..6 分布の合計 標準偏差 σ=3.0 の場合は, 分布の合計が11 11のマトリックスの範囲内で1 以下になっており, ガウス分布の合計が11 11のマトリックスの範囲外にまで及んでいる. したがって,11 11のマトリックスを使用する前提では, この辺がアンシャープマスクの計算に使える σ の上限に近いことが分かる.
得られた結果を表にすると下記のようになる. σ 合計 0.1 15.9155 0. 3.9789 0.3 1.7958 0.4 1.177 0.5 1.090 0.6 1.0033 0.7 1.0003 0.8 1.0000 0.9 1.0000 1.0 1.0000 1. 1.0000 1.4 0.9999 1.6 0.9990 1.8 0.9961.0 0.9891.5 0.947 3.0 0.8733 3.5 0.7835 4.0 0.69 4.5 0.6074 5.0 0.531 表 4..7 結果のまとめ 結論として, 以下のことが言える. 1) 標準偏差 σ=0.5 以下を使用するのは, 分散が十分でなく, 適切でない. )11 x11のマスクを使用する場合には, 標準偏差 σ=3.0までが望ましい. 標準偏差 σ=4.0 はほぼ限界である. 3) 最大限,11 x 11 のマスクを使用したとしても,σ の値に応じて, マスクのサイズを小さくすれば, 処理の高速化になることが言える.
4.3 元画像の拡張画像の周辺部のマスク処理を行うには, 元画像のデータを拡張しておく必要がある. 今回は,-5~5 までの 11 x 11 のマスクを使用するので, 周辺を 5 ピクセルだけ拡張しておく. 元画像の上辺と下辺は, それらを垂直方向に裏返したデータで拡張し, 左辺と右辺は, それらを水平方向に裏返したもので拡張する. 四隅は, 点対称データで拡張する. 元画像のパソコン画面上の座標が,X 方向に X0~X0+(XMAX-1),Y 方向に Y0~Y0+(YMAX-1) とすると, 対応する画像データ配列 Data(i,j) は,i 方向に 0~5+(XMAX-1)+5,j 方向に 0 ~5+(YMAX-1)+5 の範囲となる. 拡張したデータ 実際に画像がある領域 図 4.3 文字 F が元画像の四隅にあった場合の例図
4.4 アンシャープ処理の方法 これまで説明した以外のパラメータを定義する 1) 適応量 (Amount) 元画像とボケ画像の演算量の割合を決める. ) しきい値 (Threshold) この値以上で効果が現れるよう処理し, それ以下では処理をしない境界の値. 処理の方法は次のようになる. Difference = Original - Blur Unsharped = Original + Amount * Difference ただし Original - Blur < Threshold の場合 Unsharped = Original とする. 以下にアンシャープ処理のパラメータを説明する. Original Blur Difference 元画像 ボケ画像 差分画像 Unsharped 処理後画像 図 4.4 アンシャープ処理のパラメータ 5. 実験
今回我々はアンシャープ処理をするプログラムを Visual C++6.0 で作成した. プログラムではメニューバー ( 図 5) を設定し Sigma,Amount,Threshold の値を変更できるようにした. 図 5 メニューバー 5.1 プログラムの処理手順は以下のようになった. プログラムの処理手順は下記のような流れになっている. 1) 原画像を貼り付ける. ) 原画像の周辺を5ピクセルだけ拡張し, 原画像の色配列に入れる. 3) ボケ画像作成用に 11 11 のアンシャープマスクを用意する. ここで,σ が使われる. 4) ガウス分布マスクを用いてボケ画像の色配列を作成し, 画像を表示する. 5) 原画像とボケ画像の差分画像の色配列を計算し, 画像を表示する. 差分画像には正負があるので, 表示に当っては値に 18 を加算しておく. 6) アンシャープ処理画像を計算し, 画面に表示する. この計算で,Amount と Threshold を用いる. 7) 各画像の下に説明を入れる. 5. データ配列の計算順序について
一般に, データ配列は,data[x][y] のような形で格納される. すなわち, 最初の添え字が x 軸 ( 横 ) 方向で次が y 軸 ( 縦 ) 方向である. これを, たとえば, 次のようにすると, テレビのスキャンと同じように, 上から下へと画像が描画されて行く. for(y=0;y<ymax;y++) for(x=0;x<xmax;x++) pdc->setpixel(x0+x,y0+y,data[x][y]); プログラム A しかし, この処理は遅い. 次々と呼び出されるデータのメモリ上の格納位置が連続していないからである.CPU 内臓のキャッシュを有効に使うには, 次のようにしなければならない. for(x=0;x<xmax;x++) for(y=0;y<ymax;y++) pdc->setpixel(x0+x,y0+y,data[x][y]); プログラム B その代わり, 左から右へと画像が描画されて行き, テレビの感じとは違う. 実際に所要時間を測ってみたところ, プログラム A とプログラム B では, プログラム B の方が 分の 1 以下になった. 5.3 結果
図 5.3. メニューバーでの σ の変更 結果の処理後画像 ( 図 5.3.1σ=0.3) を見るとセクション 4. での標準偏差の値として 0.3 を使用するのは, 小さすぎて不適切という見当した通りの結果になった. 図 5.3.1 σ=0.3 での結果
図 5.3.4 メニューバーでの σ の値の変更 結果の処理後画像 ( 図 5.3.3σ=1.0) を見ると, あまり顕著な結果は表れていないがアンシャープ処理が行われて見やすくなっている. 図 5.3.3 σ=1.0 での結果
図 5.3.6 メニューバーでの σ の値の変更 結果の処理後画像 ( 図 5.3.5σ=3.0) を見ると処理が強過ぎで逆に見難くなる限界であろうことがわかる. 図 5.3.5 σ=3.0 での結果
6. まとめ今回の研究で私達は, アンシャープ処理 ( 画像の鮮鋭化 ) について実験を行い, 知識を深めることができた. 今後の課題として, 各画像に合ったアンシャープマスクの適用値を決める処理など, プログラムの改良を加えていきたい.
参考文献 [1] 画像処理 著者: 土屋裕 / 深田陽司コロナ社 [] 画像処理工学 著者: 末松良一 / 山田宏尚コロナ社 [3] ディジタル画像処理入門 著者: 酒井幸市コロナ社 [4] 画像理解のためのディジタル画像処理 著者: 鳥脇純一郎昭晃堂 [5] 次元信号と画像処理 著者 : 川又政征 / 田口亮 / 村岡輝雄計測自動制御学会 [6] 画像概論 Ⅱ 著者: 三位信夫 / 羽石秀昭丸善株式会社 [7] 数値計算 著者: 佐藤次男 / 中村理一郎日刊工業新聞社 [8] Visual C++6.0 入門教室 著者 : 瀬戸遥翔泳社 [9] Wikipedhia http://ja.wikipedia.org/wiki/ [10] アンシャープマスク を使ったシャープネス処理 http://www.art-photo.jp/hp/photoshop/photoshop03/photoshop03.htm [11] 正規撒布関数 http://www.sci.kumamoto-u.ac.jp/~ohwaki/visualpde98/chapter/normalsf.html [1] 画像の強調法 http://www.f-kmr.com/pdf/dsp_enhance.pdf#search [13] Visual C++6.0 http://www6.ocn.ne.jp/~simuphys/howtomake.html [14] Belution.com http://forums.belution.com/ja/vc/