説明

画像処理装置

【課題】ブロック歪が発生する位置が未知であっても、効果的にブロック歪を除去することが可能な画像処理装置を提供する。
【解決手段】エッジ検出部121が、動画フレーム上の垂直方向と水平方向の画素ラインについて、それぞれエッジラインを検出し、ブロック歪検出部123が、上記エッジラインのうち、ブロック歪みに起因するエッジラインを特定し、この特定したエッジラインについて、ブロック歪除去部124がデブロッキング処理を実施するようにしたものである。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、動画像の再生品質を改善する画像処理装置に関する。
【背景技術】
【0002】
最近、インターネットを介したユーザ投稿型の動画視聴サイトが普及してきている。また、モバイル機器等でネット動画を視聴することも、日常行為として行われるようになってきている。動画像視聴サイトにアップロードされている動画像データは、比較的低画質であるものが多く、またブロック歪やモスキート歪に代表される符号化歪が重畳されやすいため、デコーダの出力映像に対して符号化歪除去フィルタなどを適用していた。
【0003】
具体的には、動画視聴サイトに投稿されている動画のうち、H.263やMPEG-4で符号化されている動画は、エンコーダの性質上ブロック歪が目立ちやすく、ユーザに不快感を与えている。一般的にこのようなブロック歪は、符号化処理の境界に発生するため、取り除くことできる(例えば、非特許文献1参照)。
【0004】
しかし、復号した直後の画像データや、符号化情報が得られない画像データの場合、ブロック歪の発生する間隔やその開始点が未知であるため、効果的にブロック歪を取り除くことができなかった。なお、符号化情報が得られない画像データは、デコーダがブラックボックスとなっており、例えばディスプレイ直前のフレームバッファからしか取得できない画像データである。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】大久保榮監修、角野眞也、菊池義浩、鈴木輝彦共編「H.264/AVC教科書」インプレス、2004年8月1日、p.140-144 6.1「デブロッキングフィルタの役割」
【発明の概要】
【発明が解決しようとする課題】
【0006】
従来の画像処理装置では、符号化のブロック間隔やブロックの開始点が未知である場合、ブロック歪が発生する位置が未知であるため、効果的にブロック歪を取り除くことができないという問題があった。
この発明は上記の問題を解決すべくなされたもので、ブロック歪が発生する位置が未知であっても、効果的にブロック歪を除去することが可能な画像処理装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
上記の目的を達成するために、この発明は、ブロック歪みに起因するエッジラインを抑制する画像処理装置において、フレームを構成する画素の値に基づいて、エッジラインを検出するエッジライン検出手段と、エッジライン検出手段が検出したエッジラインに基づいて、フレームの画像データに対して、エッジラインを抑制するフィルタリングを行うフィルタリング手段とを具備して構成するようにした。
【発明の効果】
【0008】
以上述べたように、この発明では、フレーム上に生じるエッジラインを検出し、これに基づいて、フレームの画像データに対して、エッジラインを抑制するフィルタリングを行うようにしている。
したがって、この発明によれば、ブロック歪が発生する位置が未知であっても、効果的にブロック歪を除去することが可能な画像処理装置を提供できる。
【図面の簡単な説明】
【0009】
【図1】この発明に係わる画像処理装置を適用した携帯電話機の構成を示す回路ブロック図。
【図2】この発明に係わる画像処理装置の構成を示す回路ブロック図。
【図3】図2に示した画像補正部の動作を説明するためのフローチャート。
【図4】図2に示した画像補正部のエッジ検出部の動作を説明するためのフローチャート。
【図5】図2に示した画像補正部のエッジ検出部の動作を説明するための図。
【図6】図2に示した画像補正部のエッジ検出部の動作を説明するためのフローチャート。
【図7】図2に示した画像補正部のブロック歪検出部の動作を説明するためのフローチャート。
【図8】図2に示した画像補正部の水平方向のデブロッキングフィルタ処理を説明するためのフローチャート。
【図9】図2に示した画像補正部の垂直方向のデブロッキングフィルタ処理を説明するためのフローチャート。
【図10】図2に示した画像補正部のブロック歪除去部の動作を説明するためのフローチャート。
【発明を実施するための形態】
【0010】
以下、図面を参照して、この発明の一実施形態について説明する。以下の説明では、この発明の一実施形態に係わる画像処理装置を、携帯電話機などの移動無線端末装置に適用した場合を例に挙げて説明する。
図1は、この発明の一実施形態に係わる画像処理装置を適用した移動無線端末装置の構成を示すブロック図である。この移動無線端末装置は、図1に示すように、主な構成要素として、制御部100と、無線通信部10と、表示部20と、通話部30と、操作部40と、記憶部50と、放送受信部60とを備え、基地局装置BSおよび移動通信網NWを介した通信と、放送局BCから送信される地上デジタル放送信号を受信する機能を備える。
【0011】
無線通信部10は、制御部100の指示にしたがって、移動通信網NWに収容された基地局装置BSと無線通信を行うものであって、これにより、音声データや電子メールデータなどの送受信、Webデータやストリーミングデータなどの受信を行う。
表示部20は、制御部100の制御により、画像(静止画像および動画像)や文字情報などを表示して、視覚的にユーザに情報を伝達するものである。この発明では、この表示部20で表示される動画像のブロック歪を効果的に目立たなくする。
【0012】
通話部30は、スピーカ31やマイクロホン32を備え、マイクロホン32を通じて入力されたユーザの音声を制御部100にて処理可能な音声データに変換して制御部100に出力したり、無線通信部10あるいは放送受信部60により受信された音声データを復号してスピーカ31から出力するものである。
操作部40は、複数のキースイッチなどを備え、これを通じてユーザから指示を受け付けるものである。
【0013】
記憶部50は、制御部100の制御プログラムや制御データ、アプリケーションソフトウェア、通信相手の名称や電話番号などを対応づけたアドレスデータ、送受信した電子メールのデータ、WebブラウジングによりダウンロードしたWebデータや、ダウンロードしたコンテンツデータを記憶し、またストリーミングデータなどを一時的に記憶するものである。なお、記憶部50は、HDD、RAM、ROM、ICメモリなどの1つまたは複数の記憶手段を含むものである。
【0014】
放送受信部60は、放送局BCから送信される地上デジタル放送信号のうち、ワンセグメントを受信し、映像信号が、例えばH.264などの形式で符号化された放送データ(符号化ストリーム)を得る。
【0015】
制御部100は、マイクロプロセッサを備え、記憶部50が記憶する制御プログラムや制御dcsデータにしたがって動作し、当該移動無線端末装置の各部を統括して制御するものであって、無線通信部10を通じて、音声通信やデータ通信を行うために、通信系の各部を制御するネットワーク通信制御機能と、アプリケーション処理機能を備える。
【0016】
アプリケーション処理機能は、記憶部50が記憶するアプリケーションソフトウェアにしたがって制御部100が動作することにより、例えば、放送受信部60を制御して地上デジタル放送を受信したり、電子メールの送受信や、Webブラウジングなどを行う。
【0017】
そして、制御部100は、地上デジタル放送から受信した受信データやダウンロードしたストリーミングデータなどの動画像データに基づいて、動画像を表示部20に表示したりする動画像処理機能を備える。この動画像処理機能は、制御部100が、上記動画像データを復号し、この復号結果に画像処理を施して、動画像を表示部20に表示する。
【0018】
この動画像処理機能を実現するために、制御部100は、図2に示すように、動画像復号部110と、画像補正部120と、表示ドライバ130とを備える。なお、制御部100は、動画像処理機能に並行して、オーディオデータを再生するための音声処理機能も備え、そのための構成としてオーディオデータ処理部(図示しない)も備える。
【0019】
動画像復号部110は、上記動画像データとして符号化データ(Video Elementary Stream)が入力され、これを復号し、これによって複数の動画像フレームで構成される動画像データを得る。なお、以下の説明では、動画像フレームを構成する画素は、X-Y平面上に配列されているものとして説明する。なお、動画像フレームは、height×widthの解像度を有する。heightは、1フレームの縦画素数を示し、widthは、1フレームの横画素数を示す。
【0020】
画像補正部120は、上記動画像データに基づいて、各動画像フレームのブロック歪みを除去した補正画像データを生成するものであって、エッジ検出部121と、エッジ情報記憶部122と、ブロック歪検出部123と、ブロック歪除去部124とを備え、図3に示すような処理を、各動画像フレームに対して実行する。
なお、ステップ3aおよびステップ3bの処理は、エッジ検出部121によって為され、ステップ3cの処理は、ブロック歪検出部123によって為される。また、ステップ3dの処理は、ブロック歪除去部124によって為される。
【0021】
またエッジ情報記憶部122は、エッジ検出部121によって生成されたエッジ情報を記憶する。後に説明するが、エッジ情報には、フレーム毎に、エッジラインの存在を示す情報(horizontal_edge_table[x,t]、vertical_edge_table[y,t])や、この情報を複数のフレームについて集計した情報(horizontal_frame_edge_table[x,t]、vertical_frame_edge_table[y,t])がある。なお、tは処理対象の動画像フレームFt(以下、処理対象フレームFtと略称する)の識別番号を示し、xは画素のフレーム上のX座標、yは画素のフレーム上のY座標をそれぞれ示す。
【0022】
まずステップ3aにおいてエッジ検出部121は、処理対象の動画像フレームFtに対して、図4に示す処理を実施し、これにより、フレームFtを構成する画素毎にエッジを検出する。以下、図4を参照して、ステップ3aの処理について説明する。
【0023】
エッジ検出部121は、処理対象の画素P(x,y)(以下、対象画素P(x,y)と略称する)のY座標を0からheight未満まで可変する、ステップ4a〜4jのループ処理を実施する。またそしてエッジ検出部121は、上記ループ処理内において、対象画素P(x,y)のX座標を0からwidth未満まで可変する、ステップ4b〜4iのループ処理を実施する。
すなわち、エッジ検出部121は、処理対象の画素P(x,y)のY座標を1つインクリメントする毎に、X座標を0からwidth未満まで可変して、ステップ4c〜4hの処理を実施し、これにより、動画像フレームFtを構成するすべての画素についてステップ4c〜4hの処理を実施する。
【0024】
ステップ4cにおいてエッジ検出部121は、例えば一般的な1次元フィルタを用いるなどして、対象画素P(x,y)について水平方向に隣接する画素P(x-1,y)および画素P(x+1,y)の輝度値の差分絶対値を水平方向のエッジの大きさedge_xとして検出し、ステップ4dに移行する。ステップ4dにおいてエッジ検出部121は、ステップ4cで検出したedge_xが、予め設定された閾値Pixel_Edge_Th以上であるか否かを判定する。ここで、edge_xが、閾値Pixel_Edge_Th以上である場合には、ステップ4eに移行し、一方、edge_xが、閾値Pixel_Edge_Th未満の場合には、ステップ4fに移行する。
ステップ4eにおいてエッジ検出部121は、horizontal_edge_hist[x]に1を加算し、ステップ4fに移行する。なお、horizontal_edge_hist[x]は、図5に示すように、X座標がxの画素ライン上で検出した水平方向のエッジの数を示す。
【0025】
ステップ4fにおいてエッジ検出部121は、ステップ4cと同様に1次元フィルタを用いるなどして、処理対象P(x,y)について水平方向に隣接する画素P(x,y-1)および画素P(x,y+1)の輝度値の差分絶対値を垂直方向のエッジの大きさedge_yとして検出し、ステップ4gに移行する。
【0026】
ステップ4gにおいてエッジ検出部121は、ステップ4fで検出したedge_yが、予め設定された閾値Pixel_Edge_Th以上であるか否かを判定する。ここで、edge_yが、閾値Pixel_Edge_Th以上である場合には、ステップ4hに移行し、一方、edge_yが、閾値Pixel_Edge_Th未満の場合には、ステップ4iに移行する。
ステップ4hにおいてエッジ検出部121は、vertical_edge_hist[y]に1を加算し、ステップ4iに移行する。なお、vertical_edge_hist[y]は、図5に示すように、Y座標がyの画素ライン上で検出した垂直方向のエッジ数を示す。また、図5の動画像フレーム内に示している“1”と“0”は、ステップ4dにおいてエッジの大きさが閾値以上であった場合に“1”、そうでない場合を“0”として表したものである。
【0027】
次に、ステップ3bにおいてエッジ検出部121は、処理対象フレームFtに対して、図6に示す処理を実施して、ブロック歪みによって生じた可能性の高いエッジラインを検出する。なお、ここでエッジラインとは、エッジが同一画素ライン上に連続する状態のことをいう。
【0028】
以下、図6を参照して、ステップ3bの処理について説明する。
エッジ検出部121は、ステップ6a〜6eのループ処理を実施して、処理対象フレームFtに存在する水平方向にエッジラインを探索する。またその後、エッジ検出部121は、ステップ6a〜6eのループ処理と同様にして、ステップ6f〜6jのループ処理を実施して、処理対象フレームFtに存在する垂直方向にエッジラインを探索する。
【0029】
ステップ6aにおいてエッジ検出部121は、0以上width未満の範囲で、x座標をインクリメントして、評価対象のラインLine[x](以下、対象ラインLine[x]と略称する。)を決定し、ステップ6bに移行する。
【0030】
ステップ6bにおいてエッジ検出部121は、対象ラインLine[x]のhorizontal_edge_hist[x]を参照し、その値が閾値Line_Edge_Th_X以上であるか否かを判定する。ここで、horizontal_edge_hist[x]の値が閾値Line_Edge_Th_X以上の場合には、ステップ6cに移行し、一方、閾値Line_Edge_Th_X未満の場合には、ステップ6dに移行する。なお、上記閾値Line_Edge_Th_Xは、例えば、予めwidth×0.5に設定しておく。
【0031】
ステップ6cにおいてエッジ検出部121は、対象ラインLine[x]をエッジラインと見なし、エッジ情報記憶部122が記憶するhorizontal_edge_table[x,t]の値を0から1に更新し、ステップ6dに移行する。ここで、「0」は、エッジラインでないことを示すフラグであり、「1」エッジラインであることを示すフラグである。
【0032】
ステップ6dにおいてエッジ検出部121は、エッジ情報記憶部122が記憶する複数のフレームのhorizontal_edge_table[x,T](T=t-a,...,t:aは所定のフレーム数)に基づいて、対象ラインLine[x]がエッジラインと見なされた回数を再計算し、この結果をhorizontal_frame_edge_table[x,t]としてエッジ情報記憶部122に記録し、ステップ6eに移行する。すなわち、動画像フレームFt-aからFtまでのhorizontal_edge_table[x,T]を加算する。
【0033】
ステップ6eにおいてエッジ検出部121は、処理対象フレームFtを構成する垂直方向のすべての画素ラインについて、ステップ6b〜6dの処理をそれぞれ施したか否かを判定し、処理を施した場合には、ステップ6fに移行し、一方、施していない場合には、ステップ6aに移行して、次の垂直方向の画素ラインについて上記処理を実行する。
【0034】
ステップ6fにおいてエッジ検出部121は、0以上height未満の範囲で、y座標をインクリメントして、評価対象のラインLine[y](以下、対象ラインLine[y]と略称する。)を決定し、ステップ6gに移行する。
【0035】
ステップ6gにおいてエッジ検出部121は、対象ラインLine[y]のvertical_edge_hist[y]を参照し、その値が閾値Line_Edge_Th_Y以上であるか否かを判定する。ここで、vertical_edge_hist[y]の値が閾値Line_Edge_Th_Y以上の場合には、ステップ6hに移行し、一方、閾値Line_Edge_Th_Y未満の場合には、ステップ6iに移行する。なお、上記閾値Line_Edge_Th_Yは、例えば、予めheight×0.5に設定しておく。
【0036】
ステップ6hにおいてエッジ検出部121は、対象ラインLine[y]をエッジラインと見なし、エッジ情報記憶部122が記憶するvertical_edge_table[y,t]の値を0から1に更新し、ステップ6iに移行する。ここで、「0」は、エッジラインでないことを示すフラグであり、「1」は、エッジラインであることを示すフラグである。
【0037】
ステップ6iにおいてエッジ検出部121は、エッジ情報記憶部122が記憶する複数のフレームのvertical_edge_table[y,T](T=t-a,...,t:aは所定のフレーム数)に基づいて、対象ラインLine[y]がエッジラインと見なされた回数を再計算し、この結果をvertical_frame_edge_table[y,t]としてエッジ情報記憶部122に記録し、ステップ6jに移行する。すなわち、動画像フレームFt-aからFtまでのvertical_edge_table[y,T]を加算する。
【0038】
ステップ6jにおいてエッジ検出部121は、処理対象フレームFtを構成する水平方向のすべての画素ラインについて、ステップ6g〜6iの処理をそれぞれ施したか否かを判定し、処理を施した場合には、当該処理を終了し、一方、施していない場合には、ステップ6fに移行して、次の水平方向の画素ラインについて上記処理を実行する。このような処理によって、図5に示すようにhorizontal_edge_table[x]とvertical_edge_table[y]の値が更新される。horizontal_edge_table[x]は、水平方向にエッジ探索を行った結果エッジが検出されたラインを”1”で示し、vertical_edge_table[y]は、垂直方向にエッジ探索を行った結果エッジが検出されたラインを”1”で示す。図5では、エッジラインを構成する画素(horizontal_edge_table[x]とvertical_edge_table[y]の少なくとも一方が”1”の画素)を斜線で示している。
【0039】
次に、ステップ3cにおいてブロック歪検出部123は、処理対象フレームFtに対して、図7に示す処理あるいは図8に示す処理を実施して、ブロック歪みの位置を検出する。ブロック歪検出部123は、整数倍に拡大して画像を表示する場合には、図7に示す第1処理を実施し、一方、非整数倍に拡大して画像を表示する場合や縮小して画像を表示する場合は、図10に示す第2処理を実施する。
【0040】
まず、図7を参照して、第1処理について説明する。
ブロック歪検出部123は、ステップ7a〜7iのループ処理を実施して、ブロック歪みによる垂直方向の歪ライン(以下、垂直方向ブロック歪みラインと称する。)を探索する。またその後、ブロック歪検出部123は、ステップ7a〜7iのループ処理と同様にして、ステップ7j〜7rのループ処理を実施して、水平方向に並ぶブロック歪みの歪ライン(以下、水平方向ブロック歪みラインと称する。)を探索する。
【0041】
ステップ7aにおいてブロック歪検出部123は、0以上width未満の範囲で、x座標をインクリメントして、対象ラインLine[x]に対応するhorizontal_edge_table[x,t]をエッジ情報記憶部122から読み出し、ステップ7bに移行する。
【0042】
ステップ7bにおいてブロック歪検出部123は、倍率1の際のブロック歪間隔である8以下の整数値(0,1,2,3,4,5,6,7)とx座標の論理積(x&0x7)が、1か否かの判定を行う。判定結果が1でない場合には、ステップ7cに移行し、1の場合にはステップ7kに移行する。
【0043】
ステップ7cにおいてブロック歪検出部123は、ステップ7aで読み出したhorizontal_edge_table[x,t]にフラグ「1」が設定されているか否かを判定する。すなわち、対象ラインLine[x]の画素ラインが、エッジラインとして判定されているか否かを判定する。ここで、フラグ「1」が設定されている場合には、ステップ7dに移行し、一方、フラグ「0」が設定されている場合には、ステップ7kに移行する。
【0044】
ステップ7dでは、check_flag[x&0x7]の値を1に変更する。
つづいて、ブロック歪検出部123は、ステップ7e〜ステップ7hのループ処理を実施する。
【0045】
ステップ7eにおいてブロック歪検出部123は、対象ラインx&0x7を基点に、width未満の範囲で、パラメータiを画素間隔dだけインクリメントした値に設定し、ステップ7fに移行する。なお、画素間隔dは、ブロック歪みのサイズに相当し、実施例では8とする。
【0046】
ステップ7fにおいてブロック歪検出部123は、horizontal_edge_table[i,t]にフラグ「1」が設定されているか否かを判定する。すなわち、対象ラインLine[x]からd×n(nは自然数)だけシフトした位置の画素ラインLine[i]が、エッジラインとして判定されているか否かを判定する。ここで、フラグ「1」が設定されている場合には、ステップ7gに移行し、一方、フラグ「0」が設定されている場合には、ステップ7hに移行する。
【0047】
ステップ7gにおいてブロック歪検出部123は、horizontal_line_hist[x&0x7]に「1」を加算し、ステップ7hに移行する。
ステップ7hにおいてブロック歪検出部123は、パラメータi+dがwidth以上になる場合には、ステップ7e〜7hのループ処理を終了してステップ7iに移行し、一方、超えない場合には、上記ループ処理を継続しステップ7eに移行する。
【0048】
すなわち、ステップ7e〜7hのループ処理では、図6に示したステップ3bの検出結果(エッジ情報)に基づいて、エッジラインである画素ラインLine[i]を基準に、dの倍数の画素ライン毎に、垂直のエッジラインが存在する数をカウントしたヒストグラムhorizontal_line_hist[x&0x7]を生成する。
【0049】
例えば、画素間隔d=8で、x=0すなわち対象ラインLine[0]の場合、パラメータiを8, 16, 24,…,64,…と変化させ、horizontal_edge_table[i,t]にフラグ「1」が設定されている場合に、ヒストグラムhorizontal_line_hist[x&0x7]に1を加算する。
【0050】
ステップ7iにおいてブロック歪検出部123は、horizontal_line_hist[x&0x7]がmax_hist_Xを超えるか否かを判定する。なお、max_hist_Xの初期値は0とする。ここで、horizontal_line_hist[x&0x7]がmax_hist_Xを超える場合には、ステップ7jに移行し、一方、超えない場合には、ステップ7kに移行する。
【0051】
ステップ7jにおいてブロック歪検出部123は、max_hist_Xをhorizontal_line_hist[x&0x7]で更新するとともに、基準ラインbase_line_xを対象ラインx&0x7に設定して、ステップ7kに移行する。すなわち、ステップ7jでは、ブロック歪みによって周期的に生じている可能性が最も高い垂直方向ブロック歪みラインを検出し、その位置を特定する。
【0052】
ステップ7kにおいてブロック歪検出部123は、パラメータxをインクリメントした場合に、その値がwidth以上になる場合には、ステップ7a〜7kのループ処理を終了してステップ7lに移行し、一方、超えない場合には、上記ループ処理を継続しステップ7aに移行する。
【0053】
ステップ7lにおいてブロック歪検出部123は、0以上height未満の範囲で、y座標をインクリメントして、対象ラインLine[y]に対応するvertical_edge_table[y,t]をエッジ情報記憶部122から読み出し、ステップ7mに移行する。
【0054】
ステップ7mにおいてブロック歪検出部123は、倍率1の際のブロック歪間隔である8以下の整数値(0,1,2,3,4,5,6,7)とy座標の論理積(y&0x7)が、1か否かの判定を行う。判定結果が1でない場合には、ステップ7nに移行し、1の場合にはステップ7vに移行する。
【0055】
ステップ7nにおいてブロック歪検出部123は、ステップ7lで読み出したvertical_edge_table[y,t]にフラグ「1」が設定されているか否かを判定する。すなわち、対象ラインLine[y]の画素ラインが、エッジラインとして判定されているか否かを判定する。ここで、フラグ「1」が設定されている場合には、ステップ7oに移行し、一方、フラグ「0」が設定されている場合には、ステップ7vに移行する。
【0056】
つづいて、ブロック歪検出部123は、ステップ7p〜ステップ7sのループ処理を実施する。
【0057】
ステップ7oでは、check_flag[y&0x7]の値を1に変更する。
ステップ7pにおいてブロック歪検出部123は、対象ラインx&0x7を基点に、height未満の範囲で、パラメータiを画素間隔dだけインクリメントした値に設定し、ステップ7qに移行する。なお、画素間隔dは、ブロック歪みのサイズに相当し、実施例では8とする。
【0058】
ステップ7qにおいてブロック歪検出部123は、vertical_edge_table[i,t]にフラグ「1」が設定されているか否かを判定する。すなわち、対象ラインLine[y]からd×n(nは自然数)だけシフトした位置の画素ラインLine[i]が、エッジラインとして判定されているか否かを判定する。ここで、フラグ「1」が設定されている場合には、ステップ7rに移行し、一方、フラグ「0」が設定されている場合には、ステップ7sに移行する。
【0059】
ステップ7rにおいてブロック歪検出部123は、vertical_line_hist[y&0x7]に「1」を加算し、ステップ7sに移行する。
ステップ7sにおいてブロック歪検出部123は、パラメータi+dがheight以上になる場合には、ステップ7p〜7sのループ処理を終了してステップ7tに移行し、一方、超えない場合には、上記ループ処理を継続しステップ7pに移行する。
【0060】
すなわち、ステップ7p〜7sのループ処理では、図6に示したステップ3bの検出結果(エッジ情報)に基づいて、エッジラインである画素ラインLine[i]を基準に、dの倍数の画素ライン毎に、水平のエッジラインが存在する数をカウントしたヒストグラムvertical_line_hist[y&0x7]を生成する。
【0061】
例えば、画素間隔d=8で、y=0すなわち対象ラインLine[0]の場合、パラメータiを8, 16, 24,…,64,…と変化させ、vertical_edge_table[i,t]にフラグ「1」が設定されている場合に、ヒストグラムvertical_line_hist[y&0x7]に1を加算する。
【0062】
ステップ7tにおいてブロック歪検出部123は、vertical_line_hist[y&0x7]がmax_hist_Yを超えるか否かを判定する。なお、max_hist_Yの初期値は0とする。ここで、vertical_line_hist[y&0x7]がmax_hist_Yを超える場合には、ステップ7uに移行し、一方、超えない場合には、ステップ7vに移行する。
【0063】
ステップ7uにおいてブロック歪検出部123は、max_hist_Yをvertical_line_hist[y&0x7]で更新するとともに、基準ラインbase_line_yを対象ラインy&0x7に設定して、ステップ7vに移行する。すなわち、ステップ7uでは、ブロック歪みによって周期的に生じている可能性が最も高い水平方向ブロック歪みラインを検出し、その位置を特定する。
【0064】
ステップ7vにおいてブロック歪検出部123は、パラメータyをインクリメントした場合に、その値がheight以上になる場合には、ステップ7l〜7vのループ処理を終了してステップ7wに移行し、一方、超えない場合には、上記ループ処理を継続しステップ7lに移行する。
【0065】
ブロック歪検出部123は、ステップ7wでデブロッキングフィルタ単位推定処理を行う。このデブロッキングフィルタ処理単位推定処理とは、上記ステップで求めた基準ラインbase_line_x, base_line_yに基づいてブロック歪の間隔を推定する処理である。
【0066】
具体的には、基準ラインから、間隔dにおけるヒストグラムを作成し、最大ヒストグラムを有する間隔をデブロッキングフィルタ処理単位とする。具体的な処理のフローチャートを図8と図9に例示する。図8は、水平方向のデブロッキングフィルタ処理であり、図9は、垂直方向のデブロッキングフィルタ処理である。
【0067】
図8を用いて水平方向のデブロッキングフィルタ処理について説明する。この処理では、たとえば、デブロッキングフィルタ処理単位候補を2,4,8,16,24,32とする。つまり図8のidx[i]={2,4,8,16,24,32}とし、デブロッキングフィルタ処理単位候補数をIdxとする。
【0068】
まず、ブロック歪検出部123は、ステップ8aにおいて、ヒストグラムのカウントを初期化する。そして、ステップ8bにおいて、変数iを0からIdxまでの範囲で1ずつインクリメントした値に設定して、ステップ8bからステップ8hの処理を繰り返す。
【0069】
ステップ8cでは、変数dにi番目のデブロッキングフィルタ処理単位候補の値idx[i]を設定する。そして、ステップ8dでは、基準ラインbase_line_xを基点に、width未満の範囲で、パラメータiを画素間隔dだけインクリメントした値に設定して、ステップ8dからステップ8gの処理を繰り返す。
【0070】
ステップ8eでは、horizontal_edge_table[x]が1であるか否かを判定し、horizontal_edge_table[x]が1であれば、当該デブロッキングフィルタ処理単位候補のヒストグラムhist_by_dに1を加算する。
【0071】
例えば、デブロッキングフィルタ処理単位候補としてide[0](つまり、2)を選択している場合には、ステップ8dからステップ8gの処理において、基準ラインから2ラインごとのラインのうち、エッジラインと判断されているライン数をカウントしたヒストグラムhist_by_2を作成する。
【0072】
全てのデブロッキングフィルタ処理単位候補に対してヒストグラムを作成する処理が終了すると、ステップ8iにおいて、そのヒストグラムが最大となる間隔を水平方向デブロッキングフィルタ処理単位とする。このような処理を行うことで1/4〜4倍までの拡大率におけるデブロッキングフィルタ処理単位の検出を行うことができる。
【0073】
なお、図9に示した垂直方向のデブロッキングフィルタ処理は、図8に示した水平方向のデブロッキングフィルタ処理と方向が異なるだけで同様の処理であるため、説明を省略する。
【0074】
ステップ7xにおいてブロック歪検出部123は、上記ステップで求めた水平方向にデブロッキングする水平方向処理単位と、垂直方向にデブロッキングする垂直方向処理単位が等しくないかを確認する。ここで、上記処理単位が等しくない場合には、ステップ7yに移行し、一方、上記処理単位が等しい場合には、いずれかの処理単位を実際に適用する処理単位として採用し、当該処理を終了する。
【0075】
ステップ7yにおいてブロック歪検出部123は、水平方向処理単位と、垂直方向処理単位を調整し、当該処理を終了する。例えば、水平方向処理単位と、垂直方向処理単位のうち、小さい方の処理単位を実際に適用する処理単位として採用する。
【0076】
次に、図10を参照して、第2処理について説明する。
ブロック歪検出部123は、ステップ10a〜10eのループ処理を実施して、各x座標のhorizontal_frame_edge_table[x]を参照し、動画像フレームFt-aからFtまでの間の動画像フレームの対象ラインLine[x]にエッジラインが生じていた数をカウントする。
【0077】
まず、ステップ10aにおいてブロック歪検出部123は、0以上width未満の範囲で、x座標をインクリメントして、対象ラインLine[x]を決定し、ステップ10bに移行する。
【0078】
ステップ10bにおいてブロック歪検出部123は、対象ラインLine[x]のhorizontal_frame_edge_table[x]を参照し、その値が閾値a-1(aは、参照したフレーム数)以上であるか否かを判定する。ここで、horizontal_frame_edge_table[x]の値が閾値a-1以上の場合には、ステップ10dに移行し、一方、閾値a-1未満の場合には、ステップ10cに移行する。
【0079】
ステップ10cにおいてブロック歪検出部123は、horizontal_frame_edge_table[x]の値を「0」にリセットし、ステップ10eに移行する。
一方、ステップ10dにおいてブロック歪検出部123は、パラメータcountに「1」を加算し、ステップ10eに移行する。
【0080】
ステップ10eにおいてブロック歪検出部123は、処理対象フレームFtを構成する垂直方向のすべての画素ラインについて、ステップ10b〜10dの処理を施したか否かを判定し、処理を施した場合には、ステップ10fに移行し、一方、施していない場合には、ステップ10aに移行して、次の垂直方向の画素ラインについて上記処理を実行する。
【0081】
ステップ10fにおいてブロック歪検出部123は、パラメータcountの値が、予め設定した閾値h_frame_hist_th以上であるか否かを判定する。ここで、パラメータcountの値が、上記閾値h_frame_hist_th以上の場合には、ステップ10gに移行し、一方、上記閾値h_frame_hist_th未満の場合には、ステップ10kに移行する。
【0082】
なお、上記閾値h_frame_hist_thは、表示部20のパネルサイズ(解像度X-Y)とその時点で表示する画像サイズなどからブロック歪検出部123が決定する。例えば、画像サイズが320x240の場合、通常ブロック歪は40(=320/8)にライン発生する。しかし、ビットレートや絵柄によっては、ブロック歪みが発生しないため、上記閾値h_frame_hist_thは半分の20に設定すればよい。後述する垂直方向の閾値v_frame_hist_thも同様である。
【0083】
ブロック歪検出部123は、ステップ10g〜10jのループ処理を実施して、各x座標のhorizontal_frame_edge_table[x]を参照し、デブロッキングフィルタを適用する垂直方向の画素ラインを決定する。
まず、ステップ10gにおいてブロック歪検出部123は、0以上width未満の範囲で、x座標をインクリメントして、対象ラインLine[x]を決定し、ステップ10hに移行する。
【0084】
ステップ10hにおいてブロック歪検出部123は、horizontal_frame_edge_table[x]の値が「0」でないか判定する。ここで、horizontal_frame_edge_table[x]の値が「0」ではない場合には、ステップ10iに移行し、一方、「0」の場合には、ステップ8jに移行する。
【0085】
ステップ10iにおいてブロック歪検出部123は、対象ラインLine[x]にデブロッキングフィルタを適用するために、deblocking_line_horizontal[x]に「1」を設定し、ステップ10jに移行する。
【0086】
ステップ10jにおいてブロック歪検出部123は、処理対象フレームFtを構成する垂直方向のすべての画素ラインについて、ステップ10h〜10iの処理をそれぞれ施したか否かを判定し、処理を施した場合には、ステップ10kに移行し、一方、施していない場合には、ステップ10gに移行して、次の垂直方向の画素ラインについて上記処理を実行する。
【0087】
つづいて、ブロック歪検出部123は、ステップ10k〜10oのループ処理を実施して、各y座標のvertical_frame_edge_table[y]を参照し、動画像フレームFt-aからFtまでの間の動画像フレームの対象ラインLine[y]にエッジラインが生じていた数をカウントする。
【0088】
まず、ステップ10kにおいてブロック歪検出部123は、0以上height未満の範囲で、y座標をインクリメントして、対象ラインLine[y]を決定し、ステップ10lに移行する。
【0089】
ステップ10lにおいてブロック歪検出部123は、対象ラインLine[y]のvertical_frame_edge_table[y]を参照し、その値が閾値a-1(aは、参照したフレーム数)以上であるか否かを判定する。ここで、vertical_frame_edge_table[y]の値が閾値a-1以上の場合には、ステップ10nに移行し、一方、閾値a-1未満の場合には、ステップ10mに移行する。
【0090】
ステップ10mにおいてブロック歪検出部123は、vertical_frame_edge_table[y]の値を「0」にリセットし、ステップ10oに移行する。
一方、ステップ10nにおいてブロック歪検出部123は、パラメータcountに「1」を加算し、ステップ10oに移行する。
【0091】
ステップ10oにおいてブロック歪検出部123は、処理対象フレームFtを構成する水平方向のすべての画素ラインについて、ステップ10l〜10nの処理を施したか否かを判定し、処理を施した場合には、ステップ10pに移行し、一方、施していない場合には、ステップ10kに移行して、次の水平方向の画素ラインについて上記処理を実行する。
【0092】
ステップ10pにおいてブロック歪検出部123は、パラメータcountの値が、予め設定した閾値v_frame_hist_th以上であるか否かを判定する。ここで、パラメータcountの値が、上記閾値v_frame_hist_th以上の場合には、ステップ10qに移行し、一方、上記閾値v_frame_hist_th未満の場合には、当該処理を終了する。
【0093】
ブロック歪検出部123は、ステップ10q〜10tのループ処理を実施して、各y座標のvertical_frame_edge_table[y]を参照し、デブロッキングフィルタを適用する水平方向の画素ラインを決定する。
まず、ステップ10qにおいてブロック歪検出部123は、0以上height未満の範囲で、y座標をインクリメントして、対象ラインLine[y]を決定し、ステップ10rに移行する。
【0094】
ステップ10rにおいてブロック歪検出部123は、vertical_frame_edge_table[y]の値が「0」でないか判定する。ここで、vertical_frame_edge_table[y]の値が「0」ではない場合には、ステップ10sに移行し、一方、「0」の場合には、ステップ10tに移行する。
【0095】
ステップ10sにおいてブロック歪検出部123は、対象ラインLine[y]にデブロッキングフィルタを適用するために、deblocking_line_vertical[y]に「1」を設定し、ステップ10tに移行する。
【0096】
ステップ10tにおいてブロック歪検出部123は、処理対象フレームFtを構成する水平方向のすべての画素ラインについて、ステップ10r〜10sの処理をそれぞれ施したか否かを判定し、処理を施した場合には、当該処理を終了し、一方、施していない場合には、ステップ10qに移行して、次の水平の画素ラインについて上記処理を実行する。
【0097】
ステップ3dでは、ブロック歪除去部124が、図7もしくは図10に示したステップ3cの処理結果に基づいて、処理対象フレームFtの動画像データに対して、デブロッキング処理を施して、ブロック歪みラインを除去し、補正画像データを得る。
【0098】
具体的には、ステップ3cで図7の処理を実施した場合には、ステップ7yで求めた処理単位と、ステップ7jで特定した垂直方向ブロック歪みラインの位置に基づいて、垂直方向のブロック歪みラインを除去するとともに、上記処理単位と、ステップ7uで特定した水平方向ブロック歪みラインの位置に基づいて、水平方向のブロック歪みラインを除去する。
【0099】
一方、ステップ3cで図10の処理を実施した場合には、ステップ10iでフラグ「1」を設定したdeblocking_line_horizontal[x]の位置に基づいて、垂直方向のブロック歪みラインを除去するとともに、同様に、ステップ10sでフラグ「1」を設定したdeblocking_line_vertical[y]の位置に基づいて、水平方向のブロック歪みラインを除去する。
【0100】
なお、デブロッキングフィルタは、H.264のように画像の品質を表すQPを利用しブロックごとにフィルタ強度を可変とする手法を適用してもよいし、画面均一なフィルタ強度を用いる手法を適用してもよい。
表示ドライバ130は、上記補正画像データをバッファし、このデータに基づいて、表示部20を駆動制御し、動画像を表示部20に表示する。
【0101】
以上のように、上記構成の画像処理装置では、垂直方向と水平方向のそれぞれにおいて、エッジラインを検出し、このエッジラインの位置に基づいてデブロッキング処理を実施するようにしている。
したがって、上記構成の画像処理装置によれば、ブロック歪が発生する位置が未知であっても、効果的にブロック歪を除去することができる。
【0102】
またこの発明では、図7で説明した処理により、上記検出したエッジラインのうち、動画像フレーム上で、所定の画素間隔で周期的に現れるエッジラインを特定して、ブロック歪みによって生じた可能性の高いエッジラインを検出し、その位置に基づいてデブロッキング処理を実施するようにしている。このため、ブロック歪みによって生じた可能性の高いエッジラインに対して、デブロッキングフィルタを適用できる。
【0103】
さらにこの発明では、図10で説明した処理により、上記検出したエッジラインのうち、複数の動画像フレームにわたって同じ画素ラインに現れるエッジラインを特定して、ブロック歪みによって生じた可能性の高いエッジラインを検出し、その位置に基づいてデブロッキング処理を実施するようにしている。このため、ブロック歪みによって生じた可能性の高いエッジラインに対して、デブロッキングフィルタを適用できる。
【0104】
なお、この発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また上記実施形態に開示されている複数の構成要素を適宜組み合わせることによって種々の発明を形成できる。また例えば、実施形態に示される全構成要素からいくつかの構成要素を削除した構成も考えられる。さらに、異なる実施形態に記載した構成要素を適宜組み合わせてもよい。
その他、この発明の要旨を逸脱しない範囲で種々の変形を施しても同様に実施可能であることはいうまでもない。
【符号の説明】
【0105】
10…無線通信部、20…表示部、30…通話部、31…スピーカ、32…マイクロホン、40…操作部、50…記憶部、60…放送受信部、100…制御部、110…動画像復号部、120…画像補正部、121…エッジ検出部、122…エッジ情報記憶部、123…ブロック歪検出部、124…ブロック歪除去部、130…表示ドライバ、BC…放送局、BS…基地局装置、NW…移動通信網。

【特許請求の範囲】
【請求項1】
ブロック歪みに起因するエッジラインを抑制する画像処理装置において、
フレームを構成する画素の値に基づいて、エッジラインを検出するエッジライン検出手段と、
前記エッジライン検出手段が検出したエッジラインに基づいて、前記フレームの画像データに対して、前記エッジラインを抑制するフィルタリングを行うフィルタリング手段とを具備したことを特徴とする画像処理装置。
【請求項2】
前記フィルタリング手段は、
前記エッジライン検出手段が検出したエッジラインに基づいて、前記フレーム上で周期的に生じている複数のエッジラインを検出する歪検出手段と、
前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行う歪除去手段とを備えることを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記エッジライン検出手段は、フレームを構成する画素の値に基づいて、互いに直交する第1方向と第2方向にそれぞれ生じるエッジラインを検出し、
前記フィルタリング手段は、
前記エッジライン検出手段が検出したエッジラインに基づいて、前記第1方向と前記第2方向について、それぞれ前記フレーム上で周期的に生じている複数のエッジラインを検出する歪検出手段と、
前記第1方向に生じるエッジラインの周期と、前記第2方向に生じるエッジラインの周期を検出し、これらの周期に基づいて、前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行う歪除去手段とを備えることを特徴とする請求項2に記載の画像処理装置。
【請求項4】
前記フィルタリング手段は、
前記エッジライン検出手段が検出したエッジラインのうち、前記フレーム上で発生する周期性が最も強い複数のエッジラインを検出する歪検出手段と、
前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行う歪除去手段とを備えることを特徴とする請求項1に記載の画像処理装置。
【請求項5】
前記エッジライン検出手段は、フレームを構成する画素の値に基づいて、互いに直交する第1方向と第2方向にそれぞれ生じるエッジラインを検出し、
前記フィルタリング手段は、
前記エッジライン検出手段が検出したエッジラインに基づいて、前記第1方向と前記第2方向について、それぞれ前記フレーム上で発生する周期性が最も強い複数のエッジラインを検出する歪検出手段と、
前記歪検出手段が検出した前記第1方向に生じるエッジラインと前記第2方向に生じるエッジラインの各周期を検出し、これらの周期に基づいて、前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行う歪除去手段とを備えることを特徴とする請求項2に記載の画像処理装置。
【請求項6】
前記フィルタリング手段は、
前記エッジライン検出手段が検出したエッジラインに基づいて、複数のフレーム間でフレーム上の同じ位置に生じているエッジラインを検出する歪検出手段と、
前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行う歪除去手段とを備えることを特徴とする請求項1に記載の画像処理装置。
【請求項7】
前記エッジライン検出手段は、フレーム上で隣接する複数の画素の値を比較することで、エッジラインを検出することを特徴とする請求項1に記載の画像処理装置。
【請求項8】
ブロック歪みに起因するエッジラインを抑制する画像処理装置において、
フレームを構成する画素の値に基づいて、エッジラインを検出するエッジライン検出手段と、
前記エッジライン検出手段が検出したエッジラインのうち、ブロック歪みに起因するエッジラインを検出する歪検出手段と、
前記フレームの画像データに対して、前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行うフィルタリング手段とを具備したことを特徴とする画像処理装置。
【請求項9】
前記歪検出手段は、前記エッジライン検出手段が検出したエッジラインのうち、前記フレーム上で周期的に生じている複数のエッジラインを、ブロック歪みに起因するエッジラインとして検出することを特徴とする請求項8に記載の画像処理装置。
【請求項10】
前記歪検出手段は、前記エッジライン検出手段が検出したエッジラインのうち、前記フレーム上で発生する周期性が最も強い複数のエッジラインを、ブロック歪みに起因するエッジラインとして検出することを特徴とする請求項9に記載の画像処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2011−71596(P2011−71596A)
【公開日】平成23年4月7日(2011.4.7)
【国際特許分類】
【出願番号】特願2009−218697(P2009−218697)
【出願日】平成21年9月24日(2009.9.24)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】