平成
16
年度
学士学位論文
ヒストグラムを用いた
画像の輪郭強調フィルタ
Edge emphasis filter of images that uses Histogram
1050307
岡本 憲明
指導教員
岡田 守
2005
年
2
月
18
日
要 旨
ヒストグラムを用いた
画像の輪郭強調フィルタ
岡本 憲明
輪郭強調フィルタは,顔画像やプリント基板,一般のシーンを認識する分野において,主 に画像の輪郭部位の特徴を強調する目的に用いられる. 一般的に用いられるフィルタに,オペレータを用いる手法がある.これらのフィルタの中 には,画像によって輪郭が正確に出るもの,輪郭がうまく強調できないものが存在する. 本稿では,画像の輪郭強調フィルタのオペレータが常に一定であることに疑問を持ち,こ のオペレータが画像から得たヒストグラムを用いて輪郭を強調するフィルタを提案してい る.また,RGB以外のカラーモデルに変換された画像から作成したヒストグラムを用いた フィルタについても検証している. 本実験で提案したフィルタによって輪郭を強調された画像と,一般的に用いられるフィル タによって輪郭を強調された画像を比較し,輪郭強調という基準の下に9名の被験者によっ て評価実施した結果を述べている. キーワード ヒストグラム, ラプラシアン, 輪郭強調Abstract
Edge emphasis filter of images that uses Histogram
Noriaki Okamoto
The edge emphasis filter is usually used to recognize images of a face, printed wiring board, and general scenes. In many cases, it feature of the edge is emphasized by the filter which uses an operator. However, the filters sometimes can’t accurately emphasize the edges of the images. In this paper, we have been proposed a filter which emphasizes the edge by an operator made with the image’s histogram. Moreover, we have been verified another filter which made with a histogram of a non-RGB color model image. Finally, we have been used the common filter to assess the validity of the proposed filters by experimenting with nine testers.
目次
第1章 研究背景 1 第2章 研究目的 3 第3章 研究内容 5 3.1 入力画像 . . . 5 3.2 濃度値による分類 . . . 6 3.3 アルゴリズム . . . 6 3.3.1 オペレータの設計 . . . 7 3.3.2 ヒストグラム . . . 8 3.3.3 基本手順 . . . 9 3.3.4 開発環境 . . . 11 3.3.5 プログラムの設計 . . . 11 3.3.6 評価方法 . . . 14 第4章 実験 16 4.1 実験環境 . . . 16 4.2 撮影環境 . . . 17 4.3 既存フィルタによる出力例 . . . 18 4.3.1 Roberts . . . 18 4.3.2 Prewitt . . . 19 4.3.3 Sobel . . . 20 4.3.4 4近傍 . . . 21 4.3.5 8近傍 . . . 22 4.3.6 1次微分 . . . 23目次 4.3.7 2次微分(ラプラシアン) . . . 24 4.4 Filter8による出力例 . . . 25 4.5 フィルタ . . . 26 4.5.1 フィルタのプログラムコード . . . 26 4.5.2 濃度値の出現頻度による画素の塗り分け . . . 29 4.5.3 カラーモデルの違いによる影響 . . . 30 4.5.4 ぼやけた境界に対する影響 . . . 32 4.6 アンケート結果 . . . 33 4.7 実験結果 . . . 35 第5章 考察と課題 37 5.1 考察. . . 37 5.2 今後の課題 . . . 39 謝辞 40 参考文献 41 付録A 標準画像 42 付録B デジタルスチルカメラによる画像 45 付録C 単純なパターン 46
図目次
1.1 オペレータ(左)と入力画像画素(中央)と出力画像画素(右) . . . 1 3.1 入力画像:デジタルカメラによる画像 . . . 5 3.2 入力画像:標準画像のひとつ . . . 5 3.3 ヒストグラム . . . 9 3.4 フィルタの手順 . . . 10 3.5 アンケートプログラム画面 . . . 15 4.1 Robertsのオペレータ . . . 18 4.2 入力画像(デジタルカメラ) . . . 18 4.3 出力画像(デジタルカメラ):Roberts . . . 18 4.4 入力画像(標準画像) . . . 18 4.5 出力画像(標準画像):Roberts . . . 18 4.6 Prewittのオペレータ . . . 19 4.7 入力画像(デジタルカメラ) . . . 19 4.8 出力画像(デジタルカメラ):Prewitt . . . 19 4.9 入力画像(標準画像) . . . 19 4.10 出力画像(標準画像):Prewitt . . . 19 4.11 Sobelのオペレータ . . . 20 4.12 入力画像(デジタルカメラ) . . . 20 4.13 出力画像(デジタルカメラ):Sobel . . . 20 4.14 入力画像(標準画像) . . . 20 4.15 出力画像(標準画像):Sobel . . . 20 4.16 入力画像(デジタルカメラ) . . . 21図目次 4.17 出力画像(デジタルカメラ):4近傍 . . . 21 4.18 入力画像(標準画像) . . . 21 4.19 出力画像(標準画像):4近傍 . . . 21 4.20 入力画像(デジタルカメラ) . . . 22 4.21 出力画像(デジタルカメラ):8近傍 . . . 22 4.22 入力画像(標準画像) . . . 22 4.23 出力画像(標準画像):8近傍 . . . 22 4.24 1次微分のオペレータ . . . 23 4.25 入力画像(デジタルカメラ) . . . 23 4.26 出力画像(デジタルカメラ):1次微分 . . . 23 4.27 入力画像(標準画像) . . . 23 4.28 出力画像(標準画像):1次微分 . . . 23 4.29 ラプラシアン(2次微分)のオペレータ . . . 24 4.30 入力画像(デジタルカメラ) . . . 24 4.31 出力画像(デジタルカメラ):2次微分 . . . 24 4.32 入力画像(標準画像) . . . 24 4.33 出力画像(標準画像):2次微分 . . . 24 4.34 入力画像(デジタルカメラ) . . . 25 4.35 出力画像(デジタルカメラ):Filter8 . . . 25 4.36 入力画像(標準画像) . . . 25 4.37 出力画像(標準画像):Filter8 . . . 25 4.38 ヒストグラムによる塗り分け . . . 29 4.39 HSVによるFilter8(左から 入力画像,色相,彩度,明度 の順) . . . 30 4.40 YUVによるFilter8(左から 入力画像,輝度,色差(青),色差(赤) の順) 30 4.41 カラーモデル3種による比較(左から 入力画像,RGB,HSV,YUV の順) いずれもFilter8 . . . 31
図目次 4.42 ぼやけた斜め入力画像 . . . 32 4.43 ぼやけた斜め2次微分出力 . . . 32 4.44 ぼやけた斜めFilter8出力 . . . 32 4.45 斜め入力画像 . . . 32 4.46 斜め2次微分出力 . . . 32 4.47 斜めFilter8出力 . . . 32 4.48 ぼやけた縦横入力画像 . . . 33 4.49 ぼやけた縦横2次微分出力 . . . 33 4.50 ぼやけた縦横Filter8出力 . . . 33 4.51 縦横入力画像 . . . 33 4.52 縦横2次微分出力 . . . 33 4.53 縦横Filter8出力 . . . 33 4.54 アンケート結果 . . . 34 4.55 アンケート画像ファイル別結果 . . . 34 4.56 Filter8(HSVのH)で輪郭が抽出できなかったEarth.png . . . 35 4.57 Balloon.pngの出力例 . . . 36 4.58 Mandrill.pngの出力例 . . . 36 5.1 フィルタの部分比較 . . . 38 A.1 標準画像:Aerial.eps . . . 42 A.2 標準画像:Airplane.eps . . . 42 A.3 標準画像:Balloon.eps . . . 42 A.4 標準画像:couple.eps . . . 42 A.5 標準画像:Earth.eps . . . 43 A.6 標準画像:Girl.eps . . . 43 A.7 標準画像:Lenna.eps . . . 43
図目次 A.8 標準画像:Mandrill.eps . . . 43 A.9 標準画像:milkdrop.eps . . . 44 A.10標準画像:Parrots.eps . . . 44 A.11標準画像:Pepper.eps . . . 44 A.12標準画像:Sailboat.eps . . . 44 B.1 デジタルカメラによる画像:kanban.eps(カラー) . . . 45 B.2 デジタルカメラによる画像:kanban g.eps(白黒) . . . 45 B.3 デジタルカメラによる画像:copen.eps . . . 45 B.4 デジタルカメラによる画像:test 01.eps . . . 45 C.1 パターン:c 01.eps . . . 46 C.2 パターン:c 01n.eps . . . 46 C.3 パターン:c 02.eps . . . 46 C.4 パターン:c 02n.eps . . . 46
表目次
3.1 開発用端末仕様 . . . 11 3.2 テスト用端末仕様 . . . 11 3.3 ソースコードファイル一覧 . . . 12 3.4 imgArray.javaの変数 . . . 12 3.5 imgArray.javaのコンストラクタと関数 . . . 13 3.6 ex fil.javaの関数 . . . 14 4.1 フィルタ実験用端末仕様 . . . 16 4.2 アンケート用端末仕様 . . . 16 4.3 デジタルカメラの仕様 . . . 17第
1
章
研究背景
画像の特徴を強調する目的で,輪郭強調は図形の認識や識別においてはよく用いられてい る.また,認識・識別の分野以外にも画像処理のフィルタとして用いられる.多くのフィルタ が存在するが,代表的なものには「8近傍」「2次微分(ラプラシアン)」「Prewitt」「Sobel」 などが存在する.PrewittやSobelは抽出される輪郭に鮮明さが欠けており,全体的にエッ ジが甘く太い輪郭が得られる.ラプラシアンや8近傍においては,シャープで鮮明かつしっ かりとした輪郭が得られるが,大まかな部分の輪郭しか得られない.いずれのフィルタにお いても,細かいディテールが抽出されにくい.これらのフィルタは近傍に重みを持っており, その重みと濃度値の積和によって出力がその濃度値を決定している.オペレータは3×3マ スのマトリックスで,中央と周辺の重みは符号や数値で差をつけている.例えばラプラシア ン(2次微分)のオペレータは,中央が-4で周囲が1の重みを持っている.入力画像 Pの P(i,j)の画素をフィルタリングして出力画像のQ(i,j) に出力するとする.入力画像PからP(i,j)を中心とする3×3 マスで画素を切り出し,オペレータOP(i-1,j-1)∼OP(i+1,j+1)
まで対応する要素との積をとり,その総和をQ(i,j)へ入力する.
Q(i,j) = 1 X j=−1 ³X1 i=−1
(OP(i,j)∗ P(i,j))
´ (1.1) ラプラシアン(2次微分)は,中央の濃度値にオペレータの中央の値(-4)との積,そし て周囲(上下左右の4マス)の対応する濃度値とオペレータの重みの積和を計算する.この 計算で得られた値が出力画像のQ(i,j)の濃度値となる.このとき,(i,j)の値が最大値に近づ けばその画素は輪郭であり,最小値に近づけば輪郭ではないとされる.24bitRGBの画像で 言えば,輪郭は白くなり,それ以外は黒くなる.また,このオペレータはフィルタごとに固 有の値が定められ,画像の種類や状態に関係なく常に同じなのである.そのため,フィルタ は画像によって輪郭がよく出るもの・出ないものがあり,斜め方向に伸びるような輪郭を抽 出することができないフィルタも存在する.つまり,万能なフィルタは存在しない.
第
2
章
研究目的
輪郭強調フィルタは,画像の輪郭を検出し強調または抽出するものである.輪郭を抽出す る方法としては,隣り合う画素間の濃度値の勾配を検出するものが多い.では,輪郭はどの ようなところに存在するのか.「闇夜のカラス」ということがあるが,暗闇にカラスが止まっ ていたとしても,月明かりでもない限りそれを見ることはできないということである.通常 人の目によって輪郭と認識されるのは「色が変化する」部分である.つまり,隣り合う色が 異なるときに形の輪郭を捉えることができるのである. この輪郭を画像上で区別するために,画像を領域で分類すると同一系色が集まった「面」, 周囲と異なる色が突発的に存在する「ノイズ」,異なる色が隣り合う「境界」の 3種類に分 類できる.輪郭として定義できるのは,異なる色同士が接する境界線が望ましいと考えられ る.そこで,輪郭抽出においてこの境界を積極的に抽出するような手法があれば,より多く の輪郭を正確に抽出できるのではないかと考えた.面は同一系の色が密集していると考えれ ば,面と面の境界は必然的に小さくなるはずである. またノイズは面などの中に突発的に存在し,見かけ上周りの画素との色合いや配置が異な るものである.つまり,まわりの画素から比較して小さな領域に点々と存在したり,複数が 集合した状態であっても,それ自身が占める領域の大きさは小さくなる.したがって,ノイ ズとされる領域は1個1個が小さく,画像そのもにノイズが多い場合を除いて個数も極端に 多くなることは考えにくい.面やノイズ以外の領域が画像に占める領域は決して広いもので はない.画像に占める領域が中程度の部分が境界,つまり輪郭を含む領域なのではないかと 考えた. これらの領域を識別するのに有用であると考えたのが「ヒストグラム」である.ヒストグラムは,画像における画素の濃度値の出現数をカウントし,その出現頻度を表現したもので ある.面のように同じ濃度値が集合したような領域の濃度値は出現頻度が高くなり,ノイズ などの領域に出現する濃度値は出現頻度が低くなるはずである.輪郭が含まれる領域の広さ が中程度であるとするならば,出現頻度も中程度に近づくはずである.このヒストグラムか ら,面や境界・ノイズを出現頻度によって分類することができるのではないかと考えた.つ まり,出現頻度が多いのはより多くの領域を占める面であり,ノイズは個数や占める領域が 小さいため出現頻度は低くなる.境界は極端に多くなることや少なくなることはないのでは ないかという仮定の下,出現頻度によって領域を分類できるのではないかと仮定した. そこで本研究では,画像のヒストグラムからオペレータを作成し,既存のフィルタのオペ レータが画素の出現頻度によって変化することで,フィルタがどのような振る舞いをするか 検証した.
第
3
章
研究内容
3.1
入力画像
入力画像は,近年普及しているデジタルスチルカメラで撮影したものと,標準画像と呼ば れる研究者間で共有される画像データベース(SIDBA=Standard Image Data-BAse)に
ある画像を使用した.以下(図3.1)に示す画像「Balloon.png」以外にも人物・風景・人工 物・生物などの画像(計12枚)を用いた.デジタルスチルカメラは,一般的な画素数のも のを用いた.近年の一般的なデジタルスチルカメラの画素数としては,200万∼500万画素 のCCDを用いてるものが多い.本実験においても300万画素(補間技術で600万画素相 当)のデジタルスチルカメラを用いた.デジタルスチルカメラで撮影した画像には,風景・ 人工物(建物)・人物が写っている. 図3.1 入力画像:デジタルカメラによる画像 図3.2 入力画像:標準画像のひとつ
3.2 濃度値による分類
3.2
濃度値による分類
画像から濃度値の出現頻度(ヒストグラム)を取り出す.次に出現頻度から領域の濃度値 の分布を出現頻度ごとに塗り分けることで,濃度値の出現頻度による領域の分類が可能かど うか検証した.出現頻度が高い濃度値の座標を赤く,出現頻度が低い濃度値の座標を青く, 出現頻度が中程度の座標を緑で塗り分けた.出現頻度の分類の基準として,出現数が最大の 濃度値の出現数を分母として,各濃度値の出現数を分子に取ることで出現頻度とした.これ は,出現数の大小に偏りがある場合に,出現数が比較的小さい濃度値の出現頻度と出現数が 比較的大きな濃度値の出現頻度に大きな差が現れ,小さいものが小さくなりすぎてしまうの を避けるためである.小さくなりすぎた場合,グラフへ出力したときに出現頻度が低い部分 が0に近づくため,グラフ上でその大きさが確認しづらくなるからである. また,カラーモデルHSVとYUVを用いて,それぞれに違いを検証することとした.画 像は色で表現されていると考えることができる.ゆえに色相を要素に持つHSVは色による 画素の分類には適当であると考えた.YUVは画像の輝度と赤・青の色差信号として分解す ることができる.明るさだけのモノクロ画像であったとしても,輪郭を見て取れるのはそれ が色によるものだけではない.つまり,明るさに多くの情報量を持つYUVを用いても輪郭 は抽出できると考えることができるからである.3.3
アルゴリズム
他の輪郭強調フィルタと比較するという点から,基本的に既存のフィルタと同様のプロセ スを踏むこととし,既存のフィルタのアルゴリズムから,手順上の共通点を洗い出した.共 通する点は以下の3点である. • 画像の左上端から右へ参照し,右端で1画素下の左端に折り返す. • 重みが3×3マスのオペレータで表現される. • オペレータは参照する画素を中心とし,その周囲1画素との関係を表現している.3.3 アルゴリズム これら3点を踏まえた設計を行った.
3.3.1
オペレータの設計
オペレータを可変化するためには,オペレータを変化させる「きっかけ」が必要となる. この「きっかけ」は画像の個性(特性)から得られるのが望ましい.したがって,画像から 得られる情報から生成する必要がある.画像から得られる情報としては,「濃度値」「画素の 座標」「画素の並び(パターン)」「画像サイズ」などがある.既存のほとんどのフィルタは, 「濃度値」や「画素の並び(パターン)」から特徴を得るものが多い.実際にラプラシアンや 8近傍は,ある画素の周辺の濃度値との差の総和をオペレータの重みを加味することで輪郭 を強調している.しかし,そのほとんどが画像の濃度値を直接処理している.2次的に得ら れた情報を用いることはほとんどない.そこで,画像から得られる,または生成できる情報 として次の2点をとりあげフィルタを設計した. • ヒストグラム • カラーモデル:HSV,YUV 処理にかかる計算量を最小にするためには,別の処理や2次的情報を生成するよりも直接 処理することが望ましい.今回はこのタブーをあえて実施することにした.計算量は増加す るが,得られる結果を強化することにした.近年の計算機の処理能力の向上を考えると,同 量の計算を古い計算機で行った場合よりも早く処理が完了できるということであり,多少の 計算量の増加が起こったとしても,高速化した処理能力でカバーできると考えるからだ.ま た,計算量の削減はアルゴリズムが確定した後に,アルゴリズムの最適化を実施することで 可能であると考え,本実験では特に考慮しないものとした. 従来のオペレータでは,3×3マスのマトリックスを用いるが,本実験では画像全体の特 性を生かしたオペレータを作成する.つまり,画像の部分ごとにオペレータを用意するとす れば,すべての画素の濃度値にあわせたオペレータが3×3マスで納まるとは考えられな かった.オペレータの重みが画像によって変化するということは,適用する画素の並びに3.3 アルゴリズム よって重みが変化するということである.つまり,画像の特性によっては数種類から数十種 類以上のオペレータが存在することになる. オペレータの適用方法は同様であるが,オペレータを生成する手順とオペレータを3×3 マスで逐次切り出す手順が加わる.また,オペレータを作成する手順の前にヒストグラムを 作成する手順が必要となる. • 入力画像をカラーモデル(HSVやYUV)に変換し,ヒストグラムを作成する. • ヒストグラムからオペレータを作成する. • 輪郭強調フィルタのオペレータとヒストグラムから作成されたオペレータを入力画像に 適用する. 入力画像と同じサイズのマップを作成.ヒストグラムから出現数を基にした重みを格納. 画像に適用するときは,適用する画素を中心に3×3マスを切り出して,8近傍やラプラシ アンフィルタの手順を適用する.
3.3.2
ヒストグラム
ヒストグラムとは,画像の濃度値の出現頻度を表現するグラフなどである.一般的に,横 軸に濃度値,縦軸に出現数(頻度)の値をとり,画像の総画素数分の出現数で表現される. この出現頻度をグラフ化したものがヒストグラムである.本実験では,ヒストグラムの縦 軸(出現頻度)の最大値 100%を総画素数として表現しないで,出現頻度が最大の数値を 100%として計算している.これは,総画素数を分母に計算を行うと,出現頻度の値が小さ くなりすぎてしまう.例えば,幅 512ピクセル,縦 512ピクセル,256階調の画像があっ たとする.この画像の総画素数は「262144(512×512)」となる.ある濃度値の出現数が 「100」だったとすると,総画素分の100で「0.00038146972」となる.パーセントで表現す ると「0.0381%」となる.今度は,この画像で出現頻度が最大となるものの出現数が「500」 だったとして,最大数分の出現数で表現すると,同じ出現数「100」の濃度値の出現頻度は 「0.2(20%)」となる.出現頻度が極端に偏ったものや,夜空を撮影したような画像でもな3.3 アルゴリズム 図3.3 ヒストグラム い限り,個々の濃度値の出現頻度は小さくなってしまう.そこで,絶対的数値で出現頻度を 表現するのではなく,相対的な表現を用いることで値が極端に小さくなることを避けた.ま た,値を小さくしないことで計算上の誤差を小さくするメリットもある.
3.3.3
基本手順
画像は一般的なJPEGを用いるが,JPEGは非可逆圧縮であるため圧縮による画像の劣 化やノイズの出現は否めない.デジタルスチルカメラは,高級機でない限り(一部の機種 を除いて)RAWや可逆圧縮での記録には対応していない.一般的にはJPEGでの記録と なる.中には TIFFでの記録に対応したものもあるが,本実験では一般的に普及している タイプであるJPEGをデジタルスチルカメラによる撮影画像として実験対象とした.また, JPEGのブロックノイズ等の影響を考慮し,デジタルスチルカメラに依存しない標準画像 に関しては,取得時のフォーマットがBMPだったため,無圧縮・可逆圧縮の24bitカラー のPNGを利用することとした.PNGは近年,GIFの代替として用いられることが多いが, 無圧縮保存ができることや一般的に用いられるようになったことなどから,今回使用するこ とにした.全フィルタにおける基本的な共通手順は以下のとおりである.また,図3.4はそ の手順を図示したものである. 1. 画像の読み込み.(JPEGまたはPNGを読み込む)3.3 アルゴリズム 図3.4 フィルタの手順 2. 画像の濃度値を整数型のデータに分解(内部でクラス変数として実装) 3. ヒストグラムを作成(0∼255の配列で各階調をカウント) 4. ヒストグラムからオペレータを作成(画像サイズと同じサイズのマトリックス) 5. 画像の左上から右へスキャンし,順次オペレータを適用する. 6. 右端に達したら,1画素下の左端へ戻り右端までオペレーションを行う. 7. 最右下端に達した時点でオペレーション終了. なお,既存のフィルタ(オペレータが固定のもの)については,上記手順のうち3-4はオ ペレータが固定であることとヒストグラムを使用しないため,手順として存在しない.計算 方法はできるだけ誤差や誤計算をなくすため,整数で計算できるように計算式の組み立てを 考慮することとした.
3.3 アルゴリズム
3.3.4
開発環境
CPU AMD AthlonXP 3000+ RAM PC3200 512MB×2
OS Windows2000Professional(日本語版)
使用言語 Sun Microsystems Java 2 SDK,SE v1.4.2 EDITOR 秀丸v4.14
表3.1 開発用端末仕様
CPU Intel Pentium4 3.2GHz RAM PC3200 DDR 1GB OS WindowsXP Professional(日本語版) 表3.2 テスト用端末仕様
3.3.5
プログラムの設計
プログラムは4つの機能に分類して設計した.画像を読み込む「入力部」,画像の濃度値 を整数で格納する「データ部」,画像にフィルタ処理を適用する「フィルタ部」,画像をファ イルへ書き出す「出力部」である. 本研究はプログラムの研究ではないため,フィルタの処理とフィルタに依存しない部分の 機能を分化した.それに伴い,上記4分類をプログラム的に分けて開発した.データ部は データを格納する部門であり,共通して使う部分である.従って,特に仕様の変更が途中で 発生してはならない.また,画像データのファイルへの入出力である,入力部・出力部に関 しても同様であり,データ部と共にフィルタのプログラムから分離した.これらのことから, プログラムコードを2個作成した.フィルタ本体とプログラム全体を制御する「本体」,画 像ファイルの読み込みと書き出し,データ(濃度値や画像サイズ)の取り出しと書き換えを 行う機能を持つ「データ部」に分化した.プログラム本体は,データ部をクラス変数として 呼び出す方法とした. データ部の「imgArray.java」は,コンストラクタで画像ファイルの読み込みを行い,読 み込んだ画像の濃度値をすべて整数型の配列変数で格納する.同時に,画像のファイル名,3.3 アルゴリズム サイズ(幅と高さ)を格納する.これらの値は,各関数によって取得することができる.濃 度値については座標と RGBを指定して取り出すことができる.また,逆に RGB と座標 を指定して濃度値をセットすることもできる.なお,濃度値は入力画像を一般的な画像の RGB(24bit)を対象としているため,0∼255 以外の値を想定していない.付加機能とし て,HSVやYUVの各要素の値を取り出すこともできるが,格納されているデータはすべ てRGB の状態であり,取り出すときに各カラーモデルの要素に計算によって変換された値 を出力するものである. プログラム本体である「ex fil.java」は,main関数で実行するフィルタの種類やオプショ ン,入力画像ファイル名と出力名,出力画像のファイルフォーマットを指定したオプション を解釈し,各フィルタの関数を呼び出して画像をファイルへ書き出す.実際のファイルへの 書き出し処理はimgArray の方で行うが,その呼び出しとファイル名の制御を行っている.
実行時にコマンドラインから「java ex fil -Filter8(RGB) test.jpg png test」として入力す ると,「ex fil.class」が置かれているフォルダと同じ階層の画像ファイル「test.jpg」を読み 込み,Filter8を通した画像ファイル「test Filter8.png」が同じ場所へ出力される.本実験 プログラムでは,プログラムをできるだけ簡素なものにし,画像のフィルタリングに特化し たプログラムとするため,アプレットなどのGUIを用いなかった.GUIを実装しなかった 分コーディングにかかる労力や時間を節約でき,バグの発生を抑えられるからだ. 部門名 ソースコード名 機能 本体 ex fil.java メインルーチン,各種フィルタ,引数制御 データ部 imgArray.java 画像ファイル入出力,データ入出力 表3.3 ソースコードファイル一覧 変数名 型 備考 fileName String ファイル名格納 pix int[] 濃度値を格納(配列の範囲は画像の総画素数) width int 画像の幅を格納 height int 画像の高さを格納 表3.4 imgArray.javaの変数
3.3 アルゴリズム
関数名 返り値 引数 備考
imgArray void String fileName コンストラクタ
imgArray void int x,y, コンストラクタ
String fileName
imgArray void N/A コンストラクタ
getFileName String N/A 画像のファイル名の取り出しと変更
setFileName void String FileName 画像のファイル名の取り出しと変更
getW int N/A 画像の幅の取り出し
setW void int newW 画像の幅の取り出し
getH int N/A 画像の高さの取り出し
setH void int newH 画像の高さの取り出し
getR/G/B int int x,y RGBの赤/緑/青の値を取り出す
setR/G/B void int x,y,z RGBの赤/緑/青の値を書き換える
getRGB int int x,y 24bitのRGBを取り出す
setRGB void int x,y,z 24bitのRGBを書き換える
getYUV int int x,y,yuv YUVを取り出す
(yuv:0=Y,1=U,2=V,その他=Y) getHSV int int x,y,hsv HSVを取り出す
(hsv:0=H,1=S,2=V,その他=H) outputImg void String outFileName PNGファイルへのデータ出力
outputImg void String outFileName, 画像ファイルへのデータ出力
int Fo 出力フォーマットを番号で指定
outputImg void String outFileName, 画像ファイルへのデータ出力
String Fo 出力フォーマットを記号で指定
copyArray imgArray N/A 自己のコピーを返す
表3.5 imgArray.javaのコンストラクタと関数
表3.3.5のFilter5∼Cは,ヒストグラムからオペレータを生成する方法を検討する過程
で作成した試作フィルタを含んでいる.Filter7まではFilter5を改良する形で作成している
が,Filter8は新たに作成した.Filter8以降はFilter8をベースに改良を加えている.
Filter5∼7はヒストグラムの生成方法に問題があった.出現頻度を0∼100の値で計算し ており,オペレータの重みにそのままの値が入るようになっている.その結果,出力される 濃度値が大小の差が両極端となり,輪郭抽出とは言えない結果をもたらした.アルゴリズム を根本的に整理し,新しく設計しなおしたのがFilter8である.濃度値とオペレータの積和 を得る部分も変更している.まずヒストグラムを取得する部分だが,Filter5∼7のような0 ∼100という値ではなく,0∼1で扱うようにした.これは,既存のフィルタのオペレータ が,重みを0∼1と周辺画素の個数程度の値を用いているところに合わせた形となる.既存 のフィルタと比較するという点から,できるだけ相違点を減らし,ヒストグラムによってオ ペレータの重みを決定するという点に的を絞りたかったからだ.また,積和を取得する計算 の方法をラプラシアンと同じにした.フィルタごとに計算方法は異なるが,一般にラプラシ アンの輪郭強調の効果がよいという点が挙げられる.最終的にラプラシアンとの比較を実施
3.3 アルゴリズム
関数名 返り値 引数 備考
main void String[] args メイン
F choose cmykw imgArray imgArray inArr,int C 白のみ取り出し
F nega imgArray imgArray inArr ネガ反転
F gray avg imgArray imgArray inArr グレースケール(RGBの平均) F gray rgb imgArray imgArray inArr, int C グレースケール(RGB選択) F gray big imgArray imgArray inArr グレースケール(RGB最大値) F gray mini imgArray imgArray inArr グレースケール(RGB最小値) F mirror h imgArray imgArray inArr 鏡像反転(水平方向) F mirror v imgArray imgArray inArr 鏡像反転(垂直方向) E p diff x imgArray imgArray inArr 1次微分フィルタ(X方向のみ) E p diff y imgArray imgArray inArr 1次微分フィルタ(Y方向のみ) E p diff xy imgArray imgArray inArr 1次微分フィルタ
E s diff imgArray imgArray inArr ラプラシアンフィルタ
E prewitt imgArray imgArray inArr Prewittフィルタ
E sobel imgArray imgArray inArr Sobelフィルタ
E gradient imgArray imgArray inArr 濃度勾配フィルタ
E roberts imgArray imgArray inArr Robertsフィルタ
E 4kin imgArray imgArray inArr 4近傍フィルタ
E 8kin imgArray imgArray inArr 8近傍フィルタ
E Kirsch imgArray imgArray inArr Kirschフィルタ
op process imgArray imgArray inArr, int[] op 1, int[] op 2 3X3オペレータ処理
op process spot int imgArray inArr, int[] op 1, int[] op 2, int x, int y, int C
3X3オペレータ処理座標指定
histgram imgArray imgArray inArr ヒストグラム出力(RGB重ねて出力) histgram rgb imgArray imgArray inArr, int C ヒストグラム出力(RGB選択別々出力) data rgb imgArray imgArray inArr, String FN RGB濃度値をCSVで出力
yuv imgArray imgArray inArr, String YUV YUV出力
filter 5 imgArray imgArray inArr, int V Filter5 filter 6 imgArray imgArray inArr Filter6 filter 7 imgArray imgArray inArr Filter7 hist paint 1 imgArray imgArray inArr 出現頻度で塗り分ける
HSV H imgArray imgArray inArr HSVの色相を出力
HSV S imgArray imgArray inArr HSVの彩度を出力
HSV V imgArray imgArray inArr HSVの明度を出力
HSV RGB imgArray imgArray inArr HSVをRGBで塗り分ける
SuperHistgram imgArray imgArray inArr ヒストグラムを出現頻度別に色分け
color model imgArray imgArray inArr, String CM カラーモデル変換とその塗りわけ
color model hist imgArray imgArray inArr, String CM カラーモデル変換とそのヒストグラム
color model hist draw imgArray imgArray inArr, String CM カラーモデル変換と出現頻度による塗りわけ
Filter8 imgArray imgArray inArr, String CM Filter8 Filter9 imgArray imgArray inArr, String CM Filter9 FilterA imgArray imgArray inArr, String CM FilterA FilterB imgArray imgArray inArr, String CM FilterB FilterC imgArray imgArray inArr, String CM FilterC
表3.6 ex fil.javaの関数 したいため,ラプラシアンに近い方法をとることが望ましいと考えたためだ.したがって, 本実験ではFilter8とラプラシアンを中心に検証している.
3.3.6
評価方法
目視による主観的評価を実施した.私個人だけでは評価としては不十分なので,複数人 を対象としたアンケートを元に評価を行った.アンケートは,プログラムによるスライド3.3 アルゴリズム 図3.5 アンケートプログラム画面 ショー形式をとった.3.5のように1画面に元画像とフィルタを施した画像3枚をランダム で表示する.被験者はあらかじめ元画像を線画にした画像をイメージをしてもらう.その上 で,スライドショーに表示された3枚の画像からイメージにより近いものを1枚だけ必ず選 択してもらう.イメージに合うものがないという選択肢は設けなかった.これは,イメージ ング能力や手法に個人差があり,まったくどれもイメージに当てはまらないという状況が生 じたとき,フィルタの評価ではなく個人の好みの評価になってしまうのを防ぐためである. あくまで,既存フィルタと本実験で作成したフィルタの比較評価である点で評価されるよう にするためである.今回実施したアンケートでは,9人のアンケートを得ることができた. このアンケートを集計し,分析することで主観的評価とする.
第
4
章
実験
4.1
実験環境
実験は,本実験で作成したフィルタと既存のフィルタを実装したプログラムによって出力 された画像を用いた.入力画像はいずれもRGB(24bit)であり,標準画像12枚,デジタ ルスチルカメラ(表4.3)による撮影画像4枚,モノクロCG(白黒の十字模様)4枚の合計 20枚を用いた.使用したフィルタは,既存フィルタとして4近傍・8近傍・1次微分・ラプラシアン(2次微分)・Sobel・Prewitt・Roberts,本実験用フィルタFilter8を用いた.表4.1
は,そのフィルタプログラムを実行するために用いた端末の仕様である.また,出力された
画像を用いたアンケートプログラムを実行するために用いた端末の仕様は表4.2である.
CPU AMD AthlonXP 3000+ RAM PC3200 512MB× 2
OS Windows2000Professional(日本語版)
使用言語 Sun Microsystems Java 2 SDK,SE v1.4.2 表4.1 フィルタ実験用端末仕様
CPU Intel PentiumM 1.7GHz RAM PC2700 SODIM 512MB OS WindowsXP Home(日本語版)
使用言語 MS-Office2003 Excel2003 VBA 表4.2 アンケート用端末仕様
4.2 撮影環境
4.2
撮影環境
デジタルスチルカメラは市販のものを使用した.デジタルズームや画像補間は一切使用し ないで撮影した画像を使用した. 型番 FinePix S5000 有効画素数 310万画素(総画素数314万画素) 撮影素子 1/2.7型 スーパーCCDハニカムHR/原色フィルター採用 記録メディア xD-ピクチャーカード(16MB∼512MB)記録方式 静止画DCF準拠 圧縮:Exif Ver.2.2 JPEG準拠/DPOF対応 非圧縮: CCD-RAW 記録画素数 2816×2120/2048×1536/1600×1200/1280×960(pixcel) レンズ フジノン光学式10倍ズームレンズ 焦点距離 f=5.7mm∼57mm(35mmフィルム換算:37mm∼370mm相当) 開放F値 F2.8∼F3.2 絞り F2.8∼F8(10段) 1/3EVステップ 撮影可能範囲 標準[広角]約90cm∼∞/[望遠]約2.0m∼∞ ,マクロ[広角]約10cm∼2.0m/[望 遠]約90cm∼2.0m
撮影感度 AUTO(ISO160∼400)ISO 200/400/800
測光方式 TTL64分割測光:マルチ/スポット/アベレージ
露出制御 プログラム/シャッター優先AE/絞り優先AE/マニュアル露出 露出補正 -2.0EV∼+2.0EV 1/3EVステップ
シャッター 2秒∼1/2000秒(メカニカルシャッター併用)
AF方式 TTLコントラストAF,AF補助光付き
白バランス シーン自動認識オート/プリセット(晴天/日陰/昼光色蛍光灯/昼白色蛍光灯/白色蛍 光灯/電球)
4.3 既存フィルタによる出力例
4.3
既存フィルタによる出力例
4.3.1
Roberts
Robertsは(x,y)の右下と(x,y+1)の右上の濃度値の差から輪郭を強調するフィルタであ
る.図4.1のようなオペレータを用いる.図4.3.1・図4.3.1は,本実験プログラムに実装し
たRobertsフィルタで輪郭強調を行った出力画像である.
図4.1 Robertsのオペレータ
図4.2 入力画像(デジタルカメラ) 図4.3 出力画像(デジタルカメラ):Roberts
4.3 既存フィルタによる出力例
4.3.2
Prewitt
Prewittは2種類のオペレータ(図4.6)を用いて,縦方向・横方向の3画素を対にする ことで輪郭を強調する.図4.3.2・図4.3.2は出力イメージである. 図4.6 Prewittのオペレータ 図4.7 入力画像(デジタルカメラ) 図4.8 出力画像(デジタルカメラ):Prewitt 図4.9 入力画像(標準画像) 図4.10 出力画像(標準画像):Prewitt4.3 既存フィルタによる出力例
4.3.3
Sobel
SobelはPrewitt同様2種のオペレータを持っている.しかし,Prewittと異なる点は中 央部分の重みが倍化している点である.これにより,中央部の影響が大きくなっている.
図4.11 Sobelのオペレータ
図4.12 入力画像(デジタルカメラ) 図4.13 出力画像(デジタルカメラ):Sobel
4.3 既存フィルタによる出力例
4.3.4
4
近傍
4近傍は画素とその上下左右それぞれの濃度値との差をそれぞれ取得し,その中で最大の ものを出力として用いるフィルタである. 図4.16 入力画像(デジタルカメラ) 図4.17 出力画像(デジタルカメラ):4近傍 図4.18 入力画像(標準画像) 図4.19 出力画像(標準画像):4近傍4.3 既存フィルタによる出力例
4.3.5
8
近傍
8近傍は4近傍と同様に,画素とその上下左右・斜め4方向それぞれの濃度値との差をそ れぞれ取得し,その中で最大のものを出力として用いるフィルタである. 図4.20 入力画像(デジタルカメラ) 図4.21 出力画像(デジタルカメラ):8近傍 図4.22 入力画像(標準画像) 図4.23 出力画像(標準画像):8近傍4.3 既存フィルタによる出力例
4.3.6
1
次微分
1次微分フィルタは,他のフィルタに見られるような3×3マスのオペレータではなく, 図4.24では変則2×2マスで表現しているが,実際は横2マスのオペレータと縦2マスの 2種類のオペレータを用いるフィルタである.縦方向の変化量と横方向の変化量を抽出する. 変化量が大きいと出力が大きくなり,濃度値が変化する箇所を強調することができる. 図4.24 1次微分のオペレータ 図4.25 入力画像(デジタルカメラ) 図4.26 出力画像(デジタルカメラ):1次微分 図4.27 入力画像(標準画像) 図4.28 出力画像(標準画像):1次微分4.3 既存フィルタによる出力例
4.3.7
2
次微分
(
ラプラシアン
)
ラプラシアン(2次微分)フィルタは,画素間の濃度値の変化が変化する(濃度値の変化に 微分を行う)ことで輪郭(濃度値が急激に変化する箇所)を強調するフィルタである. 図4.29 ラプラシアン(2次微分)のオペレータ 図4.30 入力画像(デジタルカメラ) 図4.31 出力画像(デジタルカメラ):2次微分 図4.32 入力画像(標準画像) 図4.33 出力画像(標準画像):2次微分4.4 Filter8による出力例
4.4
Filter8
による出力例
入力画像の出現頻度(ヒストグラム)を取得し,その出現頻度を対応する濃度値の座標を 計算するときのオペレータの重みとして用いる方法を用いた. 図4.34 入力画像(デジタルカメラ) 図4.35 出力画像(デジタルカメラ):Filter8 図4.36 入力画像(標準画像) 図4.37 出力画像(標準画像):Filter84.5 フィルタ
4.5
フィルタ
4.5.1
フィルタのプログラムコード
フィルタプログラムはJavaで構築した.作成には開発環境に示した端末を使用し,テス トをテスト用端末で実施した.以下はフィルタプログラムのFilter8の部分の抜粋である. プログラム自体は総数3000行余りのコードである.public static imgArray Filter8(imgArray inArr, String CM) {
System.out.println("* EDGE:Filter8(" + CM + ") [" + inArr.getFileName() + "]...");
int[][][] tempArr = new int[3][inArr.getW()][inArr.getH()];
imgArray outArr = new imgArray(inArr.getW(),inArr.getH(),"Filter8(" + CM + ")");
int[] hist = new int[360];
int max = 255;
int big = 0;
int f = 1000;
if (CM.equals("RGBR")) { max = 255; }
else if (CM.equals("RGBG")) { max = 255; }
else if (CM.equals("RGBB")) { max = 255; }
else if (CM.equals("HSVH")) { max = 359; }
else if (CM.equals("HSVS")) { max = 100; }
else if (CM.equals("HSVV")) { max = 100; }
else if (CM.equals("YUVY")) { max = 255; }
else if (CM.equals("YUVU")) { max = 255; }
else if (CM.equals("YUVV")) { max = 255; }
else { max = 255; }
// 濃度値カウント
for (int y=0; y<inArr.getH(); y++) {
for (int x=0; x<inArr.getW(); x++) {
int P;
int R, G, B;
if (CM.equals("RGBR")) { P = inArr.getR(x,y); }
else if (CM.equals("RGBG")) { P = inArr.getG(x,y); }
else if (CM.equals("RGBB")) { P = inArr.getB(x,y); }
else if (CM.equals("HSVH")) {
P = inArr.getHSV(x,y,0);
if (P >= 360) { P = (P % 360); }
else if (P < 0 ) { P = P + 360; }
}
else if (CM.equals("HSVS")) { P = inArr.getHSV(x,y,1); }
else if (CM.equals("HSVV")) { P = inArr.getHSV(x,y,2); }
else if (CM.equals("YUVY")) { P = inArr.getYUV(x,y,0); }
else if (CM.equals("YUVU")) { P = inArr.getYUV(x,y,1); }
else if (CM.equals("YUVV")) { P = inArr.getYUV(x,y,2); }
4.5 フィルタ
hist[P]++;
if (hist[P] > big) { big = hist[P]; }
}
}
// 出現頻度に変換
for (int y=0; y<inArr.getH(); y++) {
for (int x=0; x<inArr.getW(); x++) {
int P;
int R, G, B;
if (CM.equals("RGBR")) { P = inArr.getR(x,y); }
else if (CM.equals("RGBG")) { P = inArr.getG(x,y); }
else if (CM.equals("RGBB")) { P = inArr.getB(x,y); }
else if (CM.equals("HSVH")) {
P = inArr.getHSV(x,y,0);
if (P >= 360) { P = (P % 360); }
else if (P < 0 ) { P = P + 360; }
}
else if (CM.equals("HSVS")) { P = inArr.getHSV(x,y,1); }
else if (CM.equals("HSVV")) { P = inArr.getHSV(x,y,2); }
else if (CM.equals("YUVY")) { P = inArr.getYUV(x,y,0); }
else if (CM.equals("YUVU")) { P = inArr.getYUV(x,y,1); }
else if (CM.equals("YUVV")) { P = inArr.getYUV(x,y,2); }
else { P = 0; } R = G = B = P; if (CM.equals("HSVH")) { int H, S, V; H = (P % 360); S = 100; V = 100; R = (int)((Math.cos(Math.max(0,Math.toRadians((double)(H + 0)))) * 128.0 + 64.0)); G = (int)((Math.cos(Math.max(0,Math.toRadians((double)(H + 240)))) * 128.0 + 64.0)); B = (int)((Math.cos(Math.max(0,Math.toRadians((double)(H + 120)))) * 128.0 + 64.0)); R = Math.min(255,Math.max(0,R)); G = Math.min(255,Math.max(0,G)); B = Math.min(255,Math.max(0,B)); }
tempArr[0][x][y] = hist[R] * f / big;
tempArr[1][x][y] = hist[G] * f / big;
tempArr[2][x][y] = hist[B] * f / big;
}
}
for (int y=1; y<inArr.getH()-1; y++) {
for (int x=1; x<inArr.getW()-1; x++) {
int R, G, B;
R = Math.max( Math.min(
( (inArr.getR(x+1,y ) * tempArr[0][x+1][y ] )
+ (inArr.getR(x-1,y ) * tempArr[0][x-1][y ] )
4.5 フィルタ
+ (inArr.getR(x ,y-1) * tempArr[0][x ][y-1] )
- (inArr.getR(x ,y ) * tempArr[0][x ][y ] * 4) ) / f ,255) ,0);
G = Math.max( Math.min(
( (inArr.getG(x+1,y ) * tempArr[1][x+1][y ] )
+ (inArr.getG(x-1,y ) * tempArr[1][x-1][y ] )
+ (inArr.getG(x ,y+1) * tempArr[1][x ][y+1] )
+ (inArr.getG(x ,y-1) * tempArr[1][x ][y-1] )
- (inArr.getG(x ,y ) * tempArr[1][x ][y ] * 4) ) / f ,255) ,0);
B = Math.max( Math.min(
( (inArr.getB(x+1,y ) * tempArr[2][x+1][y ] )
+ (inArr.getB(x-1,y ) * tempArr[2][x-1][y ] )
+ (inArr.getB(x ,y+1) * tempArr[2][x ][y+1] )
+ (inArr.getB(x ,y-1) * tempArr[2][x ][y-1] )
- (inArr.getB(x ,y ) * tempArr[2][x ][y ] * 4) ) / f ,255) ,0);
outArr.setR(x,y,R); outArr.setG(x,y,G); outArr.setB(x,y,B); } } System.out.println(" | done."); return outArr; }
4.5 フィルタ 図4.38 ヒストグラムによる塗り分け
4.5.2
濃度値の出現頻度による画素の塗り分け
画像の領域を3種に分類したが,その分類の出現頻度の分布を画素の塗りわけによって検 証した.まず,画像の濃度値よりヒストグラムを作成した.次にヒストグラムのグラフに対 して,出現頻度の高いものを赤,低いものを青,出現頻度が最大の半分付近(中程度)を緑 で塗り分けるようにした.同様に,入力画像の画素の濃度値ごとに出現頻度で塗りわけを実 施した.この結果,画像の目視によって輪郭認識される領域周辺が緑色になった.また,広 い領域に渡って赤色に塗り分けられた.このことから,輪郭周辺の画素の出現頻度が中程度 である可能性がでてきたと考えられる.しかし,実験に用いた画像の種類や数が20程度と 少ないため,十分な結果とは言えない.4.5 フィルタ 図4.39 HSVによるFilter8(左から 入力画像,色相,彩度,明度 の順) 図4.40 YUVによるFilter8(左から 入力画像,輝度,色差(青),色差(赤) の順)
4.5.3
カラーモデルの違いによる影響
基本的にRBG(24bit)でのフィルタリングを想定してフィルタを作成した.一般的に画 像データはRGBで表現され,RGBで処理されることが多い.RGBは光の3原色を均等に 使うように設計されており,明るさや色の鮮やかさ,色の種類に関わらず,3つの要素で表 現してしまう.これに対し,HSVやYUVなどの他のカラーモデル(色空間)はそれぞれ に基準となる要素を持っており,HSVでは色を位相で表現する色相があり,YUVにおいて は輝度(明るさ)がある. HSVは色の見え方を基準にしており,色・鮮やかさ・明るさに分解できる.このことか ら,HSVを用いることで見た目の色を純粋な色に変換できるのではないかと考えた.また, YUVは人間の視覚系が明るさの刺激に敏感なことに着目して考えだされたカラーモデルで ある.人間が暗い場所でも輪郭を認識できるのは色のみではなく,明るさにも指向性を持っ ているからなのではないかと考えた.これらの点から,RGBによるヒストグラムを用いた フィルタだけではなく,この2種のカラーモデルを用いるフィルタを作成した.まず,RGB からそれぞれのカラーモデルへ変換を行い,その上でFilter8によって輪郭抽出を行った.4.5 フィルタ 図4.41 カラーモデル3種による比較(左から 入力画像,RGB,HSV,YUV の順) いずれもFilter8 図4.39はFilter8のヒストグラムの要素を HSVで行った場合の出力結果である.HSV の各要素ごとに分けて実施した.HSVのH(色相)の要素での輪郭抽出が全体的に弱い. しかし,S(彩度)・V(明度)については通常のFilter8よりはやや弱いものの,全体的に よく出ていると思われる. 同様に図4.40はYUVの要素でヒストグラムを作成し,Filter8で輪郭強調を行った出力 結果である.YUVは,Y(輝度)では全体的に輪郭がよく強調されている.しかし,U(色 差青)・V(色差赤)に関して,女の子の顔の部分や髪の部分が強調できていない.ただし, 髪や顔の色に似ているはずの腕の部分の輪郭は視認できる程度に出ている. カラーモデルの要素を別々に実施した結果を重ね合わせた結果をカラーモデルで比較した のが図4.41である.重ね合わせは積を用いた.全体的に満遍なく輪郭が強調されているの はRGBで,HSVやYUVに関しては顔の部分の強調がやや弱い.HSVはノイズが目立ち, YUVはU・Vで服の部分が強調されていたためか全体で服の部分がやや強めに強調されて いる印象を受ける.
4.5 フィルタ
4.5.4
ぼやけた境界に対する影響
図4.5.4∼図 4.5.4 は斜め方向に輪郭が出るパターンの境界がぼやけた画像である.図 4.5.4∼図 4.5.4は斜め方向に輪郭が出るパターンではあるが,図4.5.4∼図4.5.4とは異な り境界がはっきりとしたパターンである.また図4.5.4∼図4.5.4は縦横方向に輪郭が強調さ れるパターンの境界がぼやけた画像.図 4.5.4∼図 4.5.4は縦横方向に輪郭が強調されるパ ターンで境界がはっきりしたものである.アンケートで評価の高かったラプラシアンである が,いずれの画像でも境界がぼやけたパターンでは輪郭が強調されていない.それに対し, 境界がはっきりとしたパターンではしっかりと輪郭が強調された.いずれのパターンもぼや けた画像に対しては,ラプラシアン(2次微分)が苦手としていると言える.逆に色の境界が はっきりしているような画像,例えば看板や模様から輪郭を抽出するような場合には適して いるといえる. 図 4.42 ぼ や け た 斜 め 入 力 画像 図 4.43 ぼ や け た 斜 め 2 次 微分出力 図 4.44 ぼ や け た 斜 め Fil-ter8出力 図4.45 斜め入力画像 図4.46 斜め2次微分出力 図4.47 斜めFilter8出力4.6 アンケート結果 図 4.48 ぼ や け た 縦 横 入 力 画像 図 4.49 ぼ や け た 縦 横 2 次 微分出力 図 4.50 ぼ や け た 縦 横 Fil-ter8出力 図4.51 縦横入力画像 図4.52 縦横2次微分出力 図4.53 縦横Filter8出力
4.6
アンケート結果
本実験用にアンケートプログラムを作成した.アンケート方法は画面に入力画像1枚と, その画像にフィルタ処理を行った出力画像3枚を表示する形式を取った.出力画像は 8近傍・ラプラシアン(2次微分)・1次微分・Sobel・Prewitt・Filter8の6種のフィルタを用い
た.入力画像には,標準画像12枚,デジタルスチルカメラ画像4枚,モノクロパターン4
枚の計20枚を用いた.
アンケートは被験者9名に実施した.結果は図4.54と図4.55である.グラフからラプラ
シアン(2次微分)はいずれのグラフからも選択された回数は多い.しかし,図4.55を見
ると,各画像とも平均的に多いのだが,「Balloon.png」と「Mandrill.png」の結果がFilter8
に比較して低いことが分る.Balloon.png(図4.57)については,風船や女の子の顔などの
グラデーションにおいて,Filter8の方がより細かい輪郭や変化を抽出しているためである
と考えれらる.
4.6 アンケート結果
図4.54 アンケート結果
図4.55 アンケート画像ファイル別結果
上に,その間隔が小さいからではないだろうか.つまり,被験者が選択したのは,より細か い輪郭を選択したため,このような結果が出たのではないかと考えられる.
4.7 実験結果 図4.56 Filter8(HSVのH)で輪郭が抽出できなかったEarth.png
4.7
実験結果
本実験では,ラプラシアン(2次微分)フィルタのようなシャープな結果は得られなかっ た.しかし,ラプラシアン(2次微分)フィルタで得られなかった細かい部位の輪郭が得ら れている画像があった. アンケートの結果から,ラプラシアン(2次微分)フィルタが輪郭強調フィルタとして優 れている点も見えるが,同時に弱点も見えた.それは画像が比較的ソフトな場合,色の変化 が比較的緩やかな部位において輪郭が強調されにくいという点である.同じ画像において Filter8 では詳細な部分やグラデーションでも,ある程度色の変化が激しい部分にはしっか りと輪郭が出力されている.しかし,全体的にFilter8によって強調された画像はノイズの ようなものも見られた. カラーモデルの違いによる変化も確認できた.出力結果の画像から色に対するものより も,明るさや輝度の変化に対する処理の方がより効果的であるように見られた.また,HSV のH では画像によってはまったく輪郭が現れないものも存在した.図 4.56は抽出できな かった入力画像である.この画像は一見輪郭を抽出できそうであるが,全体的に青みがかっ ていることでH(色相)で判別できなかったものと推定される.4.7 実験結果
図4.57 Balloon.pngの出力例
第
5
章
考察と課題
5.1
考察
アンケートでは,全体的にラプラシアン(2次微分)フィルタの支持が高かったので,ラ プラシアンの優位性があるように見えた.しかし,特定の画像(Baloon.pngなど)ではラ プラシアン(2次微分)に対する評価よりもFilter8の評価が高かった.これは「4.5.4 ぼ やけた境界に対する影響」から考えると,「ぼやけた画像」つまり「グラデーション」が多く, 色域の境界がはっきりしていない画像であることが考えられる.実際,Balloonn.pngはカ ラフルな風船の輪郭などはしっかりと輪郭が強調されているが,女の子の顔・髪の毛・風船 の中央部ではグラデーションが見られ,一部を除いて輪郭が強調されていない. また,Filter8では風船の縁以外にも,風船の中ほどの陰影や女の子の服のしわまで強調 されている.この点は「過剰」な強調とも取れるが,別の画像「test 01.jpg」(デジタルス チルカメラによる撮影画像)においては,ラプラシアンでは強調できなかった部分の強調が 現れている. 図5.1は建物の屋根部分(入力画像の白枠内)を拡大したものであるが,屋根の出っ張り の部分がラプラシアンでは1本の線が現れているのに対し,Filter8ではやや細いが2本の 線として強調されている.入力画像を見ると,レールのような出っ張りになっている.この 出っ張りを表現するとすれば,付け根と突起の上に線が現れるのが望ましいのではないだろ うか. Filter8は「過剰」に強調されている部分はありながらも,ラプラシアンで強調できなかっ た部分の強調に成功していると言える.アンケート結果からも,他のフィルタと比較して極5.1 考察 端に評価が低い点もなく,また全体的に安定した回数選択されている.しかし,輪郭が全体 的に薄い印象を受ける.これは,オペレータの重みの範囲が0∼1の間という点によるもの と思われる.ラプラシアンは中央の画素の重みが4であり,濃度値を4倍にし,周囲の画素 を1倍の総和で差を取っている.それに対しFilter8は,0∼1の間で変動するので,大きく て1倍,小さいのは0倍となる.濃度値は入力画像に依存し,ラプラシアンもFilter8も共 通だが,かけられる値(重み)の大小によるところの影響である. 図5.1 フィルタの部分比較 カラーモデルによる影響は,HSVにおいてはH(色相)に比較して,S(彩度)やV(明 度)を用いたフィルタがより輪郭が強調されていた.また,YUVにおいても U(色差青) やV(色差赤)よりもY(輝度)を用いたフィルタの方が効果が大きい.つまり,色・明る さ・鮮やかさなどに分類した場合,輪郭強調として直接的に処理した場合,明るさ情報に着 目して輪郭強調を行うことが望ましいのではないかと思われる.
5.2 今後の課題
5.2
今後の課題
今回の実験では,入力画像20枚をテストした.その結果,Filter8がラプラシアンに比較 してぼやけた画像の輪郭強調ができるという結果を得ることができた.しかし,これは本研 究の冒頭で挙げた仮説を十分に実証する結果を得たとは言い切れない.より多くの画像への テストや数学的に検証することで,このフィルタの特徴や優位性を根拠を持って実証する必 要があるからである.本実験ではそういった検証が充分になされていない. また,評価方法についても被験者9名によるアンケート結果を用いたが,アンケート方法 もより多くの方法を用いる必要がある.今回のアンケートによる評価は画像を目視だけで評 価する方法を用いた.しかし,被験者がどのような画像を想像して,どのような点で比較・ 評価したかが明確でない.これはどの出力結果を選んだかという点のみで評価しているた め,どのような点がそれぞれのフィルタの良い点で,良くない点かが不明のままである.ア ンケートの改善方法としては,入力画像に対してトレーシングペーパなどで輪郭部をトレー スしてもらい,輪郭が描かれた場所の平均を求め,その平均をテンプレートとしてマッチン グを行うという手法もひとつの方法かと考えられる.また,このトレース作業を行っても らった上で,本研究で実施したアンケートを行うことで,被験者がより明確な輪郭強調を意 識したアンケートを行えたのではないかと思われる. フィルタそのものに関しては,ノイズの輪郭が強調されていることがあった.ノイズに対 する処理方法を盛り込んだ改善が必要と思われる.対策としては,周囲と明らかに異なりな がら,出現頻度が低いことや1グループ(同系色画素の寄り集まり)の占める面積や連続性 を検出することが有用であると思われる.しかし,本研究で提案したオペレータの構造は3 ×3マスを基本としているため,連続性について検出するには処理方法を根本的に改良する 必要がある.また,占める領域は出現頻度から割り出すこともある程度可能と考えられる. 今後の課題として,より多くのテストパターンによるテストと,評価方法の改善(複数の 方法を取り入れる)が必要である.また,フィルタにおけるオペレータの決定方法の改善が あげられる.謝辞
本研究は,主査である高知工科大学情報システム工学科岡田守教授,副査の清水明宏教 授,木村義政教授の丁寧かつ親切なご指導と励ましの元に完成しました.学科長である島村 和典教授には,就職活動で多大なるご支援をいただきました。そして,学生団体CASTの 顧問でもある清水明宏教授には,CASTの活動や就職活動で厳しいご指導と暖かいご支援 をいただきました.深くお礼を申し上げ感謝の言葉とさせていただきたいと思います. テスト用の画像データの準備にご尽力いただきました高知工科大学情報システム工学コー ス藤村和人氏,デジタルスチルカメラによる撮影画像の被写体を準備してくださった高知工 科大学情報システム工学科4回生の鈴木祥平氏,同じ研究室の仲間として励まし,協力して くれた4回生の土田恵司氏,戸梶明香氏,横田潤氏,3回生の佐藤大洋氏,千達哲史氏,正 岡健二氏,松田啓佑氏,道下弘尚氏,そして被験者を引き受けてくださった方々に感謝いた します. また,研究に行き詰ったときに的確なアドバイスをくれた高知工科大学情報システム工学 科4回生中原知也氏,研究で帰宅が遅くなり睡眠の邪魔をしても小言ひとつ言わず,暖かく 支えてくれた両親に感謝いたします.参考文献
[1] 田村秀行編著:コンピュータ画像処理,Ohmsha, p.56-62,2002.
[2] 村上伸一著:理工学講座 画像処理工学,東京電機大学出版局社, p.76-82,2001.
付録
A
標準画像
図A.1 標準画像:Aerial.eps 図A.2 標準画像:Airplane.eps
図A.5 標準画像:Earth.eps 図A.6 標準画像:Girl.eps
図A.9 標準画像:milkdrop.eps 図A.10 標準画像:Parrots.eps
付録
B
デジタルスチルカメラによる画像
図 B.1 デジタルカメラによる画 像:kanban.eps(カラー) 図 B.2 デジタルカメラによる画 像:kanban g.eps(白黒) 図B.3 デジタルカメラによる画像:copen.eps 図B.4 デジタルカメラによる画像:test 01.eps付録
C
単純なパターン
図C.1 パターン:c 01.eps 図C.2 パターン:c 01n.eps