(57)【要約】【課題】  画像のエッジ部分を維持しながら平坦部分に対して平滑化処理を行うBilateralフィルタにおいて、計算量を大幅に削減することが可能な画像処理方法および画像処理装置ならびに画像処理プログラムを実現する。【解決手段】  画像の横方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行う横方向平均化処理部と、画像に対して縦方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行う縦方向平均化処理部と、を有し、入力画像に対して横方向に平均化処理を行った後に縦方向に平均化処理を行うことを特徴とする。【選択図】  図１
2011090445.tif 000002
【特許請求の範囲】
【請求項１】
画像の各画素に対して周辺画素との距離・画素値差分に応じた重み付けで周辺画素との重み平均化を行う画像処理装置において、
画像の横方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行う横方向平均化処理部（１０２）と、
画像に対して縦方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行う縦方向平均化処理部（１０３）と、
を有し、入力画像に対して横方向に平均化処理を行った後に縦方向に平均化処理を行うことを特徴とする画像処理装置。
【請求項２】
画像の各画素に対して周辺画素との距離・画素値差分に応じた重み付けで周辺画素との重み平均化を行う画像処理装置において、
画像の横方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行う横方向平均化処理部（１０２）と、
画像に対して縦方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行う縦方向平均化処理部（１０３）と、
を有し、入力画像に対して縦方向に平均化処理を行った後に横方向に平均化処理を行うことを特徴とする画像処理装置。
【請求項３】
画像の各画素に対して周辺画素との距離・画素値差分に応じた重み付けで周辺画素との重み平均化を行う画像処理装置において、
画像の各ラインに対してそのライン上の画素のみで前記平均化処理を行う横方向平均化処理部（５０２）と、
画像を９０度回転する回転処理部（５０３）と、
を有し、入力画像に対して横または縦方向に平均化処理を行った後に画像を９０度回転し、さらに横または縦方向に平均化処理を行うことを特徴とする画像処理装置。
【請求項４】
請求項１から３に記載の画像処理装置において、
注目画素に対して平均化処理を行う際に、ライン上における前記注目画素に隣接する画素から画像端部に向かって周辺画素の重みを順次計算すること、
を特徴とする画像処理装置。
【請求項５】
請求項１から４に記載の画像処理装置において、
周辺画素の重みを順次計算する際に、重みがある所定の閾値を下回った時点で重みの計算を終了すること、
を特徴とする画像処理装置。
【請求項６】
画像の各画素に対して周辺画素との距離・画素値差分に応じた重み付けで周辺画素との重み平均化を行う画像処理方法において、
画像の横方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行うステップ（Ｓ２０１〜Ｓ２０８）と、
画像に対して縦方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行うステップ（Ｓ３０１〜Ｓ３０８）と、
を有することを特徴とする画像処理方法。
【請求項７】
請求項６に記載の画像処理方法において、
前記横方向の平均化処理を行ってから前記縦方向の平均化処理を行うこと、
を特徴とする画像処理方法。
【請求項８】
請求項６に記載の画像処理方法において、
前記縦方向の平均化処理を行ってから前記横方向の平均化処理を行うこと、
を特徴とする画像処理方法。
【請求項９】
画像の各画素に対して周辺画素との距離・画素値差分に応じた重み付けで周辺画素との重み平均化を行う画像処理方法において、
画像の各ラインに対してそのライン上の画素のみで前記平均化処理を行うステップ（Ｓ６０１）と、
前記平均化処理後の画像を９０度回転するステップ（Ｓ６０２）と、
前記回転後の画像の各ラインに対してそのライン上の画素のみで前記平均化処理を行うステップ（Ｓ６０３）と、
前記平均化処理後の画像を−９０度回転するステップ（Ｓ６０４）と、
を有することを特徴とする画像処理方法。
【請求項１０】
請求項６から９に記載の画像処理方法において、
注目画素に対して平均化処理を行う際に、ライン上における前記注目画素に隣接する画素から画像端部に向かって周辺画素の重みを順次計算すること、
を特徴とする画像処理方法。
【請求項１１】
請求項６から１０に記載の画像処理方法において、
周辺画素の重みを順次計算する際に、重みがある所定の閾値を下回った時点で重みの計算を終了すること、
を特徴とする画像処理方法。
【請求項１２】
画像の各画素に対して周辺画素との距離・画素値差分に応じた重み付けで周辺画素との重み平均化を行う画像処理プログラムにおいて、
画像の横方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行う手順と、
画像に対して縦方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行う手順と、
を有することを特徴とする画像処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像データに対して画像内のエッジ情報を保持しつつ画像全体で平滑化を行う画像処理装置および画像処理方法ならびに画像処理プログラムに関する。
【背景技術】
【０００２】
写真画像は、物体の輪郭などの小刻みに信号値が変化する「エッジ成分」と、物体の表面など緩やかに信号値が変化する「平坦成分」と、大きく分けて２種類の成分に分別できる。この平坦部分にはノイズが載りやすく、ノイズを除去するために一般に平滑化処理が行われる。また、逆光解析のために画像の平坦成分を取り出して暗部と明部に分割する処理が行われるが、このときにも平滑化処理が実施される。
【０００３】
平滑化を行う手法として代表的なものに、Gaussianフィルタがある。Gaussianフィルタは画像の各画素に対して周辺画素と距離の重み付けを行い平均化する処理である。
【０００４】
しかし、Gaussianフィルタには平滑化によってエッジ成分を壊してしまうという問題がある。例えば、図７に示すような一次元空間の画素分布がある場合、これに対してGaussianフィルタをかけると図８のようにエッジがなまされた画素分布となってしまう。これによってエッジ部分近辺の画質が劣化したり、正しい暗部・明部が取得できないという問題があった。
【０００５】
このような問題を改善するために、Bilateralフィルタが考案された。BilateralフィルタはGaussianフィルタを改良したもので、注目画素の周辺画素に対してGaussianフィルタにおける「距離方向の重み付け」にさらに「画素値差分の重み付け」を掛け合わせる（非特許文献１）。これにより、近い画素値の画素でGaussianフィルタをかける効果が発生し、エッジ成分を壊さずに平滑化を行うことが可能となった。例えば図７に示すような位置次元空間の画素分布がある場合、これに対してBilateralフィルタをかけると図９のような画素分布が得られる。これはエッジを維持しつつ平坦部には平滑化効果が得られている。
【０００６】
また、Bilateralフィルタを擬似的に模した処理が特許文献１に公開されている。注目画素との信号値差が閾値範囲内の画素に対してラベリングを行い、ラベリングを行った画素だけでGaussianフィルタをかける方式である。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−４８１０４号公報（第１頁、図１）
【非特許文献】
【０００８】
【非特許文献１】C. Tomasi and R. Manduchi. Bilateral Filtering for Gray and Color Images. Proceedings of the 1998 IEEE International Conference on Computer Vision, Bombay, India.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、Bilateralフィルタは画像の全画素に対して周囲の画素との重み付けを計算する必要があるため、計算量が非常に多く膨大な処理時間がかかるという問題があった。また、特許文献１に記載されているラベリングの方法では、ラベリング時の閾値の選び方によって画質に大きく影響してしまうという問題があった。
【００１０】
本発明は維持王の課題に鑑みてなされたものであって、Bilateralフィルタの画像処理効果を維持しつつ、計算量を大幅に削減することが可能な画像処理方法および画像処理装置ならびに画像処理プログラムを実現することを目的とする。
【課題を解決するための手段】
【００１１】
画像の各画素に対して周辺画素との距離・画素値差分に応じた重み付けで周辺画素との重み平均化を行う画像処理装置において、
画像の横方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行う横方向平均化処理部と、
画像に対して縦方向の各ラインに対してそのライン上の画素のみで前記平均化処理を行う縦方向平均化処理部と、
を有し、入力画像に対して横方向に平均化処理を行った後に縦方向に平均化処理を行うことを特徴とする画像処理装置。
【発明の効果】
【００１２】
本発明によれば、二次元空間のBilateralフィルタを一次元空間のBilateralフィルタの二回処理で近似することができ、本来のBilateralフィルタの効果を維持しつつ計算量の大幅な削減を実現することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施形態における処理部の構成を示す図。
【図２】第１の実施形態における横方向Bilateralフィルタの処理手順を示す図。
【図３】第１の実施形態における縦方向Bilateralフィルタの処理手順を示す図。
【図４】第１の実施形態における重み付け計算の処理手順を示す図。
【図５】第２の実施形態における処理部の構成を示す図。
【図６】第２の実施形態におけるBilateralフィルタの処理手順を示す図。
【図７】画素信号値の分布の一例を示す図。
【図８】画素信号に対してGaussian フィルタをかけた後の信号値の分布を示す図。
【図９】画素信号に対してBilateralフィルタをかけた後の信号値の分布を示す図。
【図１０】「距離の重み」を横・縦方向に分解した状態を示す図。
【図１１】フィルタを二次元空間の式のまま計算した場合の計算量を示す図。
【図１２】フィルタを一次元空間の式に分解して計算した場合の計算量を示す図。
【図１３】「画素値差分の重み」を横・縦方向に分解した状態を示す図。
【発明を実施するための形態】
【００１４】
以下、本発明を実施するための最良の形態について図面を用いて説明する。
【実施例１】
【００１５】
本発明の第１の実施形態を図を用いて説明する。
【００１６】
図１は第１の実施形態における画像処理装置のシステム構成を示している。この画像処理装置は、画像取得部１０１、横方向の一次元Bilateralフィルタ処理部１０２、縦方向の一次元Bilateralフィルタ処理部１０３、画像出力部１０４より構成される。まず、最初に画像取得部１０１が画像処理を行う対象の画像データをメモリやＨＤＤなどの記憶媒体から取得すると、横方向の一次元Bilateralフィルタ処理部１０２に画像データを伝達する。横方向の一次元Bilateralフィルタ処理部１０２では、図２のフローチャートに示す処理を行って画像データの各横ライン上で横方向の一次元Bilateralフィルタ処理を実施し、縦方向の一次元Bilateralフィルタ処理部１０３に画像データを伝達する。次に、縦方向の一次元Bilateralフィルタ処理部１０３では、図３のフローチャートに示す処理を行って画像データの各縦ライン上で縦方向の一次元Bilateralフィルタ処理を実施し、画像出力部１０４に画像データを伝達する。画像出力部１０４は、上記画像処理を行った画像データを指定されたメモリやＨＤＤなどの記憶媒体に出力する。
【００１７】
図２は横方向の一次元Bilateralフィルタ処理の手順を示すフローチャートである。まず、処理Ｓ２０１で画像の横ラインの番号を表す変数iを用意し、ライン番号0で初期化する。次に処理Ｓ２０２で変数iが画像高さ未満であるかどうかをチェックする。後に１つのラインにBilateralフィルタ処理を施すたびにiを1つインクリメントするため、全ラインに対してBilateralフィルタ処理が完了していない場合は処理Ｓ２０３に進むが、全て完了している場合は全ての処理が終了となる。処理Ｓ２０３では画像の番号iのライン上にて各画素を走査するための変数jを用意し、画素番号0で初期化する。次に処理Ｓ２０４で変数jが画像幅未満であるかどうかをチェックする。後に１つの画素にBilateralフィルタ処理を施すたびにjを1つインクリメントするため、ラインi上の画素全てに対してBilateralフィルタ処理が完了していない場合は処理Ｓ２０５に進むが、全て完了している場合は処理Ｓ２０８に進む。処理Ｓ２０５では、画素jに対する各周辺画素（ライン上の画素）の「重み付け」を、注目画素jと各周辺画素との距離や画素値差に応じて計算する。この計算を行う処理手順は、図４のフローチャートに示している。図４についての説明は後述する。次に処理Ｓ２０６ではラインi上の各画素に対して前記「重み付け」を掛け、注目画素jをその値で更新する。処理Ｓ２０７では注目画素を隣に移動するためにjの値をインクリメントする。以上が横方向の一次元Bilateralフィルタ処理の説明である。
【００１８】
図３は縦方向の一次元Bilateralフィルタ処理の手順を示すフローチャートである。まず、処理Ｓ３０１で画像の縦ラインの番号を表す変数iを用意し、ライン番号0で初期化する。次に処理Ｓ３０２で変数iが画像幅未満であるかどうかをチェックする。後に１つのラインにBilateralフィルタ処理を施すたびにiを1つインクリメントするため、全ラインに対してBilateralフィルタ処理が完了していない場合は処理Ｓ３０３に進むが、全て完了している場合は全ての処理が終了となる。処理Ｓ３０３では画像の番号iのライン上にて各画素を走査するための変数jを用意し、画素番号0で初期化する。次に処理Ｓ３０４で変数jが画像高さ未満であるかどうかをチェックする。後に１つの画素にBilateralフィルタ処理を施すたびにjを1つインクリメントするため、ラインi上の画素全てに対してBilateralフィルタ処理が完了していない場合は処理Ｓ３０５に進むが、全て完了している場合は処理Ｓ３０８に進む。処理Ｓ３０５では、画素jに対する各周辺画素（ライン上の画素）の「重み付け」を、注目画素ｊと各周辺画素との距離や画素値差に応じて計算する。この計算を行う処理手順は、図４のフローチャートに示している。図４についての説明は後述する。次に処理Ｓ３０６ではラインi上の各画素に対して前記「重み付け」を掛け、注目画素jをその値で更新する。処理Ｓ３０７では注目画素を隣に移動するためにjの値をインクリメントする。以上が縦方向の一次元Bilateralフィルタ処理の説明である。
【００１９】
次に、図４を用いてライン上の画素jに対する周辺画素の重み付けを計算する手順について説明する。まず、処理Ｓ４０１にて重み付けの計算結果を格納するweight配列を用意し、処理Ｓ４０２にてweight配列を重み0で初期化する。その後、処理Ｓ４０３〜処理Ｓ４０９にて画素jから画素番号が小さくなる方向に順次重みを計算した後、処理Ｓ４１０〜処理Ｓ４１６にて画素jから画素番号が大きくなる方向に順次重みを計算する。
【００２０】
処理Ｓ４０３では、画素番号が小さくなる方向に画素番号を進めるための変数kを用意し、jで初期化する。処理Ｓ４０４では距離重みを表す変数distと画素値差分重みを表す変数diffを用意し、1.0で初期化する。次に、処理Ｓ４０５では画素番号kが0以上であり、かつ距離重みと画素値差重みの積が所定の閾値より大きいことをチェックする。所定の閾値としては、例えば0.01が考えられる。この閾値を導入することにより、注目画素jと画素値差が大きい画素より先の画素をフィルタ計算の対象から除外し高速化を実現している。次に、Ｓ４０６で画素kの距離重みを計算し、dist変数に代入する。距離重みは式１を用いて計算する。
【００２１】
【数１】
2011090445.tif 000003
【００２２】
σはガウシアンの広がりを表すパラメータあり、例えばσ＝５などが使われる。xkは画素kの座標、xjは画素jの座標であるが、ここではそのままkとjを表している。次に、処理Ｓ４０７で画素kの画素値差分重みを計算し、diff変数に代入する。画素値差分重みは式２を用いて計算する。σはガウシアンの広がりを表すパラメータであり、例えばσ＝５０などが使われる。vkは画素kの画素値、vjは画素jの画素値を表している。次に処理Ｓ４０８でdistとdiffの積を重み配列weightに代入する。そして処理Ｓ４０９で変数kを1つデクリメントして小さい画素番号に処理を進める。以上のＳ４０３〜Ｓ４０９の処理が番号j以下の画素について完了したら、処理Ｓ４１０に進む。
【００２３】
処理Ｓ４１０では、画素番号が大きくなる方向に画素番号を進めるための変数kを用意し、j+1で初期化する。処理Ｓ４１１では距離重みを表す変数distと画素値差分重みを表す変数diffを用意し、1.0で初期化する。次に、処理Ｓ４１２では画素番号kが0以上であり、かつ距離重みと画素値差重みの積が所定の閾値より大きいことをチェックする。所定の閾値としては、例えば0.01が考えられる。この閾値を導入することにより、注目画素jと画素値差が大きい画素より先の画素をフィルタ計算の対象から除外し高速化を実現している。次に、Ｓ４１３で画素kの距離重みを計算し、dist変数に代入する。距離重みは式１を用いて計算する。σはガウシアンの広がりを表すパラメータあり、例えばσ＝５などが使われる。xkは画素kの座標、xjは画素jの座標であるが、ここではそのままkとjを表している。次に、処理Ｓ４１４で画素kの画素値差分重みを計算し、diff変数に代入する。画素値差分重みは式２を用いて計算する。
【００２４】
【数２】
2011090445.tif 000004
【００２５】
σはガウシアンの広がりを表すパラメータであり、例えばσ＝５０などが使われる。vkは画素kの画素値、vjは画素jの画素値を表している。次に処理Ｓ４１５でdistとdiffの積を重み配列weightに代入する。そして処理Ｓ４１６で変数kを1つインクリメントして大きい画素番号に処理を進める。以上のＳ４１０〜Ｓ４１６の処理が番号j+1以上の画素について完了したら、処理Ｓ４１７に進む。
【００２６】
処理Ｓ４１７にて重み配列weightを出力し、重み付けの計算を終了する。
【００２７】
以上に説明した第１の実施形態によれば、二次元空間のBilateralフィルタを一次元空間のBilateralフィルタの二回処理で近似することができ、本来のBilateralフィルタの効果を維持しつつ計算量の大幅な削減を実現することが可能となる。また、周辺画素の重みを計算する際に、重みがある一定の閾値以下となった時点で逐次処理を終了しているため、計算量のさらなる削減が可能となる。
【実施例２】
【００２８】
本発明の第１の実施形態を図を用いて説明する。
【００２９】
図５は第２の実施形態における画像処理装置のシステム構成を示している。この画像処理装置は、画像取得部５０１、横方向の一次元Bilateralフィルタ処理部５０２、画像回転処理部５０３、画像出力部５０４より構成される。まず、最初に画像取得部５０１が画像処理を行う対象の画像データをメモリやＨＤＤなどの記憶媒体から取得すると、横方向の一次元Bilateralフィルタ処理部５０２に画像データを伝達する。横方向の一次元Bilateralフィルタ処理部５０２は、画像回転処理部５０３と連携した画像処理を行い第一の実施形態と同等の画像処理効果を得る。その処理手順を図６のフローチャートに示す。まず処理Ｓ６０１にて横方向の一次元Bilateralフィルタ処理を実施する。この処理の内容は第一の実施形態における図２の処理フローと同一である。次に画像を画像回転処理部５０３に渡して処理Ｓ６０２で画像を９０度回転する。そして、画像を再度横方向一次元Bilateralフィルタ処理部に渡し、処理Ｓ６０３にて横方向の一次元Bilateralフィルタ処理を実施する。これにより、第一の実施形態における縦方向のBilateralフィルタと同一の効果を実現することができる。その後にもう一度画像データを画像回転処理部５０３に渡し、処理Ｓ６０４で９０度回転してもとの画像に戻す。そして、最後に画像出力部５０４で画像データをメモリまたはＨＤＤなどの記憶媒体に出力する。
【００３０】
以上に説明した第２の実施形態によれば、１つのBilateralフィルタ処理部と１つの画像回転処理部だけで第１の実施形態と同一の効果を得られるため、実装するための電子回路やプログラムのサイズを小さくすることが可能となる。
【００３１】
＜アルゴリズムの説明＞
実施形態１または２によって計算量を大幅に削減できる理由を、アルゴリズムを説明しながら解説する。
【００３２】
BilateralフィルタのベースであるGaussianフィルタはBilateralフィルタと同様に膨大な処理時間がかかるが、Gaussianフィルタは計算方法を工夫することにより処理時間を大幅に短縮することが可能である。Gaussianフィルタの重みは式４により計算される（簡略化のため係数は１とした）。
【００３３】
【数３】
2011090445.tif 000005
【００３４】
ここで図１０に示すように画素xkと画素xjの中継点として画素xmを取ると、式４は式５のように記述することができる。
【００３５】
【数４】
2011090445.tif 000006
【００３６】
これは、二次元空間の式である式４を、一次元空間の式５に分解できることを示している。よって、横方向のライン上で一次元空間のGaussianフィルタをかけてさらに縦方向のライン上で一次元空間のGaussianフィルタをかけることで、二次元空間のGaussianフィルタと同じ効果を実現できる。しかも計算量はＯ記法で４乗から３乗への削減（変数Nを画像の１辺の画素数とする）に相当する。
【００３７】
計算量が削減できる理由を以下にわかりやすく説明する。図１１と図１２に、注目画素uとvに周辺画素a〜kの値を足しこんでGaussianフィルタを計算する例を示す。このとき、図１１は二次元空間の式を使った場合（式４）の計算手順を示し、図１２は一次元空間の式に分解して使った場合（式５）の計算手順を示している。図１１では、画素uと画素vそれぞれに対して画素a〜kの値を足し込んでおり、合計で２２回の計算を行っている。一方、図１２では、最初に画素gに画素a〜kの値を足し込んでから画素uと画素vに画素gの値を足し込んでおり、合計で１３回の計算量で済んでいる。このように、横方向の一次元空間Gaussianフィルタの計算結果を縦方向の一次元空間Gaussianフィルタの計算時に再利用することで、二次元空間のGaussianフィルタよりも大幅に計算量を削減することが可能となる。
【００３８】
一方で、BilateralフィルタはそのままではGaussianフィルタのように一次元の積に分解することはできない。それは、Bilateralフィルタは式５にさらに式６の係数を掛けたものを重みとしているためである。
【００３９】
【数５】
2011090445.tif 000007
【００４０】
式６は注目画素と周辺画素との「画素地の差分」に依存しており、画素値の差分は空間的な関係性はないため、図１０と同様ように縦・横に分解することが通常はできない。
【００４１】
しかしながら、写真画像の一般的なエッジ成分の多くは、閉じた線（途切れていない線）状に存在しているという特徴がある。エッジ成分が閉じた線であるならば、ある２つの画素の差分値は任意の経路の勾配データの積分で近似的に表現可能である。よって、ある２つの画素xkとxjの画素値差分を図１３のようにxmを経由することで、画素値差分の重みの計算を近似的に一次元空間の式に分解した式７で表現することが可能となる。
【００４２】
【数６】
2011090445.tif 000008
【００４３】
一次元に分解することで、縦・横方向に一次元空間のBilateralフィルタを順次適用して二次元空間のBilateralフィルタに近い効果を得ることが可能である。また、計算量はＯ記法で４乗から３乗への削減（変数Nを画像の１辺の画素数とする）に相当する。計算量が削減できる理由はGaussianフィルタと同一である。
【図１】
2011090445.tif 000009
【図２】
2011090445.tif 000010
【図３】
2011090445.tif 000011
【図４】
2011090445.tif 000012
【図５】
2011090445.tif 000013
【図６】
2011090445.tif 000014
【図７】
2011090445.tif 000015
【図８】
2011090445.tif 000016
【図９】
2011090445.tif 000017
【図１０】
2011090445.tif 000018
【図１１】
2011090445.tif 000019
【図１２】
2011090445.tif 000020
【図１３】
2011090445.tif 000021