Comments
Description
Transcript
アンシャープ処理 - 澤見ゼミ
2006 年度 卒業研究 アンシャープ処理 (ディジタル画像の強調処理) 岡山理科大学 総合情報学部 情報科学科 澤見研究室 I03I054 I03I055 澤田慧 柴田勇輝 目次 1 はじめに 2 ディジタル画像の強調処理 3 強調処理の種類 3.1 ヒストグラム均等化法(HE) 3.2 コンボリューション処理(Convolution) 3.3 アンシャープ処理(Unsharp) 4 アンシャープ処理の実現 4.1 4.2 4.3 4.4 5 アルゴリズム ボケ画像の作成方法 元画像の拡張 アンシャープ処理の方法 実験 5.1 プログラムの構成 5.2 データ配列の計算順序について 5.3 結果 6 まとめ 参考文献 付録プログラム 1. はじめに 画像処理の方式は次の四つに分けることができる. ① 写真技術による画像処理 ② 光学的画像処理 ③ アナログ画像処理 ④ ディジタル画像処理 このうち,写真技術による画像処理①と光学的画像処理②は画像の特徴である二次元的な 空間広がりを保持したまま処理してしまう方式である.写真技術による画像処理では,レ ンズ・露光時間・現象時間の制御やガンマ特性の異なる感光材料などを利用して,コント ラストの改善,画像の拡大・縮小などを行っている.しかし,フィルムを使うため処理時 間が長く,個人レベルでの実用性に欠ける。アナログ画像処理③は,リアルタイム性が実 現できるメリットはあるが,処理機能は線形処理が中心であり,精度,融通性に問題があ る。現在では,ほとんどディジタル画像処理④に変わってしまった. 今後,画像処理専用装置の高速化も重要であるが,ディジタル画像処理④はコンピュー タの高速化に伴って,並列処理や操作性に関する新しいソフトウェア技術の重要性がます ます増加すると思われる.特に操作性や処理手順のインテリジェンス化を目的とした場合, 画像データにオブジェクト指向の概念をもたせることが重要となり,こうしたオブジェク ト指向による画像処理の研究開発がますます重要になろう. この画像処理方式のうち,今回我々はディジタル画像の鮮明化について研究した. 2.ディジタル画像の強調処理 画像強調は画像の有用性を高めるための処理で,その方法と目的は応用の種類によって かなり異なる.たとえば,テレビのように報道・娯楽・観賞のために画像が強調される場 合は画質,明瞭さ,見映えという視覚状況を改善するのが目的になる.機械による物体認 知の応用では,機械の性能を補うよう画像強調などの前処理をする. 画像強調は画像復元と密接に関連するが,両者の間には重要ないくつかの差異が存在す る.画像復元では理想の元画像が劣化されていることを前提に,処理後の画像をできるだ け元画像に近づけることが目的である.一方,画像強調では処理前の画像を改良し処理後 の画像をある意味でよく見えるようにするのが目的である.言い換えると,劣化のない元 画像をさらに復元することに意味はないが,明瞭さを高めることによってそれをより見や すくすることはできる. 画像の強調処理は対象物を見やすくするために画質を改善する処理であり,コントラス ト強調と画像鮮鋭化の二種類に大別される.コントラスト強調は白い部分はより白く,黒 い部分はより黒く表現する処理である.画像鮮鋭化は光学的なぼけで劣化している画像に 関してエッジや細部などの高周波数成分を強調し見やすくする処理である. 3.強調処理の種類 以下に強調処理の手法の代表的なものとして,ヒストグラム均等化法,コンボリューシ ョン処理,アンシャープ処理を紹介する. 3.1 ヒストグラム均等化法(HE) ヒストグラムとは濃度値の分布の全体像をとらえるために多用される. ヒストグラム均等化法はコントラスト強調法の一つであり,画素数の多い濃度値の範囲 で濃度値の間隔を細かくし,画素数の少ない範囲では間隔を荒くする処理を行う.具体的 にはすべての画素の数を n ,階調数を m とするとき,画素を濃度値が低いほうから n / m 個 ごとに分割し,それぞれを 1 つの濃度値に割り当てていく.簡単にいうと,全体もしくは 大部分の明るさに差が無く,見えにくい画像について画像の濃淡をより強調して明確にし, 見せ掛けの画質を改善させる処理である. 図 3.1.1 ヒストグラム均等化前 図 3.1.2 ヒストグラム均等化後 ヒストグラム均等化前のような濃度がある範囲に偏っている(図 3.1.1)ものを,ヒスト グラム均等化によってより広い範囲に濃度の分布を拡大する処理である(図 3.1.2). 3.2 コンボリューション処理(Convolution) コンボリューションは,畳み込みと呼ばれている処理である.元画像の平滑化(ノイズ を除去したり,軟調化したりする) ,鮮鋭化(ボケ画像をシャープにする),エッジ検出(線 画のように輪郭を抽出する)などに広く用いられる. 3.3 アンシャープ処理(Unsharp) アンシャープ処理は,文字通り解釈すると「シャープでは無くする」と言う意味になっ てしまう.ところが,実際にはシャープにする処理である.アンシャープ処理はピンぼけ した画像を補正するときや,画像の光沢のある部分などを鮮明にそれらしくしたいときに よく使用される. アンシャープマスクが通常のシャープ処理と違うのは「しきい値」という設定項目でシ ャープ処理する範囲をコントロールできることにある.閾値が0の場合は画像全体にシャ ープ処理を実行し,設定する数値を大きくすると,輪郭部分の階調の差が大きい部分にだ けシャープ処理が実行される. 4.アンシャープ処理の実現 今回我々が実験で行うアンシャープ処理について以下で説明する. 4.1 アルゴリズム 画像をシャープにする処理というのは,隣接するピクセルの連続した階調の差分を大き くすると言う事でもある.逆にぼかしをかけるとは,連続する階調をよりなだらかにする 処理である.なだらかになった階調から元の階調を引いた差分に元の階調を足すと,階調 差分がより大きくなった画像にする事ができる.これがアンシャープ処理のアルゴリズム である. 図 4.1 アンシャープ処理のアルゴリズム アンシャープ処理のアルゴリズムについて説明する(図 4.1),まず,オリジナルの階調 データ O から,なだらかな階調 B を作成し,O と B の差分をとり,差分とオリジナルの和で アンシャープ処理後の階調データ(O-B)+O が得られる. 4.2 ボケ画像の作成方法 ボケ画像を作るには,アンシャープマスクを作成する必要がある.アンシャープマスク の作成方法は以下に示す二次元ガウス分布式を使用し計算する.分布の度合いを標準偏差 σ(シグマ)により調整する.尚,調整の様子は次のページのより説明する. f ( x, y ) = − 1 2πσ 2 e x2 + y2 2σ 2 ・・・(式1) x2 f (x) = − 1 2 e 2σ 2π σ ・・・(式2) x2 f ( x, y) = f ( x) ⋅ f ( y) = − 1 2 e 2σ ⋅ 2π σ y2 − 1 1 2 e 2σ = 2 πσ 2π σ − 2 e x2 + y2 2σ 2 ・・・ (式3) 二次元ガウス分布(式1)を作成するには,1 次元ガウス分布(式2)を式3のように掛け 合わせる. アンシャープマスクを設計するに当って,注目するピクセルの周辺の何個分位まで含める べきか,また,σ の値はどの程度の範囲を用意すれが良いかをσ=0.3 のガウス分布を使っ たアンシャープマスク(表 4.2.1)を用いて見当をつける.縦を y 軸に横を x 軸とする. -5 -4 -3 -2 -1 0 1 2 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 -2 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 2 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.2.1 σ 合計 表 4.2.2 σ=0.3 のガウス分布を使ったアンシャープマスク 0.3 1.7958 分布の合計 標準偏差 σ=0.3 の場合は,-2~2 までの範囲の分布の合計が 1 を超えており,分散の範 囲が注目する中心のピクセル内にほぼ留まっていることを示している.したがって,標準 偏差の値として 0.3 を使用するのは,下限に近いのでアンシャープマスクとして使うには 画素値や輝度が大幅に変化するため不適切であることが分かる. -5 -4 -3 -2 -1 0 1 2 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.0002 0.0011 0.0018 0.0011 0.0002 0.0000 0.0000 0.0000 -2 0.0000 0.0000 0.0002 0.0029 0.0131 0.0215 0.0131 0.0029 0.0002 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.0215 0.0965 0.1592 0.0965 0.0215 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 2 0.0000 0.0000 0.0002 0.0029 0.0131 0.0215 0.0131 0.0029 0.0002 0.0000 0.0000 3 0.0000 0.0000 0.0000 0.0002 0.0011 0.0018 0.0011 0.0002 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.2.3 σ 合計 表 4.2.4 σ=1.0 のガウス分布を使ったアンシャープマスク 1.0 1.0000 分布の合計 標準偏差 σ=1.0 の場合は,分布の合計が 1 になっており,11 x 11 のマスク範囲内に十 分収まっていることが分かる.多少の誤差を許せば,マスクの範囲を-2 から 2 までの,5 x 5 のマスクでも十分である. -5 -4 -3 -2 -1 0 1 2 3 4 5 -5 0.0011 0.0018 0.0027 0.0035 0.0042 0.0044 0.0042 0.0035 0.0027 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.0027 0.0044 0.0065 0.0086 0.0101 0.0107 0.0101 0.0086 0.0065 0.0044 0.0027 -2 0.0035 0.0058 0.0086 0.0113 0.0134 0.0142 0.0134 0.0113 0.0086 0.0058 0.0035 -1 0.0042 0.0069 0.0101 0.0134 0.0158 0.0167 0.0158 0.0134 0.0101 0.0069 0.0042 0 0.0044 0.0073 0.0107 0.0142 0.0167 0.0177 0.0167 0.0142 0.0107 0.0073 0.0044 1 0.0042 0.0069 0.0101 0.0134 0.0158 0.0167 0.0158 0.0134 0.0101 0.0069 0.0042 2 0.0035 0.0058 0.0086 0.0113 0.0134 0.0142 0.0134 0.0113 0.0086 0.0058 0.0035 3 0.0027 0.0044 0.0065 0.0086 0.0101 0.0107 0.0101 0.0086 0.0065 0.0044 0.0027 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.0027 0.0035 0.0042 0.0044 0.0042 0.0035 0.0027 0.0018 0.0011 表 4.2.5 σ 合計 表 4.2.6 σ=3.0 のガウス分布を使ったアンシャープマスク 3.0 0.8733 分布の合計 標準偏差 σ=3.0 の場合は,分布の合計が11×11のマトリックスの範囲内で1以下に なっており,ガウス分布の合計が11×11のマトリックスの範囲外にまで及んでいる. したがって,11×11のマトリックスを使用する前提では,この辺がアンシャープマス クの計算に使える σ の上限に近いことが分かる. 得られた結果を表にすると下記のようになる. σ 合計 0.1 15.9155 0.2 3.9789 0.3 1.7958 0.4 1.1772 0.5 1.0290 0.6 1.0033 0.7 1.0003 0.8 1.0000 0.9 1.0000 1.0 1.0000 1.2 1.0000 1.4 0.9999 1.6 0.9990 1.8 0.9961 2.0 0.9891 2.5 0.9472 3.0 0.8733 3.5 0.7835 4.0 0.6922 4.5 0.6074 5.0 0.5321 表 4.2.7 結果のまとめ 結論として,以下のことが言える. 1)標準偏差 σ=0.5 以下を使用するのは,分散が十分でなく,適切でない. 2)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)・・元画像とボケ画像の演算量の割合を決める. 2)しきい値(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) 原画像を貼り付ける. 2) 原画像の周辺を5ピクセルだけ拡張し,原画像の色配列に入れる. 3) ボケ画像作成用に 11×11 のアンシャープマスクを用意する.ここで,σ が使われる. 4) ガウス分布マスクを用いてボケ画像の色配列を作成し,画像を表示する. 5) 原画像とボケ画像の差分画像の色配列を計算し,画像を表示する.差分画像には正負 があるので,表示に当っては値に 128 を加算しておく. 6) アンシャープ処理画像を計算し,画面に表示する.この計算で,Amount と Threshold を用いる. 7) 各画像の下に説明を入れる. 5.2 データ配列の計算順序について 一般に,データ配列は,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 の方が2分の 1以下になった. 5.3 結果 図 5.3.2 メニューバーでのσの変更 結果の処理後画像(図 5.3.1σ=0.3)を見 るとセクション 4.2 での標準偏差の値とし て 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] 『画像処理』著者:土屋裕/深田陽司 コロナ社 [2] 『画像処理工学』著者:末松良一/山田宏尚 コロナ社 [3] 『ディジタル画像処理入門』著者:酒井幸市 コロナ社 [4] 『画像理解のためのディジタル画像処理』著者:鳥脇純一郎 [5] 『2 次元信号と画像処理』著者:川又政征/田口亮/村岡輝雄 [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/Chapter2/2NormalSF.html [12] 画像の強調法 http://www.f-kmr.com/PDF/dsp_enhance.pdf#search [13] Visual C++6.0 http://www6.ocn.ne.jp/~simuphys/howtomake2.html [14] Belution.com http://forums.belution.com/ja/vc/