2008年12月15日月曜日

画像処理 #13 バイラテラルフィルタ

こんばんは.大量更新中.
今回はバイラテラルフィルタについて.

バイラテラルフィルタ(bilateral filter)は,非線形フィルタです.f(i, j)に対応するg(i, j)はExp.1で表されます.


Exp.1 バイラテラルフィルタ

かなりごちゃごちゃとした式です.σ1とσ2はパラメータです.
このフィルタの効果はなかなか面白いです.ある領域の画素値の近いもの同士が,同じ画素値をもつようにまとめられていきます.このフィルタを繰り返し適用するとイラスト風の画像が生成されます.

まず,Fig.1に示すノイズの入った画像で試してみます.


Fig.1 サンプル(ノイズ画像)

この画像に対し,平均化フィルタを適用したものをFig.2,さらにもう一度適用したものをFig.3に示します.平均化されているので,ノイズは低減されていますが,中央縦のエッジがかなり鈍っています.


Fig.2 平均化フィルタ(w=3)を1回適用した画像


Fig.3 平均化フィルタ(w=3)を2回適用した画像

次にFig.1にバイラテラルフィルタを適用したものを,Fig.4に示します.
パラメータ
σ1:25
σ2:25
w:3


Fig.4 バイラテラルフィルタを適用した画像

エッジはそのままでノイズが低減されていることが分かります.

では,普通の画像に対して,バイラテラルフィルタを適用してみます.
Fig.5が元画像です.


Fig.5 サンプル画像
Mona Lisa
Leonardo da Vinci, c. 1503–1506

Fig.5にバイラテラルを繰り返し(4回)適用したものをFig.6に示します.
パラメータ
σ1:25
σ2:25
w:3


Fig.6 バイラテラルフィルタ適用後の画像

元画像が絵ですので,なんとも言えませんが,ノイズが吹っ飛び,全体的な雰囲気が変わっています.

今回はこの辺で.

2008年12月13日土曜日

画像処理 #12 メディアンフィルタ

線形変換が一通り終わったので,非線形フィルタへ…

今回は,メディアンフィルタ(median filter)を紹介します.
このフィルタは,周囲9マスの中央値(median)を出力します.このフィルタには,スパイク状のノイズを除去するという効果があります.スパイクノイズの画素値は周囲の画素値と大きく異なるため,中央値とはならないためです.平均化フィルタでも,スパイクノイズ除去は出来ますが,メディアンフィルタの方が,エッジがあまりなまりません.

実際にノイズがのっている画像に対して適用してみます.

サンプル画像はFig.1です.この画像を見たことがある人は多いと思います.標準テスト・イメージの一つでLena Soderbergという方です.その画像を1/4サイズにし,左半分には1*1ドットの,右半分には2*2ドットのスパイクノイズ(白)をのせています.


Fig.1 サンプル画像

Fig.1に平均化フィルタを適用したものをFig.2,Fig.3に示します.Fig.2では周囲9マスを,Fig.3では周囲25マスを平均化しています.


Fig.2 平均化フィルタ(w=1)


Fig.3 平均化フィルタ(w=2)

スパイクが大きいためか,以外にも2*2ドットのノイズを取りきれていません.

次に,Fig.4にFig.1にメディアンフィルタを適用したものを示します.


Fig.4 メディアンフィルタ

綺麗にノイズを取り除くことができています.また,平均化フィルタに比べ,エッジがはっきりしています.

今回の例で,メディアンフィルタがスパイクノイズ除去に対して強力な効果を発揮することが分かると思います.

では今回はこんな処で.

2008年12月12日金曜日

画像処理 #11 スキュー

こんばんは.線形変換最後の変換,スキューにやってまいりました.
スキューはExp.1, 2の式で表されます.この変換は画像を傾けます.つまり,変換後の画像は平行四辺形になります.


Exp.1 x軸方向スキュー(skewing)


Exp.2 y軸方向スキュー(skewing)

行列式の値は1ですので,面積拡大率は1,底辺*高さが一定なので当たり前ですが.

では,さくっと実行例を.
サンプルはFig.1の画像です.有名な絵ですね.


Fig.1 サンプル画像
Drawing Hands
M. C. Escher, 1948

変換後の画像はFig.2, 3で,それぞれx軸方向30°,y軸方向50°傾けてあります.補間法はバイキュービック補間のみです.


Fig.2 x軸方向へのスキュー30°


Fig.3 y軸方向へのスキュー50°


以上で,線形変換は終わりです.
一応鏡映という変換もありますが,これは回転に近いですので省略.

ちなみに,線形変換以外の変換としては,ユークリッド変換(平行移動+回転),アフィン変換(線形変換+平行移動),射影変換(四角形を任意の四角形に変換)があります.これらの変換は,同時座標を利用することで実現できます.
機会があれば追々説明できればと思います.

では,今回はこの辺で.

2008年12月11日木曜日

画像処理 #10 回転

今回は回転について.
回転は,Exp.1の式で表されます.

Exp.1 回転(rotation)

この変換では,原点を中心にθ回転します.一般的な画像の表現は,左上を原点,x軸が右方向へ正,y軸が下方向へ正,ですので単純に回転させると次の様になります.


Fig.1 単純に回転させた場合

この処理でも問題はありませんが,画像の中心(w/2, h/2)を回転の中心にしたい場合(星がクルクル回るとか)は困ります.つまり,次のようにしたい,ということもあるかと思われます.


Fig.2 上手い回転

ということで,以降にこの変換の方法を記します(と,言っても単純な平行移動です).

元画像に対応する点をv1,回転画像に対応する点をv2とし,
v1=(x1, y1)t
v2=(x2, y2)t
とおいた時.v2からv1を出すのが目標です.

元画像fを考えます.fの幅をw,高さをhとします.
回転後の画像をgとします,まず,gのサイズを決定します.gはfを回転させたものなので,fのサイズと同一にはなりません.
サイズは回転する角度によります.角度によって,サイズを変えるのは変なので,一括して最大となる値に固定してしまいます.
幅が最大というのは,画像の対角線が丁度水平の時です.ですので,幅の最大値は,対角線の長さ√(w^2+h^2)です.
高さが最大の時も同様ですので,結局,一辺が√(w^2+h^2)の正方形で十分です.
r=√(w^2+h^2)とします.

f,gそれぞれの(x, y)の変域は次のようになっています.
f
x1 -> [0,w]
y1 -> [0,h]

g
x2 -> [0,r]
y2 -> [0,r]

それぞれ,画像の中心を回転の中心としたいので,

x1'=x1-w/2 (x1 -> [-w/2,w/2])
y1'=y1-h/2 (y1 -> [-h/2,h/2])

x2'=x2-r/2 (x2 -> [-r/2,r/2])
y2'=y2-r/2 (y2 -> [-r/2,r/2])

とします.

v1=(x1, y1)t
v2=(x2, y2)t
であるので,
w1=v1-(w/2, h/2)t=(x1', y1')t
w2=v2-(r/2, r/2)t=(x2', y2')t

とすれば,Aをdeg°回転の表現行列とした時,

w1=A^(-1)w2

となりめでたくゴールです.v2からv1が求められます.ちなみにv1が(w, h)tの範囲外にあることがありますので,その辺は適宜調整しましょう.

まとめ

パラメータ
画像f - 元画像
幅 - w
高さ - h
画像g - 回転画像
幅 - r
高さ - h
r=√(w^2+h^2)
元画像に対応する点 - v1=(x1, y1)t
回転画像に対応する点 - v2=(x2, y2)t
行列A - deg°回転させる行列

手順
1.(r, r)の画像を用意
2.w1=v1-(w/2, h/2)t
w2=v2-(r/2, r/2)t とする
3.w1=A^(-1)w2でv2からv1を求める
4.(v1がf内にあるとき)v2に対応するピクセルにv1に対応するピクセル値を書き込む

では,実際の変換例を.
今回はFig.3の画像を回転させます.エッシャーの作品です.


Fig.3
Relativity
M. C. Escher, 1953

Fig.4が95°,Fig.5が320°回転させたものです.


Fig.4 95°回転


Fig.5 320°回転

安定して回転出来ていると思います.

では,今回はこんな処で.

2008年12月9日火曜日

画像処理 #9 縮小(補足)

前回紹介した拡大縮小ですが,縮小がすっぽり抜けていたので補足します.
変換式は前回の投稿と同様ですので,処理は単純です.が,たまに縮小後の画像が変になることがあります.

例えば,Fig.1のような画像をsx=0.5,sy=0.5で縮小するとします.ちなみにこの画像は円形ゾーンプレートといってExp.1の式で表されます.中心から遠ざかるにつれて周期が短くなっていきます.


Fig.1 縮小する画像


Exp.1 円形ゾーンプレート

で,単純に縮小した結果がFig.2です.


FIg.2 単純に縮小

端の方に変な模様が発生しています(元画像Fig.1と比較してみてください).この模様を偽パターンといったりするようです.この現象は割とよく見られます.周期的なパターンから周期的に抽出を行うと,新たにパターンが発生してしまうというようです.

ということで,この現象を解決するためにローパスフィルタを使います.
ローパスフィルタとは,周波数フィルタリングの一つで高周波成分を除去するというものです.この辺についてはフーリエ変換とかが入ってきます.とりあえず,今回はフーリエ変換は避けたいので,ローパスフィルタの代わりにガウシアンフィルタを用います.ガウシアンフィルタは,(ガウス分布型)ローパスフィルタを近似しています.

まず,元画像に対しガウシアン(≒ローパス)フィルタを適用します(Fig.3).
そして,その後,縮小を実行します(Fig.4).
処理はこれだけです.

パラメータ:
σ=0.7


Fig.3 ガウシアンフィルタ適用後


Fig.4 縮小

どうでしょうか.Fig.2に比べFig.4では,偽パターンが軽減されているのが分かると思います.この画像は意図的に作成したものですが,実際の画像でもローパスフィルタを適用すれば,このように偽パターンは消えるようです.

以上,縮小についての補足でした.

2008年12月7日日曜日

画像処理 #8 拡大・縮小

前回は,線形変換の紹介のみでしたので,具体的な変換を紹介します.
まずは,拡大・縮小(スケール変換)について.

拡大・縮小は次の式で表されます.

Exp.1 拡大・縮小(スケール変換)

パラメータはsx,syの2つです.
sxが1より小さい : x方向に関して縮小
sxが1より大きい : x方向に関して拡大
syが1より小さい : y方向に関して縮小
syが1より大きい : y方向に関して拡大

以前紹介した補間法では,sx=20,sy=20の拡大をしていたわけです.

Fig.1の画像に対して変換を適用します.

Fig.1 サンプル画像

パラメータは,以下とします.
sx=20
sy=10


Fig.2 ニアレストネイバー


Fig.3 バイリニア補間


Fig.4 バイキュービック補間

Fig.4のバイキュービック補間の鮮明さが,よりはっきりした様に見えます.

今回はこんな処で.

2008年12月6日土曜日

画像処理 #7 線形変換

非線形フィルタをやると明言しつつ,今回は線形変換,
線形変換とは,下の式で表現される変換です.


Exp.1 線形変換(linear transformation)

線形変換では,次のような変換が出来ます.
○拡大・縮小(scaling)
○回転(rotation)
○スキュー(skewing)

画像処理でこのような変換を行うときは,逆行列を求める必要があります.何故かというと,座標(x', y')は必ず離散値で無くてはならないからです.ですので,次のようにします.


Exp.2 逆写像

(x', y')から(x, y)を求めg(x', y')=f(x, y)とします.
この時,xとyは離散値とは限らないので,以前紹介した補間法を用いるわけです.

以上がざっくりとした,線形変換の概要です.
具体例は次回紹介しようと思います.

2008年11月21日金曜日

画像処理 第6回 線形フィルタ(実験)

こんにちは,以前の投稿が長過ぎたため,実際の例を分けることにしました.
では,早速紹介したこれらのフィルタを,サンプル画像に施してみましょう.

サンプルはFig.1です.これまた,数か月前,北海道で撮影したものです.

Fig.1 サンプル画像


Fig.2 平均化フィルタ(3*3)


Fig.3 平均化フィルタ(5*5)


Fig.4 ガウシアンフィルタ(σ=0.7)


Fig.5 ガウシアンフィルタ(σ=2)


Fig.6 微分フィルタ(横方向)


Fig.7 微分フィルタ(縦方向)


Fig.8 プリューイットフィルタ(横方向)


Fig.9 プリューイットフィルタ(縦方向)


Fig.10 ソーベルフィルタ(横方向)


Fig.11 ソーベルフィルタ(縦方向)


Fig.12 2次微分フィルタ(横方向)


Fig.13 2次微分フィルタ(縦方向)


Fig.14 ラプラシアンフィルタ


Fig.15 鮮鋭化フィルタ

微分,プリューイット,ソーベル,2次微分,ラプラシアンの5つのフィルタは,画素値のエッジを検出するものなので,サンプル画像をグレースケールに変換したあと,フィルタを施しています.フィルタリングした後の画素がプラスなら黄色,マイナスならシアン,としています.

これらのフィルタには,どんな効果があるかということが視覚的に分かったでしょうか.
次回は,線形で無い,非線形なフィルタについて紹介したいと思います.