「領域分割処理」の編集履歴(バックアップ)一覧はこちら
「領域分割処理」(2012/11/15 (木) 22:53:10) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
**領域分割処理
ある写真なんかをとった時、その画像には色んな物体が映っていますね。
ビルだとか、木だとか、人だとか・・・
これらのモノを画像から自動的に解析して、ある一つの領域として分割する方法を考えてみましょう。
**領域統合法
一番単純な方法は、「近傍の中で最も画素値が近いものを統合」する処理を何度も繰り返すことです。
例えば画素値が
#image(http://www58.atwiki.jp/dooooornob/?cmd=upload&act=open&page=%E9%A0%98%E5%9F%9F%E5%88%86%E5%89%B2%E5%87%A6%E7%90%86&file=arearegion1.png)
みたいな画素値を持つ3×3のビット画像があったとします。
ここで右下の画素を平均とって統合してやると
#image(http://www58.atwiki.jp/dooooornob/?cmd=upload&act=open&page=%E9%A0%98%E5%9F%9F%E5%88%86%E5%89%B2%E5%87%A6%E7%90%86&file=arearegion2.png)
こんなことを繰り返していくと徐々に画像が平坦化していって最後は全画像が同じ画素値になってしまいます。
そうならない程度に平均化を止めると例えばこんな風になります。
#image(http://www58.atwiki.jp/dooooornob/?cmd=upload&act=open&page=%E9%A0%98%E5%9F%9F%E5%88%86%E5%89%B2%E5%87%A6%E7%90%86&file=arearegion3.png)
これによって上の領域と、下の領域に領域分割が出来ました。
**特徴量によるクラス分け
別の方法として[[パターン認識>>http://www58.atwiki.jp/dooooornob/pages/37.html]]という手法によるクラス分け方法があります。
ある物体領域がどのクラスに置かれるかというデータベースをもとに領域分割をするわけです。
**スネーク
#image(http://www58.atwiki.jp/dooooornob/?cmd=upload&act=open&page=%E9%A0%98%E5%9F%9F%E5%88%86%E5%89%B2%E5%87%A6%E7%90%86&file=curveenergy.png)
もう一つ、&bold(){スネーク}という手法は閉曲線のエネルギーを次のように定め、それを最小化することによりエッジを決定するような方法です。
$$ E_s=\int_0^1 E_{internal}(v(s))ds+\int_0^1 E_{image}(v(s))ds \cdots (1) $$
$$v(s)$$は$$s$$を媒介変数とする曲線です。これら各項についてそれぞれ検討してみましょう。
まず、$$E_{internal}$$について、より細かく分割すると次のようになります。
$$ E_{internal}=\alpha E_{continuity}(v(s))+\beta E_{curvature}(v(s)) $$
係数はそれぞれ重みづけの係数でその時々に応じて決定します。
さて、それぞれのエネルギーは
$$ E_{continuity}(v(s))=\left| \frac{dv}{ds} \right|^2 $$
$$ E_{curvature}(v(s))=\left| \frac{d^2v}{ds^2} \right| $$
ここで、1個目の式ですが、これを式(1)にしたがって積分すれば、この曲線の『長さ』が出ますね。
二個目の式はまず曲線を微分しているので『方向ベクトルの向き』を表し、その微分を式(1)で積分しているので『方向ベクトルの向きの変位』を表しています。
つまり、曲線のなめらかさですね。
次に、$$E_{image}$$について、次のような式になります。
$$ E_{image}=-|\nabla I(v(s))| $$
で表されます。ここで$$I(v(s))$$は位置$$v(s)$$における画素値を表しています。
ラプラシアンは全方向の周囲との値の差でしたね。
すなわちこの式は周りの画素値との差の"マイナス"ですから、エッジが強ければ強いほど小さな値になります。
以上のことを総合すれば
『曲線が短く』『曲線がなめらかで』『エッジが強い』ような曲線が境界として選ばれることが分かります。
**領域分割処理
ある写真なんかをとった時、その画像には色んな物体が映っていますね。
ビルだとか、木だとか、人だとか・・・
これらのモノを画像から自動的に解析して、ある一つの領域として分割する方法を考えてみましょう。
**領域統合法
一番単純な方法は、「近傍の中で最も画素値が近いものを統合」する処理を何度も繰り返すことです。
例えば画素値が
#image(http://www58.atwiki.jp/dooooornob/?cmd=upload&act=open&page=%E9%A0%98%E5%9F%9F%E5%88%86%E5%89%B2%E5%87%A6%E7%90%86&file=arearegion1.png)
みたいな画素値を持つ3×3のビット画像があったとします。
ここで右下の画素を平均とって統合してやると
#image(http://www58.atwiki.jp/dooooornob/?cmd=upload&act=open&page=%E9%A0%98%E5%9F%9F%E5%88%86%E5%89%B2%E5%87%A6%E7%90%86&file=arearegion2.png)
こんなことを繰り返していくと徐々に画像が平坦化していって最後は全画像が同じ画素値になってしまいます。
そうならない程度に平均化を止めると例えばこんな風になります。
#image(http://www58.atwiki.jp/dooooornob/?cmd=upload&act=open&page=%E9%A0%98%E5%9F%9F%E5%88%86%E5%89%B2%E5%87%A6%E7%90%86&file=arearegion3.png)
これによって上の領域と、下の領域に領域分割が出来ました。
**特徴量によるクラス分け
別の方法として[[パターン認識>>http://www58.atwiki.jp/dooooornob/pages/37.html]]という手法によるクラス分け方法があります。
ある物体領域がどのクラスに置かれるかというデータベースをもとに領域分割をするわけです。
**スネーク
#image(http://www58.atwiki.jp/dooooornob/?cmd=upload&act=open&page=%E9%A0%98%E5%9F%9F%E5%88%86%E5%89%B2%E5%87%A6%E7%90%86&file=curveenergy.png)
もう一つ、&bold(){スネーク}という手法は閉曲線のエネルギーを次のように定め、それを最小化することによりエッジを決定するような方法です。
$$ E_s=\int_0^1 E_{internal}(v(s))ds+\int_0^1 E_{image}(v(s))ds \cdots (1) $$
$$v(s)$$は$$s$$を媒介変数とする曲線です。これら各項についてそれぞれ検討してみましょう。
まず、$$E_{internal}$$について、より細かく分割すると次のようになります。
$$ E_{internal}=\alpha E_{continuity}(v(s))+\beta E_{curvature}(v(s)) $$
係数はそれぞれ重みづけの係数でその時々に応じて決定します。
さて、それぞれのエネルギーは
$$ E_{continuity}(v(s))=\left| \frac{dv}{ds} \right|^2 $$
$$ E_{curvature}(v(s))=\left| \frac{d^2v}{ds^2} \right| $$
ここで、1個目の式ですが、これを式(1)にしたがって積分すれば、この曲線の『長さ』が出ますね。
二個目の式はまず曲線を微分しているので『方向ベクトルの向き』を表し、その微分を式(1)で積分しているので『方向ベクトルの向きの変位』を表しています。
つまり、曲線のなめらかさですね。
次に、$$E_{image}$$について、次のような式になります。
$$ E_{image}=-|\nabla I(v(s))| $$
で表されます。ここで$$I(v(s))$$は位置$$v(s)$$における画素値を表しています。
ラプラシアンは全方向の周囲との値の差でしたね。
すなわちこの式は周りの画素値との差の"マイナス"ですから、エッジが強ければ強いほど小さな値になります。
以上のことを総合すれば
『曲線が短く』『曲線がなめらかで』『エッジが強い』ような曲線が境界として選ばれることが分かります。
#javascript(){{
<!-- admax -->
<script type="text/javascript" src="http://adm.shinobi.jp/s/2378325e5782e4336b0932b16cb17597"></script>
<!-- admax -->
}}