(57)【要約】【課題】ブロック歪が発生する位置が未知であっても、効果的にブロック歪を除去することが可能な画像処理装置を提供する。【解決手段】エッジ検出部１２１が、動画フレーム上の垂直方向と水平方向の画素ラインについて、それぞれエッジラインを検出し、ブロック歪検出部１２３が、上記エッジラインのうち、ブロック歪みに起因するエッジラインを特定し、この特定したエッジラインについて、ブロック歪除去部１２４がデブロッキング処理を実施するようにしたものである。【選択図】      図２
2011071596.tif 000002
【特許請求の範囲】
【請求項１】
ブロック歪みに起因するエッジラインを抑制する画像処理装置において、
フレームを構成する画素の値に基づいて、エッジラインを検出するエッジライン検出手段と、
前記エッジライン検出手段が検出したエッジラインに基づいて、前記フレームの画像データに対して、前記エッジラインを抑制するフィルタリングを行うフィルタリング手段とを具備したことを特徴とする画像処理装置。
【請求項２】
前記フィルタリング手段は、
前記エッジライン検出手段が検出したエッジラインに基づいて、前記フレーム上で周期的に生じている複数のエッジラインを検出する歪検出手段と、
前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行う歪除去手段とを備えることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記エッジライン検出手段は、フレームを構成する画素の値に基づいて、互いに直交する第１方向と第２方向にそれぞれ生じるエッジラインを検出し、
前記フィルタリング手段は、
前記エッジライン検出手段が検出したエッジラインに基づいて、前記第１方向と前記第２方向について、それぞれ前記フレーム上で周期的に生じている複数のエッジラインを検出する歪検出手段と、
前記第１方向に生じるエッジラインの周期と、前記第２方向に生じるエッジラインの周期を検出し、これらの周期に基づいて、前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行う歪除去手段とを備えることを特徴とする請求項２に記載の画像処理装置。
【請求項４】
前記フィルタリング手段は、
前記エッジライン検出手段が検出したエッジラインのうち、前記フレーム上で発生する周期性が最も強い複数のエッジラインを検出する歪検出手段と、
前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行う歪除去手段とを備えることを特徴とする請求項１に記載の画像処理装置。
【請求項５】
前記エッジライン検出手段は、フレームを構成する画素の値に基づいて、互いに直交する第１方向と第２方向にそれぞれ生じるエッジラインを検出し、
前記フィルタリング手段は、
前記エッジライン検出手段が検出したエッジラインに基づいて、前記第１方向と前記第２方向について、それぞれ前記フレーム上で発生する周期性が最も強い複数のエッジラインを検出する歪検出手段と、
前記歪検出手段が検出した前記第１方向に生じるエッジラインと前記第２方向に生じるエッジラインの各周期を検出し、これらの周期に基づいて、前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行う歪除去手段とを備えることを特徴とする請求項２に記載の画像処理装置。
【請求項６】
前記フィルタリング手段は、
前記エッジライン検出手段が検出したエッジラインに基づいて、複数のフレーム間でフレーム上の同じ位置に生じているエッジラインを検出する歪検出手段と、
前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行う歪除去手段とを備えることを特徴とする請求項１に記載の画像処理装置。
【請求項７】
前記エッジライン検出手段は、フレーム上で隣接する複数の画素の値を比較することで、エッジラインを検出することを特徴とする請求項１に記載の画像処理装置。
【請求項８】
ブロック歪みに起因するエッジラインを抑制する画像処理装置において、
フレームを構成する画素の値に基づいて、エッジラインを検出するエッジライン検出手段と、
前記エッジライン検出手段が検出したエッジラインのうち、ブロック歪みに起因するエッジラインを検出する歪検出手段と、
前記フレームの画像データに対して、前記歪検出手段が検出したエッジラインを抑制するフィルタリングを行うフィルタリング手段とを具備したことを特徴とする画像処理装置。
【請求項９】
前記歪検出手段は、前記エッジライン検出手段が検出したエッジラインのうち、前記フレーム上で周期的に生じている複数のエッジラインを、ブロック歪みに起因するエッジラインとして検出することを特徴とする請求項８に記載の画像処理装置。
【請求項１０】
前記歪検出手段は、前記エッジライン検出手段が検出したエッジラインのうち、前記フレーム上で発生する周期性が最も強い複数のエッジラインを、ブロック歪みに起因するエッジラインとして検出することを特徴とする請求項９に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、動画像の再生品質を改善する画像処理装置に関する。
【背景技術】
【０００２】
最近、インターネットを介したユーザ投稿型の動画視聴サイトが普及してきている。また、モバイル機器等でネット動画を視聴することも、日常行為として行われるようになってきている。動画像視聴サイトにアップロードされている動画像データは、比較的低画質であるものが多く、またブロック歪やモスキート歪に代表される符号化歪が重畳されやすいため、デコーダの出力映像に対して符号化歪除去フィルタなどを適用していた。
【０００３】
具体的には、動画視聴サイトに投稿されている動画のうち、H.263やMPEG-4で符号化されている動画は、エンコーダの性質上ブロック歪が目立ちやすく、ユーザに不快感を与えている。一般的にこのようなブロック歪は、符号化処理の境界に発生するため、取り除くことできる（例えば、非特許文献１参照）。
【０００４】
しかし、復号した直後の画像データや、符号化情報が得られない画像データの場合、ブロック歪の発生する間隔やその開始点が未知であるため、効果的にブロック歪を取り除くことができなかった。なお、符号化情報が得られない画像データは、デコーダがブラックボックスとなっており、例えばディスプレイ直前のフレームバッファからしか取得できない画像データである。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】大久保榮監修、角野眞也、菊池義浩、鈴木輝彦共編「H.264/AVC教科書」インプレス、２００４年８月１日、p.140-144 6.1「デブロッキングフィルタの役割」
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来の画像処理装置では、符号化のブロック間隔やブロックの開始点が未知である場合、ブロック歪が発生する位置が未知であるため、効果的にブロック歪を取り除くことができないという問題があった。  
この発明は上記の問題を解決すべくなされたもので、ブロック歪が発生する位置が未知であっても、効果的にブロック歪を除去することが可能な画像処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記の目的を達成するために、この発明は、ブロック歪みに起因するエッジラインを抑制する画像処理装置において、フレームを構成する画素の値に基づいて、エッジラインを検出するエッジライン検出手段と、エッジライン検出手段が検出したエッジラインに基づいて、フレームの画像データに対して、エッジラインを抑制するフィルタリングを行うフィルタリング手段とを具備して構成するようにした。
【発明の効果】
【０００８】
以上述べたように、この発明では、フレーム上に生じるエッジラインを検出し、これに基づいて、フレームの画像データに対して、エッジラインを抑制するフィルタリングを行うようにしている。  
したがって、この発明によれば、ブロック歪が発生する位置が未知であっても、効果的にブロック歪を除去することが可能な画像処理装置を提供できる。
【図面の簡単な説明】
【０００９】
【図１】この発明に係わる画像処理装置を適用した携帯電話機の構成を示す回路ブロック図。
【図２】この発明に係わる画像処理装置の構成を示す回路ブロック図。
【図３】図２に示した画像補正部の動作を説明するためのフローチャート。
【図４】図２に示した画像補正部のエッジ検出部の動作を説明するためのフローチャート。
【図５】図２に示した画像補正部のエッジ検出部の動作を説明するための図。
【図６】図２に示した画像補正部のエッジ検出部の動作を説明するためのフローチャート。
【図７】図２に示した画像補正部のブロック歪検出部の動作を説明するためのフローチャート。
【図８】図２に示した画像補正部の水平方向のデブロッキングフィルタ処理を説明するためのフローチャート。
【図９】図２に示した画像補正部の垂直方向のデブロッキングフィルタ処理を説明するためのフローチャート。
【図１０】図２に示した画像補正部のブロック歪除去部の動作を説明するためのフローチャート。
【発明を実施するための形態】
【００１０】
以下、図面を参照して、この発明の一実施形態について説明する。以下の説明では、この発明の一実施形態に係わる画像処理装置を、携帯電話機などの移動無線端末装置に適用した場合を例に挙げて説明する。  
図１は、この発明の一実施形態に係わる画像処理装置を適用した移動無線端末装置の構成を示すブロック図である。この移動無線端末装置は、図１に示すように、主な構成要素として、制御部１００と、無線通信部１０と、表示部２０と、通話部３０と、操作部４０と、記憶部５０と、放送受信部６０とを備え、基地局装置ＢＳおよび移動通信網ＮＷを介した通信と、放送局ＢＣから送信される地上デジタル放送信号を受信する機能を備える。
【００１１】
無線通信部１０は、制御部１００の指示にしたがって、移動通信網ＮＷに収容された基地局装置ＢＳと無線通信を行うものであって、これにより、音声データや電子メールデータなどの送受信、Ｗｅｂデータやストリーミングデータなどの受信を行う。  
表示部２０は、制御部１００の制御により、画像（静止画像および動画像）や文字情報などを表示して、視覚的にユーザに情報を伝達するものである。この発明では、この表示部２０で表示される動画像のブロック歪を効果的に目立たなくする。
【００１２】
通話部３０は、スピーカ３１やマイクロホン３２を備え、マイクロホン３２を通じて入力されたユーザの音声を制御部１００にて処理可能な音声データに変換して制御部１００に出力したり、無線通信部１０あるいは放送受信部６０により受信された音声データを復号してスピーカ３１から出力するものである。  
操作部４０は、複数のキースイッチなどを備え、これを通じてユーザから指示を受け付けるものである。
【００１３】
記憶部５０は、制御部１００の制御プログラムや制御データ、アプリケーションソフトウェア、通信相手の名称や電話番号などを対応づけたアドレスデータ、送受信した電子メールのデータ、ＷｅｂブラウジングによりダウンロードしたＷｅｂデータや、ダウンロードしたコンテンツデータを記憶し、またストリーミングデータなどを一時的に記憶するものである。なお、記憶部５０は、ＨＤＤ、ＲＡＭ、ＲＯＭ、ＩＣメモリなどの１つまたは複数の記憶手段を含むものである。
【００１４】
放送受信部６０は、放送局ＢＣから送信される地上デジタル放送信号のうち、ワンセグメントを受信し、映像信号が、例えばＨ．２６４などの形式で符号化された放送データ（符号化ストリーム）を得る。
【００１５】
制御部１００は、マイクロプロセッサを備え、記憶部５０が記憶する制御プログラムや制御ｄｃｓデータにしたがって動作し、当該移動無線端末装置の各部を統括して制御するものであって、無線通信部１０を通じて、音声通信やデータ通信を行うために、通信系の各部を制御するネットワーク通信制御機能と、アプリケーション処理機能を備える。
【００１６】
アプリケーション処理機能は、記憶部５０が記憶するアプリケーションソフトウェアにしたがって制御部１００が動作することにより、例えば、放送受信部６０を制御して地上デジタル放送を受信したり、電子メールの送受信や、Ｗｅｂブラウジングなどを行う。
【００１７】
そして、制御部１００は、地上デジタル放送から受信した受信データやダウンロードしたストリーミングデータなどの動画像データに基づいて、動画像を表示部２０に表示したりする動画像処理機能を備える。この動画像処理機能は、制御部１００が、上記動画像データを復号し、この復号結果に画像処理を施して、動画像を表示部２０に表示する。
【００１８】
この動画像処理機能を実現するために、制御部１００は、図２に示すように、動画像復号部１１０と、画像補正部１２０と、表示ドライバ１３０とを備える。なお、制御部１００は、動画像処理機能に並行して、オーディオデータを再生するための音声処理機能も備え、そのための構成としてオーディオデータ処理部（図示しない）も備える。
【００１９】
動画像復号部１１０は、上記動画像データとして符号化データ（Video Elementary Stream）が入力され、これを復号し、これによって複数の動画像フレームで構成される動画像データを得る。なお、以下の説明では、動画像フレームを構成する画素は、X-Y平面上に配列されているものとして説明する。なお、動画像フレームは、height×widthの解像度を有する。heightは、１フレームの縦画素数を示し、widthは、１フレームの横画素数を示す。
【００２０】
画像補正部１２０は、上記動画像データに基づいて、各動画像フレームのブロック歪みを除去した補正画像データを生成するものであって、エッジ検出部１２１と、エッジ情報記憶部１２２と、ブロック歪検出部１２３と、ブロック歪除去部１２４とを備え、図３に示すような処理を、各動画像フレームに対して実行する。  
なお、ステップ３ａおよびステップ３ｂの処理は、エッジ検出部１２１によって為され、ステップ３ｃの処理は、ブロック歪検出部１２３によって為される。また、ステップ３ｄの処理は、ブロック歪除去部１２４によって為される。
【００２１】
またエッジ情報記憶部１２２は、エッジ検出部１２１によって生成されたエッジ情報を記憶する。後に説明するが、エッジ情報には、フレーム毎に、エッジラインの存在を示す情報（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座標をそれぞれ示す。
【００２２】
まずステップ３ａにおいてエッジ検出部１２１は、処理対象の動画像フレームFtに対して、図４に示す処理を実施し、これにより、フレームFtを構成する画素毎にエッジを検出する。以下、図４を参照して、ステップ３ａの処理について説明する。
【００２３】
エッジ検出部１２１は、処理対象の画素P(x,y)（以下、対象画素P(x,y)と略称する）のY座標を0からheight未満まで可変する、ステップ４ａ〜４ｊのループ処理を実施する。またそしてエッジ検出部１２１は、上記ループ処理内において、対象画素P(x,y)のX座標を0からwidth未満まで可変する、ステップ４ｂ〜４ｉのループ処理を実施する。  
すなわち、エッジ検出部１２１は、処理対象の画素P(x,y)のY座標を１つインクリメントする毎に、X座標を0からwidth未満まで可変して、ステップ４ｃ〜４ｈの処理を実施し、これにより、動画像フレームFtを構成するすべての画素についてステップ４ｃ〜４ｈの処理を実施する。
【００２４】
ステップ４ｃにおいてエッジ検出部１２１は、例えば一般的な１次元フィルタを用いるなどして、対象画素P(x,y)について水平方向に隣接する画素P(x-1,y)および画素P(x+1,y)の輝度値の差分絶対値を水平方向のエッジの大きさedge_xとして検出し、ステップ４ｄに移行する。ステップ４ｄにおいてエッジ検出部１２１は、ステップ４ｃで検出したedge_xが、予め設定された閾値Pixel_Edge_Th以上であるか否かを判定する。ここで、edge_xが、閾値Pixel_Edge_Th以上である場合には、ステップ４ｅに移行し、一方、edge_xが、閾値Pixel_Edge_Th未満の場合には、ステップ４ｆに移行する。  
ステップ４ｅにおいてエッジ検出部１２１は、horizontal_edge_hist[x]に１を加算し、ステップ４ｆに移行する。なお、horizontal_edge_hist[x]は、図５に示すように、X座標がxの画素ライン上で検出した水平方向のエッジの数を示す。
【００２５】
ステップ４ｆにおいてエッジ検出部１２１は、ステップ４ｃと同様に１次元フィルタを用いるなどして、処理対象P(x,y)について水平方向に隣接する画素P(x,y-1)および画素P(x,y+1)の輝度値の差分絶対値を垂直方向のエッジの大きさedge_yとして検出し、ステップ４ｇに移行する。
【００２６】
ステップ４ｇにおいてエッジ検出部１２１は、ステップ４ｆで検出したedge_yが、予め設定された閾値Pixel_Edge_Th以上であるか否かを判定する。ここで、edge_yが、閾値Pixel_Edge_Th以上である場合には、ステップ４ｈに移行し、一方、edge_yが、閾値Pixel_Edge_Th未満の場合には、ステップ４ｉに移行する。  
ステップ４ｈにおいてエッジ検出部１２１は、vertical_edge_hist[y]に１を加算し、ステップ４ｉに移行する。なお、vertical_edge_hist[y]は、図５に示すように、Y座標がyの画素ライン上で検出した垂直方向のエッジ数を示す。また、図５の動画像フレーム内に示している“1”と“0”は、ステップ４ｄにおいてエッジの大きさが閾値以上であった場合に“1”、そうでない場合を“0”として表したものである。
【００２７】
次に、ステップ３ｂにおいてエッジ検出部１２１は、処理対象フレームFtに対して、図６に示す処理を実施して、ブロック歪みによって生じた可能性の高いエッジラインを検出する。なお、ここでエッジラインとは、エッジが同一画素ライン上に連続する状態のことをいう。
【００２８】
以下、図６を参照して、ステップ３ｂの処理について説明する。  
エッジ検出部１２１は、ステップ６ａ〜６ｅのループ処理を実施して、処理対象フレームFtに存在する水平方向にエッジラインを探索する。またその後、エッジ検出部１２１は、ステップ６ａ〜６ｅのループ処理と同様にして、ステップ６ｆ〜６ｊのループ処理を実施して、処理対象フレームFtに存在する垂直方向にエッジラインを探索する。
【００２９】
ステップ６ａにおいてエッジ検出部１２１は、０以上width未満の範囲で、x座標をインクリメントして、評価対象のラインLine[x]（以下、対象ラインLine[x]と略称する。）を決定し、ステップ６ｂに移行する。
【００３０】
ステップ６ｂにおいてエッジ検出部１２１は、対象ラインLine[x]のhorizontal_edge_hist[x]を参照し、その値が閾値Line_Edge_Th_X以上であるか否かを判定する。ここで、horizontal_edge_hist[x]の値が閾値Line_Edge_Th_X以上の場合には、ステップ６ｃに移行し、一方、閾値Line_Edge_Th_X未満の場合には、ステップ６ｄに移行する。なお、上記閾値Line_Edge_Th_Xは、例えば、予めwidth×0.5に設定しておく。
【００３１】
ステップ６ｃにおいてエッジ検出部１２１は、対象ラインLine[x]をエッジラインと見なし、エッジ情報記憶部１２２が記憶するhorizontal_edge_table[x,t]の値を０から１に更新し、ステップ６ｄに移行する。ここで、「０」は、エッジラインでないことを示すフラグであり、「１」エッジラインであることを示すフラグである。
【００３２】
ステップ６ｄにおいてエッジ検出部１２１は、エッジ情報記憶部１２２が記憶する複数のフレームのhorizontal_edge_table[x,T]（T=t-a,...,t：aは所定のフレーム数）に基づいて、対象ラインLine[x]がエッジラインと見なされた回数を再計算し、この結果をhorizontal_frame_edge_table[x,t]としてエッジ情報記憶部１２２に記録し、ステップ６ｅに移行する。すなわち、動画像フレームFt-aからFtまでのhorizontal_edge_table[x,T]を加算する。
【００３３】
ステップ６ｅにおいてエッジ検出部１２１は、処理対象フレームFtを構成する垂直方向のすべての画素ラインについて、ステップ６ｂ〜６ｄの処理をそれぞれ施したか否かを判定し、処理を施した場合には、ステップ６ｆに移行し、一方、施していない場合には、ステップ６ａに移行して、次の垂直方向の画素ラインについて上記処理を実行する。
【００３４】
ステップ６ｆにおいてエッジ検出部１２１は、０以上height未満の範囲で、y座標をインクリメントして、評価対象のラインLine[y]（以下、対象ラインLine[y]と略称する。）を決定し、ステップ６ｇに移行する。
【００３５】
ステップ６ｇにおいてエッジ検出部１２１は、対象ラインLine[y]のvertical_edge_hist[y]を参照し、その値が閾値Line_Edge_Th_Y以上であるか否かを判定する。ここで、vertical_edge_hist[y]の値が閾値Line_Edge_Th_Y以上の場合には、ステップ６ｈに移行し、一方、閾値Line_Edge_Th_Y未満の場合には、ステップ６ｉに移行する。なお、上記閾値Line_Edge_Th_Yは、例えば、予めheight×0.5に設定しておく。
【００３６】
ステップ６ｈにおいてエッジ検出部１２１は、対象ラインLine[y]をエッジラインと見なし、エッジ情報記憶部１２２が記憶するvertical_edge_table[y,t]の値を０から１に更新し、ステップ６ｉに移行する。ここで、「０」は、エッジラインでないことを示すフラグであり、「１」は、エッジラインであることを示すフラグである。
【００３７】
ステップ６ｉにおいてエッジ検出部１２１は、エッジ情報記憶部１２２が記憶する複数のフレームのvertical_edge_table[y,T]（T=t-a,...,t：aは所定のフレーム数）に基づいて、対象ラインLine[y]がエッジラインと見なされた回数を再計算し、この結果をvertical_frame_edge_table[y,t]としてエッジ情報記憶部１２２に記録し、ステップ６ｊに移行する。すなわち、動画像フレームFt-aからFtまでのvertical_edge_table[y,T]を加算する。
【００３８】
ステップ６ｊにおいてエッジ検出部１２１は、処理対象フレームFtを構成する水平方向のすべての画素ラインについて、ステップ６ｇ〜６ｉの処理をそれぞれ施したか否かを判定し、処理を施した場合には、当該処理を終了し、一方、施していない場合には、ステップ６ｆに移行して、次の水平方向の画素ラインについて上記処理を実行する。このような処理によって、図５に示すようにhorizontal_edge_table[x]とvertical_edge_table[y]の値が更新される。horizontal_edge_table[x]は、水平方向にエッジ探索を行った結果エッジが検出されたラインを”１”で示し、vertical_edge_table[y]は、垂直方向にエッジ探索を行った結果エッジが検出されたラインを”１”で示す。図５では、エッジラインを構成する画素（horizontal_edge_table[x]とvertical_edge_table[y]の少なくとも一方が”１”の画素）を斜線で示している。
【００３９】
次に、ステップ３ｃにおいてブロック歪検出部１２３は、処理対象フレームFtに対して、図７に示す処理あるいは図８に示す処理を実施して、ブロック歪みの位置を検出する。ブロック歪検出部１２３は、整数倍に拡大して画像を表示する場合には、図７に示す第１処理を実施し、一方、非整数倍に拡大して画像を表示する場合や縮小して画像を表示する場合は、図１０に示す第２処理を実施する。
【００４０】
まず、図７を参照して、第１処理について説明する。  
ブロック歪検出部１２３は、ステップ７ａ〜７ｉのループ処理を実施して、ブロック歪みによる垂直方向の歪ライン（以下、垂直方向ブロック歪みラインと称する。）を探索する。またその後、ブロック歪検出部１２３は、ステップ７ａ〜７ｉのループ処理と同様にして、ステップ７ｊ〜７ｒのループ処理を実施して、水平方向に並ぶブロック歪みの歪ライン（以下、水平方向ブロック歪みラインと称する。）を探索する。
【００４１】
ステップ７ａにおいてブロック歪検出部１２３は、０以上width未満の範囲で、x座標をインクリメントして、対象ラインLine[x]に対応するhorizontal_edge_table[x,t]をエッジ情報記憶部１２２から読み出し、ステップ７ｂに移行する。
【００４２】
ステップ７ｂにおいてブロック歪検出部１２３は、倍率１の際のブロック歪間隔である8以下の整数値(0,1,2,3,4,5,6,7)とx座標の論理積(x&0x7)が、１か否かの判定を行う。判定結果が１でない場合には、ステップ７ｃに移行し、１の場合にはステップ７ｋに移行する。
【００４３】
ステップ７ｃにおいてブロック歪検出部１２３は、ステップ７ａで読み出したhorizontal_edge_table[x,t]にフラグ「１」が設定されているか否かを判定する。すなわち、対象ラインLine[x]の画素ラインが、エッジラインとして判定されているか否かを判定する。ここで、フラグ「１」が設定されている場合には、ステップ７ｄに移行し、一方、フラグ「０」が設定されている場合には、ステップ７kに移行する。
【００４４】
ステップ７ｄでは、check_flag[x&0x7]の値を１に変更する。  
つづいて、ブロック歪検出部１２３は、ステップ７ｅ〜ステップ７ｈのループ処理を実施する。
【００４５】
ステップ７ｅにおいてブロック歪検出部１２３は、対象ラインx＆0x7を基点に、width未満の範囲で、パラメータiを画素間隔dだけインクリメントした値に設定し、ステップ７ｆに移行する。なお、画素間隔dは、ブロック歪みのサイズに相当し、実施例では8とする。
【００４６】
ステップ７ｆにおいてブロック歪検出部１２３は、horizontal_edge_table[i,t]にフラグ「１」が設定されているか否かを判定する。すなわち、対象ラインLine[x]からｄ×ｎ（ｎは自然数）だけシフトした位置の画素ラインLine[i]が、エッジラインとして判定されているか否かを判定する。ここで、フラグ「１」が設定されている場合には、ステップ７ｇに移行し、一方、フラグ「０」が設定されている場合には、ステップ７ｈに移行する。
【００４７】
ステップ７ｇにおいてブロック歪検出部１２３は、horizontal_line_hist[x&0x7]に「１」を加算し、ステップ７ｈに移行する。  
ステップ７ｈにおいてブロック歪検出部１２３は、パラメータi+dがwidth以上になる場合には、ステップ７ｅ〜７ｈのループ処理を終了してステップ７ｉに移行し、一方、超えない場合には、上記ループ処理を継続しステップ７ｅに移行する。
【００４８】
すなわち、ステップ７ｅ〜７ｈのループ処理では、図６に示したステップ３ｂの検出結果（エッジ情報）に基づいて、エッジラインである画素ラインLine[i]を基準に、dの倍数の画素ライン毎に、垂直のエッジラインが存在する数をカウントしたヒストグラムhorizontal_line_hist[x&0x7]を生成する。
【００４９】
例えば、画素間隔d=8で、x=0すなわち対象ラインLine[0]の場合、パラメータiを8, 16, 24,…,64,…と変化させ、horizontal_edge_table[i,t]にフラグ「１」が設定されている場合に、ヒストグラムhorizontal_line_hist[x&0x7]に１を加算する。
【００５０】
ステップ７ｉにおいてブロック歪検出部１２３は、horizontal_line_hist[x&0x7]がmax_hist_Xを超えるか否かを判定する。なお、max_hist_Xの初期値は０とする。ここで、horizontal_line_hist[x&0x7]がmax_hist_Xを超える場合には、ステップ７ｊに移行し、一方、超えない場合には、ステップ７ｋに移行する。
【００５１】
ステップ７ｊにおいてブロック歪検出部１２３は、max_hist_Xをhorizontal_line_hist[x&0x7]で更新するとともに、基準ラインbase_line_xを対象ラインx&0x7に設定して、ステップ７ｋに移行する。すなわち、ステップ７ｊでは、ブロック歪みによって周期的に生じている可能性が最も高い垂直方向ブロック歪みラインを検出し、その位置を特定する。
【００５２】
ステップ７ｋにおいてブロック歪検出部１２３は、パラメータxをインクリメントした場合に、その値がwidth以上になる場合には、ステップ７ａ〜７ｋのループ処理を終了してステップ７ｌに移行し、一方、超えない場合には、上記ループ処理を継続しステップ７ａに移行する。
【００５３】
ステップ７ｌにおいてブロック歪検出部１２３は、０以上height未満の範囲で、y座標をインクリメントして、対象ラインLine[y]に対応するvertical_edge_table[y,t]をエッジ情報記憶部１２２から読み出し、ステップ７ｍに移行する。
【００５４】
ステップ７ｍにおいてブロック歪検出部１２３は、倍率１の際のブロック歪間隔である8以下の整数値(0,1,2,3,4,5,6,7)とy座標の論理積(y&0x7)が、１か否かの判定を行う。判定結果が１でない場合には、ステップ７ｎに移行し、１の場合にはステップ７ｖに移行する。
【００５５】
ステップ７ｎにおいてブロック歪検出部１２３は、ステップ７ｌで読み出したvertical_edge_table[y,t]にフラグ「１」が設定されているか否かを判定する。すなわち、対象ラインLine[y]の画素ラインが、エッジラインとして判定されているか否かを判定する。ここで、フラグ「１」が設定されている場合には、ステップ７ｏに移行し、一方、フラグ「０」が設定されている場合には、ステップ７ｖに移行する。
【００５６】
つづいて、ブロック歪検出部１２３は、ステップ７ｐ〜ステップ７ｓのループ処理を実施する。
【００５７】
ステップ７ｏでは、check_flag[y&0x7]の値を１に変更する。  
ステップ７ｐにおいてブロック歪検出部１２３は、対象ラインx＆0x7を基点に、height未満の範囲で、パラメータiを画素間隔dだけインクリメントした値に設定し、ステップ７ｑに移行する。なお、画素間隔dは、ブロック歪みのサイズに相当し、実施例では8とする。
【００５８】
ステップ７ｑにおいてブロック歪検出部１２３は、vertical_edge_table[i,t]にフラグ「１」が設定されているか否かを判定する。すなわち、対象ラインLine[y]からｄ×ｎ（ｎは自然数）だけシフトした位置の画素ラインLine[i]が、エッジラインとして判定されているか否かを判定する。ここで、フラグ「１」が設定されている場合には、ステップ７ｒに移行し、一方、フラグ「０」が設定されている場合には、ステップ７ｓに移行する。
【００５９】
ステップ７ｒにおいてブロック歪検出部１２３は、vertical_line_hist[y&0x7]に「１」を加算し、ステップ７ｓに移行する。  
ステップ７ｓにおいてブロック歪検出部１２３は、パラメータi+dがheight以上になる場合には、ステップ７ｐ〜７ｓのループ処理を終了してステップ７ｔに移行し、一方、超えない場合には、上記ループ処理を継続しステップ７ｐに移行する。
【００６０】
すなわち、ステップ７ｐ〜７ｓのループ処理では、図６に示したステップ３ｂの検出結果（エッジ情報）に基づいて、エッジラインである画素ラインLine[i]を基準に、dの倍数の画素ライン毎に、水平のエッジラインが存在する数をカウントしたヒストグラムvertical_line_hist[y&0x7]を生成する。
【００６１】
例えば、画素間隔d=8で、y=0すなわち対象ラインLine[0]の場合、パラメータiを8, 16, 24,…,64,…と変化させ、vertical_edge_table[i,t]にフラグ「１」が設定されている場合に、ヒストグラムvertical_line_hist[y&0x7]に１を加算する。
【００６２】
ステップ７ｔにおいてブロック歪検出部１２３は、vertical_line_hist[y&0x7]がmax_hist_Yを超えるか否かを判定する。なお、max_hist_Yの初期値は０とする。ここで、vertical_line_hist[y&0x7]がmax_hist_Yを超える場合には、ステップ７ｕに移行し、一方、超えない場合には、ステップ７ｖに移行する。
【００６３】
ステップ７ｕにおいてブロック歪検出部１２３は、max_hist_Yをvertical_line_hist[y&0x7]で更新するとともに、基準ラインbase_line_yを対象ラインy&0x7に設定して、ステップ７ｖに移行する。すなわち、ステップ７ｕでは、ブロック歪みによって周期的に生じている可能性が最も高い水平方向ブロック歪みラインを検出し、その位置を特定する。
【００６４】
ステップ７ｖにおいてブロック歪検出部１２３は、パラメータyをインクリメントした場合に、その値がheight以上になる場合には、ステップ７ｌ〜７ｖのループ処理を終了してステップ７ｗに移行し、一方、超えない場合には、上記ループ処理を継続しステップ７ｌに移行する。
【００６５】
ブロック歪検出部１２３は、ステップ７ｗでデブロッキングフィルタ単位推定処理を行う。このデブロッキングフィルタ処理単位推定処理とは、上記ステップで求めた基準ラインbase_line_x, base_line_yに基づいてブロック歪の間隔を推定する処理である。
【００６６】
具体的には、基準ラインから、間隔ｄにおけるヒストグラムを作成し、最大ヒストグラムを有する間隔をデブロッキングフィルタ処理単位とする。具体的な処理のフローチャートを図８と図９に例示する。図８は、水平方向のデブロッキングフィルタ処理であり、図９は、垂直方向のデブロッキングフィルタ処理である。
【００６７】
図８を用いて水平方向のデブロッキングフィルタ処理について説明する。この処理では、たとえば、デブロッキングフィルタ処理単位候補を2,4,8,16,24,32とする。つまり図８のidx[i]={2,4,8,16,24,32}とし、デブロッキングフィルタ処理単位候補数をIdxとする。
【００６８】
まず、ブロック歪検出部１２３は、ステップ８ａにおいて、ヒストグラムのカウントを初期化する。そして、ステップ８ｂにおいて、変数ｉを０からIdxまでの範囲で１ずつインクリメントした値に設定して、ステップ８ｂからステップ８ｈの処理を繰り返す。
【００６９】
ステップ８ｃでは、変数ｄにｉ番目のデブロッキングフィルタ処理単位候補の値idx[i]を設定する。そして、ステップ８ｄでは、基準ラインbase_line_xを基点に、width未満の範囲で、パラメータｉを画素間隔ｄだけインクリメントした値に設定して、ステップ８ｄからステップ８ｇの処理を繰り返す。
【００７０】
ステップ８ｅでは、horizontal_edge_table[x]が１であるか否かを判定し、horizontal_edge_table[x]が１であれば、当該デブロッキングフィルタ処理単位候補のヒストグラムhist_by_dに１を加算する。
【００７１】
例えば、デブロッキングフィルタ処理単位候補としてide[0]（つまり、２）を選択している場合には、ステップ８ｄからステップ８ｇの処理において、基準ラインから２ラインごとのラインのうち、エッジラインと判断されているライン数をカウントしたヒストグラムhist_by_2を作成する。
【００７２】
全てのデブロッキングフィルタ処理単位候補に対してヒストグラムを作成する処理が終了すると、ステップ８ｉにおいて、そのヒストグラムが最大となる間隔を水平方向デブロッキングフィルタ処理単位とする。このような処理を行うことで1/4〜4倍までの拡大率におけるデブロッキングフィルタ処理単位の検出を行うことができる。
【００７３】
なお、図９に示した垂直方向のデブロッキングフィルタ処理は、図８に示した水平方向のデブロッキングフィルタ処理と方向が異なるだけで同様の処理であるため、説明を省略する。
【００７４】
ステップ７xにおいてブロック歪検出部１２３は、上記ステップで求めた水平方向にデブロッキングする水平方向処理単位と、垂直方向にデブロッキングする垂直方向処理単位が等しくないかを確認する。ここで、上記処理単位が等しくない場合には、ステップ７yに移行し、一方、上記処理単位が等しい場合には、いずれかの処理単位を実際に適用する処理単位として採用し、当該処理を終了する。
【００７５】
ステップ７yにおいてブロック歪検出部１２３は、水平方向処理単位と、垂直方向処理単位を調整し、当該処理を終了する。例えば、水平方向処理単位と、垂直方向処理単位のうち、小さい方の処理単位を実際に適用する処理単位として採用する。
【００７６】
次に、図１０を参照して、第２処理について説明する。  
ブロック歪検出部１２３は、ステップ１０ａ〜１０ｅのループ処理を実施して、各x座標のhorizontal_frame_edge_table[x]を参照し、動画像フレームFt-aからFtまでの間の動画像フレームの対象ラインLine[x]にエッジラインが生じていた数をカウントする。
【００７７】
まず、ステップ１０ａにおいてブロック歪検出部１２３は、０以上width未満の範囲で、x座標をインクリメントして、対象ラインLine[x]を決定し、ステップ１０ｂに移行する。
【００７８】
ステップ１０ｂにおいてブロック歪検出部１２３は、対象ラインLine[x]のhorizontal_frame_edge_table[x]を参照し、その値が閾値a-1（aは、参照したフレーム数）以上であるか否かを判定する。ここで、horizontal_frame_edge_table[x]の値が閾値a-1以上の場合には、ステップ１０ｄに移行し、一方、閾値a-1未満の場合には、ステップ１０ｃに移行する。
【００７９】
ステップ１０ｃにおいてブロック歪検出部１２３は、horizontal_frame_edge_table[x]の値を「０」にリセットし、ステップ１０ｅに移行する。  
一方、ステップ１０ｄにおいてブロック歪検出部１２３は、パラメータcountに「１」を加算し、ステップ１０ｅに移行する。
【００８０】
ステップ１０ｅにおいてブロック歪検出部１２３は、処理対象フレームFtを構成する垂直方向のすべての画素ラインについて、ステップ１０ｂ〜１０ｄの処理を施したか否かを判定し、処理を施した場合には、ステップ１０ｆに移行し、一方、施していない場合には、ステップ１０ａに移行して、次の垂直方向の画素ラインについて上記処理を実行する。
【００８１】
ステップ１０ｆにおいてブロック歪検出部１２３は、パラメータcountの値が、予め設定した閾値h_frame_hist_th以上であるか否かを判定する。ここで、パラメータcountの値が、上記閾値h_frame_hist_th以上の場合には、ステップ１０ｇに移行し、一方、上記閾値h_frame_hist_th未満の場合には、ステップ１０ｋに移行する。
【００８２】
なお、上記閾値h_frame_hist_thは、表示部２０のパネルサイズ（解像度Ｘ-Y）とその時点で表示する画像サイズなどからブロック歪検出部１２３が決定する。例えば、画像サイズが320x240の場合、通常ブロック歪は40（=320/8）にライン発生する。しかし、ビットレートや絵柄によっては、ブロック歪みが発生しないため、上記閾値h_frame_hist_thは半分の20に設定すればよい。後述する垂直方向の閾値v_frame_hist_thも同様である。
【００８３】
ブロック歪検出部１２３は、ステップ１０ｇ〜１０ｊのループ処理を実施して、各x座標のhorizontal_frame_edge_table[x]を参照し、デブロッキングフィルタを適用する垂直方向の画素ラインを決定する。  
まず、ステップ１０ｇにおいてブロック歪検出部１２３は、０以上width未満の範囲で、x座標をインクリメントして、対象ラインLine[x]を決定し、ステップ１０ｈに移行する。
【００８４】
ステップ１０ｈにおいてブロック歪検出部１２３は、horizontal_frame_edge_table[x]の値が「０」でないか判定する。ここで、horizontal_frame_edge_table[x]の値が「０」ではない場合には、ステップ１０ｉに移行し、一方、「０」の場合には、ステップ８ｊに移行する。
【００８５】
ステップ１０ｉにおいてブロック歪検出部１２３は、対象ラインLine[x]にデブロッキングフィルタを適用するために、deblocking_line_horizontal[x]に「１」を設定し、ステップ１０ｊに移行する。
【００８６】
ステップ１０ｊにおいてブロック歪検出部１２３は、処理対象フレームFtを構成する垂直方向のすべての画素ラインについて、ステップ１０ｈ〜１０ｉの処理をそれぞれ施したか否かを判定し、処理を施した場合には、ステップ１０ｋに移行し、一方、施していない場合には、ステップ１０ｇに移行して、次の垂直方向の画素ラインについて上記処理を実行する。
【００８７】
つづいて、ブロック歪検出部１２３は、ステップ１０ｋ〜１０ｏのループ処理を実施して、各y座標のvertical_frame_edge_table[y]を参照し、動画像フレームFt-aからFtまでの間の動画像フレームの対象ラインLine[y]にエッジラインが生じていた数をカウントする。
【００８８】
まず、ステップ１０ｋにおいてブロック歪検出部１２３は、０以上height未満の範囲で、y座標をインクリメントして、対象ラインLine[y]を決定し、ステップ１０ｌに移行する。
【００８９】
ステップ１０ｌにおいてブロック歪検出部１２３は、対象ラインLine[y]のvertical_frame_edge_table[y]を参照し、その値が閾値a-1（aは、参照したフレーム数）以上であるか否かを判定する。ここで、vertical_frame_edge_table[y]の値が閾値a-1以上の場合には、ステップ１０ｎに移行し、一方、閾値a-1未満の場合には、ステップ１０ｍに移行する。
【００９０】
ステップ１０ｍにおいてブロック歪検出部１２３は、vertical_frame_edge_table[y]の値を「０」にリセットし、ステップ１０ｏに移行する。  
一方、ステップ１０ｎにおいてブロック歪検出部１２３は、パラメータcountに「１」を加算し、ステップ１０ｏに移行する。
【００９１】
ステップ１０ｏにおいてブロック歪検出部１２３は、処理対象フレームFtを構成する水平方向のすべての画素ラインについて、ステップ１０ｌ〜１０ｎの処理を施したか否かを判定し、処理を施した場合には、ステップ１０ｐに移行し、一方、施していない場合には、ステップ１０ｋに移行して、次の水平方向の画素ラインについて上記処理を実行する。
【００９２】
ステップ１０ｐにおいてブロック歪検出部１２３は、パラメータcountの値が、予め設定した閾値v_frame_hist_th以上であるか否かを判定する。ここで、パラメータcountの値が、上記閾値v_frame_hist_th以上の場合には、ステップ１０ｑに移行し、一方、上記閾値v_frame_hist_th未満の場合には、当該処理を終了する。
【００９３】
ブロック歪検出部１２３は、ステップ１０ｑ〜１０ｔのループ処理を実施して、各y座標のvertical_frame_edge_table[y]を参照し、デブロッキングフィルタを適用する水平方向の画素ラインを決定する。  
まず、ステップ１０ｑにおいてブロック歪検出部１２３は、０以上height未満の範囲で、y座標をインクリメントして、対象ラインLine[y]を決定し、ステップ１０ｒに移行する。
【００９４】
ステップ１０ｒにおいてブロック歪検出部１２３は、vertical_frame_edge_table[y]の値が「０」でないか判定する。ここで、vertical_frame_edge_table[y]の値が「０」ではない場合には、ステップ１０ｓに移行し、一方、「０」の場合には、ステップ１０ｔに移行する。
【００９５】
ステップ１０ｓにおいてブロック歪検出部１２３は、対象ラインLine[y]にデブロッキングフィルタを適用するために、deblocking_line_vertical[y]に「１」を設定し、ステップ１０ｔに移行する。
【００９６】
ステップ１０ｔにおいてブロック歪検出部１２３は、処理対象フレームFtを構成する水平方向のすべての画素ラインについて、ステップ１０ｒ〜１０ｓの処理をそれぞれ施したか否かを判定し、処理を施した場合には、当該処理を終了し、一方、施していない場合には、ステップ１０ｑに移行して、次の水平の画素ラインについて上記処理を実行する。
【００９７】
ステップ３ｄでは、ブロック歪除去部１２４が、図７もしくは図１０に示したステップ３ｃの処理結果に基づいて、処理対象フレームFtの動画像データに対して、デブロッキング処理を施して、ブロック歪みラインを除去し、補正画像データを得る。
【００９８】
具体的には、ステップ３ｃで図７の処理を実施した場合には、ステップ７ｙで求めた処理単位と、ステップ７ｊで特定した垂直方向ブロック歪みラインの位置に基づいて、垂直方向のブロック歪みラインを除去するとともに、上記処理単位と、ステップ７ｕで特定した水平方向ブロック歪みラインの位置に基づいて、水平方向のブロック歪みラインを除去する。
【００９９】
一方、ステップ３ｃで図１０の処理を実施した場合には、ステップ１０ｉでフラグ「１」を設定したdeblocking_line_horizontal[x]の位置に基づいて、垂直方向のブロック歪みラインを除去するとともに、同様に、ステップ１０ｓでフラグ「１」を設定したdeblocking_line_vertical[y]の位置に基づいて、水平方向のブロック歪みラインを除去する。
【０１００】
なお、デブロッキングフィルタは、Ｈ．２６４のように画像の品質を表すＱＰを利用しブロックごとにフィルタ強度を可変とする手法を適用してもよいし、画面均一なフィルタ強度を用いる手法を適用してもよい。  
表示ドライバ１３０は、上記補正画像データをバッファし、このデータに基づいて、表示部２０を駆動制御し、動画像を表示部２０に表示する。
【０１０１】
以上のように、上記構成の画像処理装置では、垂直方向と水平方向のそれぞれにおいて、エッジラインを検出し、このエッジラインの位置に基づいてデブロッキング処理を実施するようにしている。  
したがって、上記構成の画像処理装置によれば、ブロック歪が発生する位置が未知であっても、効果的にブロック歪を除去することができる。
【０１０２】
またこの発明では、図７で説明した処理により、上記検出したエッジラインのうち、動画像フレーム上で、所定の画素間隔で周期的に現れるエッジラインを特定して、ブロック歪みによって生じた可能性の高いエッジラインを検出し、その位置に基づいてデブロッキング処理を実施するようにしている。このため、ブロック歪みによって生じた可能性の高いエッジラインに対して、デブロッキングフィルタを適用できる。
【０１０３】
さらにこの発明では、図１０で説明した処理により、上記検出したエッジラインのうち、複数の動画像フレームにわたって同じ画素ラインに現れるエッジラインを特定して、ブロック歪みによって生じた可能性の高いエッジラインを検出し、その位置に基づいてデブロッキング処理を実施するようにしている。このため、ブロック歪みによって生じた可能性の高いエッジラインに対して、デブロッキングフィルタを適用できる。
【０１０４】
なお、この発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また上記実施形態に開示されている複数の構成要素を適宜組み合わせることによって種々の発明を形成できる。また例えば、実施形態に示される全構成要素からいくつかの構成要素を削除した構成も考えられる。さらに、異なる実施形態に記載した構成要素を適宜組み合わせてもよい。  
その他、この発明の要旨を逸脱しない範囲で種々の変形を施しても同様に実施可能であることはいうまでもない。
【符号の説明】
【０１０５】
１０…無線通信部、２０…表示部、３０…通話部、３１…スピーカ、３２…マイクロホン、４０…操作部、５０…記憶部、６０…放送受信部、１００…制御部、１１０…動画像復号部、１２０…画像補正部、１２１…エッジ検出部、１２２…エッジ情報記憶部、１２３…ブロック歪検出部、１２４…ブロック歪除去部、１３０…表示ドライバ、ＢＣ…放送局、ＢＳ…基地局装置、ＮＷ…移動通信網。
【図１】
2011071596.tif 000003
【図２】
2011071596.tif 000004
【図３】
2011071596.tif 000005
【図４】
2011071596.tif 000006
【図５】
2011071596.tif 000007
【図６】
2011071596.tif 000008
【図７】
2011071596.tif 000009
【図８】
2011071596.tif 000010
【図９】
2011071596.tif 000011
【図１０】
2011071596.tif 000012