画像処理・実習 第一回: ガイダンス,ディジタル画像の表現

Download Report

Transcript 画像処理・実習 第一回: ガイダンス,ディジタル画像の表現

画像処理・実習
第九回: 2値化画像
(画像の2値化,膨張と収縮,2値化図形の表現,線図形化処理)
東海大学
情報理工学部情報メディア学科
濱本和彦
今回の内容
4. 2値化画像

4.2 膨張と収縮



4.3 2値化図形の表現



画素の連結(近傍と隣接,連結)
膨張と収縮
ランレングス表現
チェーンコード表現
4.4 線図形化処理

実習
細線化
膨張と縮小
画素の連結
8近傍
4近傍
着目画素
膨張と縮小
画素の連結
4近傍の位置にある
=4隣接(8隣接)
8近傍の位置にある
=8隣接
着目画素
膨張と縮小
画素の連結
4-連結
8-連結
膨張と収縮
膨張



1-画素と0-画素の境界において,1-画素を1層分厚くすること
これにより0-画素による小さな溝や穴が取り除かれる
8近傍に1つでも1-画素があれば,その画素を1-画素とする
収縮



1-画素と0-画素の境界において,1-画素を1層分細くすること
これにより,1-画素による孤立点や突起が取り除かれる
8近傍に1つでも0-画素があれば,その画素を0-画素とする
膨張→収縮

0-画素による小さな溝や穴が取り除かれ,元の太さの画像となる
収縮→膨張

1-画素による孤立点や突起が取り除かれ,元の太さの画像となる
膨張→収縮→収縮→膨張

溝や穴,孤立点や突起が取り除かれた元の大きさの画像が得られる
膨張と収縮:実習
imgbinaryc.hを使います。
膨張

void Expansion(void)を確認して下さい。
収縮

void Contraction(void)を確認して下さい。
cameraman.rawについて,



まず可変しきい値処理を行い,
膨張→収縮処理をして下さい。
さらに続けて,収縮→膨張処理をして下さい。
lena.rawについても行ってみましょう。
膨張と収縮:結果
可変しきい値処理
膨張→収縮
黒画素による溝や
孤立点が消える
膨張→収縮
→収縮→膨張
白画素による
孤立点などが消える
2値化図形の表現
情報の伝送や保存のために,情報量を減
らしたい→情報圧縮
1[bit/pixel]→もっと情報量を減らすには?
[1,0]の並びの表現を工夫する→符号化法
ランレングス表現(符号化)

同じ画素値が続くことが多い性質を利用
チェーンコード表現

線図形のための符号化法
2値化図形の表現
ランレングス符号化
ラン
=連なり=ある事象の連続=白or黒画素の連続
レングス
=長さ
ランレングス
=白or黒画素が連続してつながっている長さ
白or黒画素は連続して現れることが多い
この性質を利用して情報量を削減する
2値化図形の表現
ランレングス符号化
→ (0,8)
→ (0,2), (1,5), (0,1)
0画素が 8つ連続する
→ (0,5), (1,2), (0,1)
→ (0,5), (1,1), (0,2)
→ (0,2), (1,5), (0,1)
→ (0,1), (1,1), (0,4), (1,1), (0,1)
→ (0,1), (1,6), (0,1)
→ (0,8)
図4.8
情報量:1[bit/pixel]
2値化図形の表現
ランレングス符号化(演習4.1)
(0,8)
→
(0,1), (1,5), (0,1)
→ 4ビット×3=12ビット
(0,5), (1,2), (0,1)
→ 12ビット
(0,5), (1,1), (0,2)
→ 12ビット
(0,2), (1,5), (0,1)
→ 12ビット
2進表現(0,
111) → 4ビット
ラン数
22
総ビット数
88ビット
情報量
1.375[bits/pixel]
(0,1), (1,1), (0,4), (1,1), (0,1) → 20ビット
(0,1), (1,6), (0,1)
→ 12ビット
(0,8)
→ 4ビット ラン数が多いと圧縮できない
ラン数が少ない=同じ色が続く
2値化図形の表現
ランレングス符号化:演習4.2
(0,10) (1,5) (0,6) (1,2) (0,6) (1,1)
(0,4) (1,5) (0,2) (1,1) (0,4) (1,1)
(0,2) (1,6) (0,9)
ラン最大長64→6ビット
+区切りビット 1ビット
=7[ビット/ラン]
総情報量 7×15=105[bits]
エントロピー 1.64[bits/pixel]
改良
2値化図形の表現
ランレングス符号化:演習4.2
(0,10) (1,5) (0,6) (1,2) (0,6) (1,1) (0,4) (1,5) (0,2) (1,1) (0,4) (1,1)
(0,2) (1,6) (0,9)
ランの長さ,色は自明
最初の色
0, 10, 5, 6, 2, 6, 1, 4, 5, 2, 1, 4, 1, 2, 6, 9
2進化
0 1010 101 110 10 110 1 100 101 10 1 100 1 10 110 1001
総情報量 39ビット
エントロピー 0.609[bits/pixel]
情報量は少なくなるが,
区切りが分からない!
ハフマン符号化
2値化図形の表現
チェーンコード表現
線図形の境界を効率的に符号化
出発点から順に,次の点が8近傍のどの方向に
あるかを抽出し,その方向を保存
3 2 1
4 (i,j) 0
5 6 7
8方向符号
チェーンコード
0, 7, 0, 0, 0, 6, 6, 5, 5, 4, 3
どんな大きさの画像でも,
情報量は 3[bits/pixel]
参考:n×n画像の時
[次の点の(x,y)座標でつ
ながりを表現する場合]
→n2種類のパターン
→ 2a=n2 → a=2log2n[bits/pixel]
2値化図形の表現
チェーンコード表現:演習4.3
(x, y)
3, 1, 7, 0, 1, 7, 6, 5, 5, 4, 3, 4, 5
線図形化処理
細線化
2値化図形から,線幅1の中心線を抽出
文字認識やパターン認識の前処理として
利用
原画像
2値化画像
細線化
線図形化処理
細線化
歪み
ひげ
切断
2値化画像
細線化
歪み
線図形化処理
細線化
細線化図形に求められる特徴
中心線の線幅は1
 中心線が元の図形の中心であること
 切断や孔がない(連結性の保存)
 不必要な「ひげ」が生じないこと
 中心線が縮まないこと
 交差部において歪まないこと

線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
概要




左上からラスタ走査
注目点(x,y)が1-画素の時,その8近傍を調査
8近傍の1-画素の個数によって場合分けをする
ある条件判断を行い,その注目点を0-画素にするか決定(0-反転)




0-反転処理後の画像データを別配列に保存
走査終了時,0-反転の回数が0ではない場合,0-反転画像を入力画
像として繰り返し


0-反転する→幅を細くする
0-反転後,4連結を維持している事=4連結細線化
0-反転の回数が0
→もうそれ以上細くする場所はない→細線化終了
線幅1の1-画素からなる線図形ができる
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 0 : 8近傍の1-画素の個数が0の場合
0
0
0
0
1
0
0
0
0
注目画素のみが1-画素で
周囲は0-画素
注目点は孤立点であり線
ではない
雑音と見なして0-反転する
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 1 : 8近傍の1-画素の個数が1の場合
注目画素は端点となる
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
1
0
0
1
0
0
0
0
0
1
0
0
1
1
0
0
0
0
0
0
線の一部?
0-反転すると線が縮む
ひげ(雑音)?
0-反転して消す必要あり
処理回数が少ない=雑音とみなす
処理回数が多い=線とみなす
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 2 : 8近傍の1-画素の個数が2の場合
0
0
1
0
1
0
0
1
0
0
1
0
1
0
0
0
1
0
1
0
0
0
0
0
0
1
0
1
1
1
0
0
1
0
0
0
8近傍の1-画素のマスが3マス
離れている場合
1-画素は連結している
注目点を0-反転すると線が
途切れてしまう
0-反転しない
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 2 : 8近傍の1-画素の個数が2の場合
0
0
1
0
1
0
1
1
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
0
1
0
0
1
1
0
1
0
1
0
0
8近傍の1-画素のマスが2マス
離れている場合
1-画素は連結している
注目点を0-反転すると線が
途切れてしまう
0-反転しない
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 2 : 8近傍の1-画素の個数が2の場合
1
0
1
0
1
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
0
1
0
0
1
0
1
0
0
8近傍の1-画素のマスが1マス
離れている場合
1-画素は連結している
注目点を0-反転すると線が
途切れてしまう or 4-連結で
なくなる
0-反転しない
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 2 : 8近傍の1-画素の個数が2の場合
1
1
0
1
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
1
1
1
0
8近傍の1-画素のマスが隣接
している場合
注目画素は端点となる
case 1 の場合と同様の処理を
行う
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 3 : 8近傍の1-画素の個数が3の場合
1
1
0
0
0
1
1
0
0
0
1
0
0
1
0
0
1
0
1
1
0
0
1
1
0
1
0
1
1
0
0
1
0
0
1
0
0-反転すると途切れてしまう
0-反転すると4-連結でなくなる
case 2 の場合と同様,注目点が端点になり得る場合のみ0-反転できる
(線幅2の端点または突起となるため,常に0-反転可能)
ただし,case 3 以降は,既走査部がすでに0-反転されていると状況が変わる。。
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 3 : 8近傍の1-画素の個数が3の場合
0
1
1
1
1
1
1
1
0
1
0
0
0
1
1
0
1
0
1
1
0
1
1
0
0
0
0
0
0
0
0
0
0
1
0
0
3つの1-画素が並んでいる場合のみ0-反転を行う
全部で8パターン
既に走査した部分の検討
は既に走査した部分
0
10
10
0
1
1
既に0-反転していた → 0-反転不可
(4連結でなくなる)
0
0
0
既に0-反転していた → それでも0-反転可
残り7パターンについても考えてみよう
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 4 : 8近傍の1-画素の個数が4の場合
2種類のパターンに分類できる
<注目画素が直線の一部>
<注目画素が端点>
1 1 1
1 1 0
1 1 1
1 1 1
0 1 0
1 1 0
0 1 1
1 1 0
0 1 0
0 0 1
0 0 0
0 0 0
0 1 0
1 0 1
0 0 0
1 1 0
1 1 1
0 1 0
0 1 1
1 1 0
0 1 0
1 0 1
1 1 1
1 0 0
0-反転すると,4-連結でなくなる,
または途切れるため,反転不可
基本的に0-反転可だか,既走査部が
0-反転済みかどうかで状況が変わる
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 4 : 8近傍の1-画素の個数が4の場合
<注目画素が端点となる全パターン>
1 1 1
1 1 1
1 1 0
1 0 0
0 1 1
1 1 0
1 1 0
1 1 0
0 0 0
0 0 0
1 0 0
1 1 0
0 0 0
0 0 0
0 0 1
0 1 1
1 1 0
0 1 1
0 1 1
0 1 1
1 1 1
1 1 1
0 1 1
0 0 1
既に走査された部分について検討
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 4 : 8近傍の1-画素の個数が4の場合
1
1
1
0
1
1
0
0
0
が既に0-反転していたら
注目画素を0-反転すると4-連結でなくなる
0-反転は不可
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 4 : 8近傍の1-画素の個数が4の場合
1
1
1
0
1
1
0
0
0
が既に0-反転していたら
注目画素を0-反転すると途切れる
0-反転は不可
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 4 : 8近傍の1-画素の個数が4の場合
1
1
1
0
1
1
0
0
0
が既に0-反転していたら
注目画素を0-反転しても連結は保持される
他の7パターンについても
考えてみましょう!
0-反転は可能
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 5 : 8近傍の1-画素の個数が5の場合
2種類のパターンに分類できる
<3つの0-画素が不連続>
<3つの0-画素が連続>
1 1 1
1 1 0
1 1 1
1 1 1
0 1 0
1 1 0
1 1 1
1 1 0
0 1 1
0 1 1
0 0 0
1 0 0
0 1 0
1 1 1
0 0 1
1 1 0
1 1 1
0 1 0
0 1 1
1 1 0
0 1 1
1 0 1
1 1 1
1 1 0
0-反転すると,4-連結でなくなる,
または途切れるため,反転不可
基本的に0-反転可だか,既走査部が
0-反転済みかどうかで状況が変わる
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 5 : 8近傍の1-画素の個数が5の場合
<3つの0-画素が連続となる全パターン>
1 0 0
0 0 1
1 1 1
1 1 1
1 1 0
0 1 1
0 1 1
1 1 0
1 1 1
1 1 1
0 0 1
1 0 0
0 0 0
0 1 1
1 1 1
1 1 0
1 1 1
0 1 1
1 1 1
1 1 0
1 1 1
0 1 1
0 0 0
1 1 0
既に走査された部分について検討
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 5 : 8近傍の1-画素の個数が5の場合
1
0
0
1
1
0
1
1
1
が既に0-反転していたら
注目画素を0-反転しても連結は保持される
0-反転は可能
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 5 : 8近傍の1-画素の個数が5の場合
1
0
0
1
1
0
1
1
1
が既に0-反転していたら
注目画素を0-反転したら途切れてしまう
他の7パターンについても
考えてみましょう!
0-反転は不可
線図形化処理
3×3のマスクを用いた4-連結細線化アルゴリズム
case 6以降は,0-反転すると孔になる可能
性が高いため処理対象から外しています。

近傍8画素のうち6画素以上が1-画素ということである
から,着目画素(中心画素)は1-画素で囲まれている
と言っても良く,このため,着目画素を0-画素とすると
孔になる可能性が高くなってしまう
細線化:実習
imgbinary2.hを利用してください。
image_processing9.cに#include文を追加してく
ださい(最後に追加して下さい)。
細線化関数,void Thinning(void)を完成させてく
ださい。

case 4とcase 5について,残りの3パターンを完成さ
せてください。
細線化:実習
characters.rawを細線化しなさい。




Thinning()は,1-画素で描かれている図形,画像を細
線化します。characters.rawは,文字が0-画素になるの
で,Inverse()を行い文字が1-画素となるようにして下さ
い。
2値化した後でThinning()を実行することを忘れないよ
うに。
2値化→Inverse()→Thinning()→Inverse()の順です。
case 1 と case 2 における処理回数の閾値を変更して
画像の変化をみましょう。
lena.rawについても行ってみましょう。

女性の輪郭線をうまく抽出するにはどうすればよいで
しょう?


複数の処理を組みあわせることが大事です。
微分処理をしてエッジを出して2値化するとうまくいく?
細線化:実習結果
case 1,2の閾値が3の場合
ひげが目立つ
case 1,2の閾値が7の場合
ひげは多少除去されたが,
「B」において線が縮小して
しまっている。
課題
右の画像は乳腺悪性腫瘍
(癌)の超音波画像です。
(ファイル名:
breastcancer2.raw)
コンピュータで自動診断す
る場合は,腫瘍部分のみ抽
出する必要があります。
これまでに学んだ空間フィ
ルタ,2値化処理の手法を
応用して,腫瘍部分だけを
出来るだけ正確に抽出出来
る画像処理を考えて下さい。
レポートにまとめてi-collabo
より提出
この,周囲より黒い領域が腫瘍になります
期限:6/24, 23:59
基本的な輪郭線抽出法
ノイズ除去
微分処理
2値化
腫瘍輪郭が周囲から切り離されていること(腫瘍内外
の領域にノイズが残っていても構いません)。これが最
重要採点基準です。
輪郭線が出来るだけ細いこと。

細線化処理を加えても良い
細かな輪郭形状を出来るだけ残していること。
オリジナルのフィルタを考案してもよい。

平滑化や微分の係数を変えるなど
参考
(先端研究例です)
正確な自動診断が出来
た時の輪郭抽出結果
画像例
誤った診断結果を出力した
時の輪郭抽出結果
回答例
(breastcancer.rawでの例)
途切れているため
良くない結果
この程度抽出
できれば合格!