(57)【要約】      （修正有）【課題】  各カラー画像から、ＪＰＥＧ圧縮のアーチファクトを除去する。【解決手段】  第一の調査段階にて、上記画像に対するアーチファクト除去が適切か否かを、幾つかのアプローチ方法に基づき決定することが行われ、そのような調査とその結果に続いて、上記画像に対するアーチファクト除去が適切であるとき、上記画像の各画素ブロックは、ユニフォーム、ビジー、又はトランジションとして特性付けられるように調べられ、その特性付けから、挿入される適切なフィルタ又はフィルタ無しが採用されて、上記各画素を、最終的に、アーチファクトが除去されたカラー画像に調整して、出力する。【選択図】  図１
2004173248.tif 000002
【特許請求の範囲】
【請求項１】
選択されデータ圧縮された、印刷可能なオリジナル画像に対するアーチファクト除去方法であって、
上記オリジナル画像のファイルサイズを決定し、
上記決定されたファイルサイズと、選択されたファイルサイズしきい値とを比較し、
上記決定されたファイルサイズが、上記選択されたファイルサイズしきい値以下のときのみ、上記オリジナル画像を、アーチファクト除去の候補として特徴付ける、コンピュータ処理可能なアーチファクト除去方法。
【請求項２】
上記オリジナル画像を、アーチファクト除去の候補として特徴付けた後、
さらに、アーチファクト除去を実行する、請求項１の方法。
【請求項３】
選択されデータ圧縮された、印刷可能なオリジナル画像に対するアーチファクト除去方法であって、
上記オリジナル画像のファイルサイズを決定し、
上記オリジナル画像の画素数を決定し、
上記決定されたファイルサイズに対し、上記決定された画素数を数学的に乗じて、ファイルサイズ・画素数の積算結果を生成し、
上記の積算されたファイルサイズ・画素数の積算結果を、選択されたしきい値と比較し、
上記の積算されたファイルサイズ・画素数の積算結果が、選択されたしきい値以下のときのみ、アーチファクト除去を実行する、コンピュータ処理可能なアーチファクト除去方法。
【請求項４】
上記アーチファクト除去は、
上記オリジナル画像を、１つの輝度と２つのクロミナンスの各チャンネルに分離し、
上記輝度チャンネルを、２つのローパスフィルタの各カーネルによりフィルタ処理することを含み、
上記各カーネルは、(a) デリンギングされた輝度画像を生成し、格納するためのデリンギングカーネルと、(b) デブロッキング輝度画像を生成し、格納するためのデブロッキングカーネルとを有し、
上記輝度のチャンネルを、選択された複数の画素ブロック又は画素領域に分離し、
上記各画素ブロック又は各画素領域から、２つの各アレイ／マップを生成し、上記各アレイ／マップは、(a) 画素ブロックの分散マップと、(b) 画素ブロック毎のロジックマップとを含み、上記ロジックマップは、上記分散マップにて展開される分散情報から、それぞれ、相互の排他的な(a) ビジー、(b) トランジション、又は(c) ユニフォームに、複数の各画素ブロックを特性付けるものであり、
上記ロジックマップにて上述したように生成された、画素ブロック毎の情報をガイドとして利用して、処理された輝度画像を生成するため、(a) 上記オリジナル輝度画像、(b) 上記のデリンギングされた輝度画像、及び(c) 上記のデブロッキングされた輝度画像から、排他的に、関連した各画素ブロックを選択し、
エンハンスメント処理された輝度画像を得るため、上記分散マップに含まれる上記画素ブロックの情報に基づいて、輝度エンハンスメントを上記処理された輝度画像に施し、
アーチファクトが処理された、印刷可能な画像を出力するため、上記エンハンスメント処理された輝度画像と、以前に分離された２つの各クロミナンスチャンネルとを結合する、請求項３の方法。
【請求項５】
選択されデータ圧縮された、印刷可能なオリジナル画像に対する視覚的なアーチファクトを除去及び／又は低減する、非コンピュータプラットフォームに特有な処理方法であって、
上記オリジナル画像に対しアーチファクト処理が実行されるべきか否かを決定するため、上記オリジナル画像を選択された画像判断基準により調べ、その調べた結果、アーチファクト処理が実行されるべきとき、
上記オリジナル画像を、１つの輝度と２つのクロミナンスの各チャンネルに分離し、
上記輝度チャンネルを、２つのローパスフィルタの各カーネルによりフィルタ処理することを含み、
上記各カーネルは、(a) デリンギングされた輝度画像を生成し、格納するためのデリンギングカーネルと、(b) デブロッキング輝度画像を生成し、格納するためのデブロッキングカーネルとを有し、
上記輝度チャンネルを、選択された複数の画素ブロック又は画素領域に分離し、
各画素ブロック又は各画素領域から、２つの各アレイ／マップを生成し、上記各アレイ／マップは、(a) 画素ブロックの分散マップと、(b) 画素ブロック毎のロジックマップとを含み、上記ロジックマップは、上記分散マップにて展開される分散情報から、それぞれ、相互の排他的な(a) ビジー、(b) トランジション、又は(c) ユニフォームに、複数の各画素ブロックを特性付けるものであり、
上記ロジックマップにて上述したように生成された、画素ブロック毎の情報をガイドとして利用して、処理された輝度画像を生成するため、(a) 上記オリジナルの輝度画像、(b) 上記のデリンギングされた輝度画像、及び(c) 上記のデブロッキングされた輝度画像から、排他的に、関連した各画素ブロックを選択し、
エンハンスメント処理された輝度画像を得るため、上記分散マップに含まれる上記画素ブロックの情報に基づいて、輝度エンハンスメントを上記処理された輝度画像に施し、
アーチファクトが処理された、印刷可能な、総体的な画像を出力するため、上記エンハンスメント処理された輝度画像と、以前に分離された２つの各クロミナンスチャンネルとを結合する、コンピュータ処理可能な、アーチファクトを除去及び／又は低減する方法。
【請求項６】
選択されデータ圧縮された、印刷可能なオリジナル画像に対するアーチファクト除去に関する方法であって、
アーチファクト除去を発動するか否かに関する評価をまず行い、上記評価は、ＦがＫバイトでの上記オリジナル画像のファイルサイズであり、ＰがＫ画素での上記オリジナル画像の画素数であり、Ｍがユーザ規定の印刷時に用いる拡大率であり、θが規定されたしきい値であるとき、Ｆ×Ｐ／Ｍ＝θの計算結果に基づくものであり、
Ｆ×Ｐ／Ｍ≦θのとき、上記アーチファクト除去を発動する、コンピュータ処理可能な、アーチファクトの除去に関する方法。
【請求項７】
上記アーチファクト除去の発動は、
選択された各画素領域を、連続的に検査し、(a) ユニフォーム／均質な領域、(b) 隣接している各画素領域それら自体ではかなり異なった画素特性により大きく相違するトランジション性を示す領域、及び(c) 内部での分散がハイレベルな領域を有するグループから選択される、相互に排他的な、一般的な各特性に特性付けることを含む、請求項６の方法。
【請求項８】
検査のための各領域の選択は、互いに隣接する各領域からなる、選ばれた各近隣クラスタを調べることを含む、請求項７の方法。
【請求項９】
アーチファクト除去（ＡＲ）の発動のために、コンピュータ処理可能な、データ圧縮された、印刷可能な画像を評価する方法であって、
各オペランドとして用いるインデックス数Ｉ、上記画像のファイルサイズ（Ｆ）、画素総数（Ｐ）、所望された最終的な印刷される上記画像の拡大率（Ｍ）を計算し、
ＩとＡＲ発動トリガー値θとを比較し、
Ｉがθに対し、所定の関係を有する条件下にてＡＲを発動する、方法。
【請求項１０】
Ｉの計算は、Ｆ、Ｐ、Ｍを有する比の計算を含む、請求項９の方法。
【請求項１１】
上記比は、Ｆ×Ｐ／Ｍである、請求項１０の方法。
【請求項１２】
Ｉ＝Ｆ×Ｐ／Ｍである、請求項１１の方法。
【請求項１３】
上記所定の関係は、Ｉ≦θである請求項１２の方法。
【発明の詳細な説明】
【発明の詳細な説明】
【０００１】
概略的な序文（General Introduction）
本発明は、カラー画像からＪＰＥＧ-圧縮の際のアーチファクト除去に関し、特に、アーチファクト除去が実行されるべきか否かを、(a) ファイルサイズ、画素数、所望された拡大率を各インディケータとして見て評価した後、除去が実行されるべき場合、(b) ユニフォーム性、トランジション性（各エッジに生じている様な）、一般的なビジー性を含む、選択された領域の画像特性を見た評価に基づき、上記除去を達成するためのシステム及び方法に関するものである。
【０００２】
本発明は、特に、ユーザが、比較的簡便で、かなり洗練されて有効なアーチファクト除去方法により印刷することを望む画像に対し、アーチファクト除去を実行するのを可能にする、現状にて高まっている関心に対応するものである。
【０００３】
本発明のシステムと方法は、本明細書での、各実施の形態やベストモードでの好ましい形態により記述され図示されている。
【０００４】
本発明の詳細な説明
１．背景技術
リンギングやブロッキングの各アーチファクトは、従来の採用されたＪＰＥＧ圧縮アルゴリズムからの結果として生じる画像成分であることはよく知られている。
【０００５】
各画素（pixels）からなる８×８の各ブロックが複数からなるものとしてカラー画像（color image）、及び、ＪＰＥＧがその圧縮を実行するフォーマットについて考察すると、高圧縮が必要であるとき、従来のＪＰＥＧアルゴリズムは、上記のような基本的な８×８の各ブロックに含まれる情報（information）をより量子化する。
【０００６】
多くの場合、上記量子化により生成されるアーチファクト（artifact、副生成物）の影響は、コンピュータにて処理されるカラー画像において非常に目立つものである。よって、視覚的に影響する上記アーチファクトを効果的に除去する簡便で優れた解決法が求められている。
【０００７】
２．本発明の概略
本発明は、２つの新規な各ステージでの方法を実行することにより、上述したアーチファクト除去の解決策を提供する。最初のステージの方法は、アーチファクト除去を発動するか否かに関して、選択され、ＪＰＥＧ圧縮されたカラー画像に対する評価を実行することを含み、二番目のステージでは、アーチファクト除去の発動の決定がポジティブ（positive）のとき、アーチファクト除去を実行する。
【０００８】
上記二番目のステージまたはフェーズは、３つのカテゴリである、所定の規定された各特性に、互いに相違する８×８の各画素ブロックを特性付けるために、上記画像の輝度チャンネルを調べることを含む。上記各カテゴリは、本明細書では、ユニフォーム、トランジション、及びビジーと呼ばれる。
【０００９】
上記ユニフォームの特性は、画素の分散（variance）において、画素が、その内部にて、及び近隣の各画素ブロックに対して均一性を保持することが観察されるブロックに適用されるものである。
【００１０】
上記トランジションの特性は、高い分散を有する各画素ブロックを備えた領域と、それに隣接して、ユニフォーム領域と同様な低い分散を有する各画素ブロックを備えた領域とが存在する画像部分、特に上記画像のエッジに適用されるものである。。
【００１１】
また、この同じ(トランジションな)特性は、いくらか、各画像エッジでの遷移のような、画像内部の領域遷移に適用することができる。
【００１２】
上記ビジーの特性は、上述したＪＰＥＧのリンギングアーチファクト及びブロッキングアーチファクトでさえ視覚的に検知されないような視覚フィールドといった、画素の極めて高い分散、複雑性が存在する各画素ブロック及びそれらに近隣する各画素ブロックとを含む。
【００１３】
後述する評価（assessment）を実行するため、本明細書にて提案された３つの互いに相違する、特有の各特性の何れかについての画像の調査に基づき、アーチファクト除去を実行することが決定されたとき、上記画像の１つの輝度チャンネルが、２つの各クロミナンスチャンネルから分離されて、輝度による各画像の３種の特性が決定され、アーチファクトが除去された画像の最終的な出力が生成される。
【００１４】
これらの輝度ベースの各画像の１つは、確かに、上記の元のオリジナル画像、それ自体の、フィルタ処理されていない、輝度チャンネルである。
【００１５】
上記の輝度ベースの各画像の他のものは、上記オリジナル画像の元の輝度チャンネルに対し、デブロッキング（de-blocking）フィルタを適用することによって生成されるものである。上記フィルタの詳細については、以下に説明される。
【００１６】
三番目のタイプの輝度ベースの画像は、上記オリジナル画像の元の輝度チャンネルに対し、デリンギング（de-ringing）フィルタを適用することによって生成されるものである。そして、上記フィルタは以下で詳述される。
【００１７】
本発明を実施する好ましい方法によれば、これらの３種類の輝度ベースの各画像が生成され、上述された３つの各特性、つまりユニフォーム、トランジション及びビジーと命名された各特性により、輝度ベースの総括的な画像が記述された分散マップとして本明細書にて参照されるものが生成される。
【００１８】
上記各特性が、画素ブロック毎に一つずつ適用されることは理解されるべきである。言い換えれば、どの画素ブロックも上記３つの各特性の内における２つの特性により特性付けられることはない。
【００１９】
作成される分散マップ、及び準備される３種類の輝度ベースの処理された各画像と共に、本明細書ではロジックマップと呼ばれるものが、アーチファクトが除去された最終的な画像が正確にどのように構成されるかを定義するのに採用されている。
【００２０】
上記のような最終的な画像の組み立て（assembly）のために、それぞれの画素ブロックは、ユニフォーム、トランジション、又はビジーの何れかとしてその特性が調べられ、その特性に基づいて、上記の３つの輝度ベースの各画像の一つに位置的な関係に依存して対応する部分が、上記最終的な画像において直接的に採用される。
【００２１】
より具体的には、画素ブロックがビジーと呼ばれる特性を備えていると決定されている場合、上記フィルタ処理されていない元の輝度ベースの画像内に存在する、上記位置的な関係により一致して対応する画素ブロックが、最終的な画像に採用される。
【００２２】
一方、上記のような画素ブロックがユニフォームとして特性付けられる場合、そのときはデブロッキングされた輝度ベースの画像に位置的な関係により対応する部分が、最終的な画像への統合のために選択される。
【００２３】
最後に、画素ブロックの特性がトランジションであると決定される場合、デリンギングされた輝度ベースの画像に対して位置的な関係により対応する部分が、最終的な画像に使用されるために選択される。
【００２４】
本発明を実施する好ましい方法は、最終的な画像の組み立てが行われる前に、前述した３つの輝度ベースにおける各画像の完全な生成と、全体の画像のために各８×８画素ブロック毎へのユニフォーム、トランジション、又はビジーとしての完全な特性付けとを含む。
【００２５】
そのような最終的な画像の組み立てへのルートの上では、最終的な画像に使用されるために選択され、処理された輝度ベースの画像は、上記の元のオリジナル画像が最初に十分に調査されたときに分離された２つの各クロミナンスチャンネルと再度結合される。また、このルートに沿って、さらに、画像に対する後述される所定のエンハンスメント（強調）を採用してもよい。
【００２６】
本発明のアーチファクト除去部分を実施する代替の方法、すなわち本発明の変更された形態により実施される方法である、アナリシス（分析方法）は、互いに連なる各画素ブロックに対する順次（シリアル）な特性の調査を含む。
【００２７】
上記アプローチ方法では、それぞれの８×８の画素ブロックは、ユニフォーム、トランジション又はビジーとして特性付けられ、その後、上記の特性によって、前述したラインに沿って、フィルタ処理されるか、又はフィルタ処理されないかが実行され、続いて、最終的な、アーチファクト除去された画像が生成されるべき位置に直接的に設定される。
【００２８】
言い換えれば、本発明を実施するための上記アプローチ手法においては、最終的な出力画像の組み立てが始まる前に、前述された総合的で十分な画像分析と特性付けとが実行されない。
【００２９】
３．図１及び図２の実施例
図１を参照して、本明細書では、本発明の好ましい実施例のシステムや方法をブロック形態での流れ（フロー）図により示している。上記システムとそれに関連する方法は、図１において、部材番号１０にて概略的に示されている。本明細書では、概略的に、図１にて示されるものは、利便性と簡便性の目的のために、系統的な用語により説明される。
【００３０】
システム１０の中では、ブロック１２は、アーチファクト除去の調査、及びアーチファクト除去の是非のために、ＪＰＥＧ圧縮され、選択されたカラー画像を表している。
【００３１】
ブロック１４は、動作の流れ上、図１でのブロック１２から下流側であり、キロバイト単位での画像１２のファイルサイズ（Ｆ）と画素カウント（Ｒ）との両方を決定するための構造と動作とを表している。
【００３２】
図１でのブロック１６は、最終的な画像の拡大率ファクタを選択するための構造と方法を表している。そして、ブロック１８は、画素数とファイルサイズとを掛けたものを、選択された拡大率により割ることによって生成された最終結果を計算するための構造と方法とを表している。
【００３３】
さらに、図１に示されているように、イエス／ノーを決定するブロック２０は、ブロック１８により生成された計算結果が、所定のしきい値（θ）と等しいか未満であるか否かを基本的に問いかけるための構造と方法を表している。ブロック２２は、ブロック２０にて挙げられた問いへの回答がノーのとき終了動作をもたらすものである。また、図示されたブロック２４は、ブロック２０による問いの答が、イエスのとき、アーチファクト除去を実行するための構造と方法を表している。
【００３４】
図１で描写される動作の論理的な流れは、各ブロックを接続している矢の向きによって明確に図示されている。
【００３５】
したがって、図１は、アーチファクト除去が発動されるべきであるか否かを決定するためにＪＰＥＧによって十分に圧縮されたカラー画像を評価する好ましい方法を図示している。異なったしきい値(θ)を任意に選択することができるが、上記しきい値は、本発明での経験値として、１０万が非常に良い値であることが見出された。
【００３６】
上述したように、図１で明確に示されたものは、アーチファクト除去に適切な候補、又は不適切な候補として特性付けることの好ましい方法を表している。また、他の２つの具体的で有効な各アプローチ方法が、本発明により検討されている。
【００３７】
上記各アプローチ方法の１つは、単にファイルサイズのみに基づくアーチファクト除去の候補を決定することに基づいている。本明細書では、キロバイト単位での適切なファイルサイズの大きさはおよそ３０万であることが見出された。
【００３８】
候補の決定のために元のオリジナル画像を評価する、さらに他の方法は、ファイルサイズとキロ画素単位での画素数（pixel count）の双方を決定し、続いて、上記両者を乗算して積算結果を求め、その積算結果を、他の種類のしきい値と比較されることである。本明細書においては、上記の他の種類のしきい値は、約５０万が適切な値として見出されている。
【００３９】
画像がアーチファクト除去に適切又は不適切なものとして認定するために採用される上記の各テクニックの何れにおいても、画像がアーチファクト除去に適切な候補として決定されるとき、その後において、本発明の二番目のフェーズ、つまり具体的なアーチファクト除去の動作が実行される。
【００４０】
各図面の内の図２に注目すると、この図２は、アーチファクト除去を実行するために、本発明により提案された好ましい構造及び方法を示している。
【００４１】
ブロックの流れ図である図２は、画像選択のブロック１２（図１にて図示されたブロック１２と同様なもの）と、画像変換のブロック２６と、２つの各クロミナンスチャンネルのブロック２８と、１つの輝度チャネルのブロック３０と、ユニフォーム、トランジション及びビジーの各状態に基づく画素ブロックの各特性を有する多機能（多関数）のブロック３２と、フィルタ処理無しのブロック３４と、デブロッキングフィルタ処理のブロック３６と、デリンギングフィルタ処理のブロック３８と、新たな輝度ベース画像形成のブロック４０と、エンハンスメントのブロック４２と、最終的な画像形成のブロック４４と、を含む。
【００４２】
動作上にて効果的で好ましい、デブロッキングフィルタ処理のブロック３６は、ガウス分布関数に基づくローパスフィルタである。
【００４３】
カーネル（kernel）＝ｅＥＸＰ−（ｘ2＋ｙ2）／２σ2、各画素では、σ=１。このフィルタは、１０２４により乗算され、最も近い整数に丸められて下記の行列式を得る。
【００４４】
【数１】
2004173248.tif 000003
動作上、効果的に配置され、好ましい協働形態としては、デリンギングフィルタのブロック３８は、以下に示す、別のローパスフィルタである。
【００４５】
【数２】
2004173248.tif 000004
アーチファクト除去を実行する好ましい方法に関する他の具体的で詳細な説明を以下に記述する。一方、図２にて示されるシステム及び方法に基づくアーチファクト除去における本明細書での動作は、以下の方法にて概略的に記述することができる。
【００４６】
例えば、本明細書の図１に示されるものに基づくアーチファクト除去での発動のために選択された画像は、ブロック２６において変換される。ブロック２６は、上記画像全体を、それを構成している２つの各クロミナンスチャネル(ブロック２８)と、上記画像全体の単一の輝度チャネル(ブロック３０)とに効果的に分離するものである。
【００４７】
各ブロック３４、３６、３８は、上記元の輝度チャンネルに対し、本明細書にて概略的に前述された３つの相違する各輝度ベース画像に変換して、上記３つの相違する各輝度ベース画像をブロック４０に利用可能となるように効果的に動作する。ブロック３４は、フィルタ処理されない輝度チャンネル画像を、ブロック４０に対し、手を加えない、つまり直接的に単に通過させるものである。
【００４８】
デブロッキングフィルタのブロック３６は、上述したローパスデブロッキングフィルタを上記の元の画像の輝度チャンネルに適用して、本明細書にてデブロッキングされた輝度ベース画像を生成し、ブロック４０に利用可能とするものである。
【００４９】
同様に、動作上、ブロック３８において表されている、上記デリンギングローパスフィルタは、上記の元の画像の輝度チャンネルに対して作用して、デリンギングの輝度ベースの画像を生成し、ブロック４０に提供するものである。
【００５０】
また、ブロック３０で利用可能に示されている上記輝度チャンネルの画像は、ブロック３２に対しても利用可能になっており、画素ブロック毎に、ユニフォーム、トランジション及びビジーと命名された各特性名に関する特性付けが施される。ブロック３２が３つの各セクションに分割されるのは注目される。上記セクション毎は、それぞれ、異なった特性のシェーディング（濃淡）領域を備えている。
【００５１】
上記シェーディングは、これらの３つの各特性を識別して、各ブロック３４、３６、３８に関する、それぞれの各動作にこれらの３つの各特性を関係付けるのに役立ちます。各ブロック３４、３６、３８において用いられる各表面領域は、これらの３ブロックで実行されることと、ブロック３２にてそれぞれ特性付けに必要なものとを、視覚的で直接的な関係を与える方法でそれぞれ示された濃淡を備えた領域であることが分かる。各画素ブロックは、ユニフォーム、ビジー及びトランジションであるとしてそれぞれ特定されるブロック４０にて適切に利用可能となっている。
【００５２】
アーチファクト除去された出力画像を生産するために最終的に組み立てられるアーキテクチャについて記述する前述のロジックマップは、ブロック３２の中で輝度ベースの画像全体において実行される３つの各特性付けに基づいて準備される。上記ロジックマップは、画素ブロック毎において、元の輝度ベースの画像、デブロッキングされた輝度ベースの画像、及びデリンギングされた輝度ベースの画像の１つから得られるようになる最終的な画像での各画素ブロックについて的確に効果的に記述するものである。
【００５３】
この情報から、ブロック４０が最終的な出力画像へのプリカーサー（前駆物）を形成する。そのプリカーサーは本明細書においては、処理された輝度画像と記述されている。
【００５４】
上記処理された輝度画像は、ブロック４０からエンハンスメントのブロック４２に提供される。エンハンスメントのブロック４２は、本明細書においてエンハンスされた処理済な輝度画像と呼ばれるものを生成し、ブロック４４に供給する。エンハンスメントを実行するブロック４２の中で行われることを考察すると、上記画像のファイルサイズと最終印刷サイズ(短い寸法では、４インチと言う)に基づき、適当なエンハンスフィルタ、及びカーネルが、よく知られている基準に基づいて計算される。最終印刷サイズ、プリンタのドット／インチ（dpi）、及び画素解像度に基づいて、３×３、５×５、又は７×７がエンハンスメントのために選ばれる。
【００５５】
固定されたエンハンスメントＭＴＦが、使用されて(最終印刷の面で)、カーネルサイズに基づき、各サンプルの周波数の適切な数としては、０から６サイクル／ｍｍまでが選択されて用いられる。多くの使用者は、印刷に６サイクル／ｍｍより上でのエンハンスメントの選択を必要としないであろうと想定される。
【００５６】
このような選択の結果は、最初に、一次元のＦＩＲを生じ、そして、次に、８対称を使用して、二次元ＦＩＲフィルタが生成される。
【００５７】
上述したように、avgvar(全体の画像の平均分散)が６００以上であれば、自然な外観を保証するために、「ブーストファクタ」(ブーストファクタは、周波数応答のピークでの過剰な均一性でのゲインをほぼ示す)は、１．０から０．５に減少される。その後、上記カーネルは、上記画像に適用されて、上記画像がエンハンスされ、処理された輝度チャネルの画像を結果として生じる。続いて、上記の処理された輝度チャネルの画像は、前記の２つの各クロミナンスチャネルと再結合されて、最終的な画像を形成する。
【００５８】
ブロック４４に供給される、エンハンスされ処理された輝度画像は、ブロック４４において以前に分離された２個の各クロミナンスチャネル(ブロック２８)と結合されて、アーチファクト除去された最終的なカラー画像出力を形成する。
【００５９】
本明細書において以下に提示されているのは、上記にて図１及び図２を参照して、これまで示された実施例や、システムと方法とにて実行されるアルゴリズムの十分な記述である。
【００６０】
４．図２のアーチファクト除去アルゴリズム
・ＪＰＥＧアーチファクトプログラム
・$ Line = 1
1
・TimeUsed[]の呼び出しは、処理がどれくらい長くかかるかを測定するのに使用される。それらはプログラムに変化を与えない。
【００６１】
・firsttime = TimeUsed []
5198.22
・<<ImageProcessing
・<<Statistics>
画像を読み取り、その各次元を測定すること。
・上記画像ファイルを行にて階層型フォーマットで読み取り、輝度とクロミナンスとの各チャネルに分離する。上記画像ファイルは、「j」軸に沿った長い次元と「i」方向に沿った短い次元とを備えた４：３のアスペクト比が想定されるであろう。
【００６２】
・iｍage = ReadList[
"Macintosh HD:Desktop Folder:
Blocking_Removal:Women.raw",
byte];
・ｌ= Length[iｍage] / 3
307200
・次の３つの各ステップは輝度とクロミナンスの各チャネルを分離することである。
【００６３】
・lumimage = Take [image, 1];
・aimage = Take [image, [l + 1, 2 * l]];
・bimage = Take [image, -l];
・上記プログラムは、４：３アスペクト比を想定すると、上記画像のファイルサイズを、j方向であるhsize、およびi方向であるlsizeについて計算する。
【００６４】
・hsize = Sqrt [4 * l / 3]
640
・lsize = Sqrt [3 * l / 4]
480
・次の３つの各ステップは３つの各画像を形成する。
【００６５】
・lumiage = Partition[lumimage, hsize];
・aimage = Partition [aimage, hsize];
・bimage = Partition [bimage, hsize];
・ｄは、上記画像の各次元を格納するベクトルである。
【００６６】
・d = Dimensions [lumimage]
[480, 640]
・オリグ（Orig）は輝度チャネルのコピーであり、それを不正改ざんから安全に保つものである。
【００６７】
・orig = lumimage;
・ｂｓは、ＪＰＥＧリンギングの除去に使用されるブロックのサイズを決定するものであり、通常は８にセットされるものである。
【００６８】
・bs = 8
8
・次のステップは、調べられる必要があるエッジのブロック数について計算する。上記ブロックの総数はnblocks*ynblocksである。６４０×４８０画像のために、ブロック数は８０×６０である。
【００６９】
・nblocks = d[[2]] / bs
80
・ynblocks = d[[1]] / bs
60
・ブロッキングやリンギングの各アーチファクトを低減するのに使用されるための各フィルタを作成すること。
【００７０】
・デリンギングフィルタは、ｂｓ×ｂｓブロックのアーチファクト除去のために処理される場合、ｂｓ×ｂｓブロックをスムージングするのに使用される。センターの重みは、ｂｓ×ｂｓブロックとその周囲の各ブロックとのブレンドに役立つ。このフィルタは、観察者にとって、それらがエンハンスメントの後に明白であるところのレベル未満までリンギングアーチファクトを減少させるのに使用される。
【００７１】
・deringingfilter =
[[1, 3, 1], [3, 6, 3], [1, 3, 1]];
・ノーマライゼーションが、整数乗算を計算を迅速化するのに使用された後に正解を得るのに使用される。
【００７２】
・norm =
Sum[Flatten [deringingfilter][[i]] ,
[i, l, 9]]
22
・MatrixForm[deringingfilter]
【００７３】
【数３】
2004173248.tif 000005
・続いて、１つの画素の標準偏差（シグマ）を備えたガウス型カーネルに基づく(2*fsize+1)配列であるデブロッキングフィルタについて計算される。
【００７４】
fsize=3 for a 7 x 7 kernel. 
・sigma= 1
1 
・fsize= 3
3 
・deblockingfilter =
N[
Table[
Exp[-((i)^2 + (j)^2 ) /
(2 * sigma^2 )],
[i, -fsize, fsize],
[j, -fsize. fsize]]]; 
・新たなフィルタは、１０２４をかけることによって、整数カーネルに変換される。その後のノーマライゼーションはコンボルーション（convolution）後に正確な各値を回復する。
【００７５】
・deblockingfilter =
Round [ 1024 * deblockingfilter]; 
・MatrixForm[deblockingfilter]
【００７６】
【数４】
2004173248.tif 000006
・newnorm = Sum[deblockingfilter [[i, j]],
[i, 1, 2* fsize +1],
[j, 1, 2* fsize + 1]] 
6436
・ti = TimeUsed[] 
5200.95
・画像のための分散マップ（Variance Map）を作成する。
【００７７】
・２つの各アレイが、各画像ブロックの分散を算出するために作成される。各アレイの一つは、varmapであり、そして、他方が最終的な画像を形成する際になされるべきことを規定するロジックマップ（logicmap）である。
【００７８】
・varmap = Table[0, [ynblocks],
[nblocks]];
・For[i = 1, i <=ynblocks, i++,
For[j = 1, j <= nblocks, j ++,
b1 = Take [lumimage,
[(i-1) * bs + 1, (i-1) * bs + bs],
[(j-l) * bs + 1, (j-1) * bs + bs]];
varmap[[i, j]] =
Round[variance[Flatten[b1]]];
]];
Print["Time used=" ,
(TimeUsed[] - t1) / 60];
Time used=0.169722
・図３は、８×８の各ブロックにおける分散の「画像」を示す。白は高い分散であり、黒は低い分散である。
【００７９】
・show [DensityGraphics[varmap,
Mesh AE False, AspectRatio AE .75]];
・avgyarは全体の画像のための８×８ブロックの分散の平均値である。多くの各画像においては、avgvarが６００未満のとき、エンハンスメントにおいてブースト値に１．０が使用されるが、avgvarが６００以上のときは、ブースト値を０．５とより低く設定することがよいと経験上わかっている。
・空間的なエンハンスの間に使用される上記ブーストを決定すること。
【００８０】
・avgyar = N ［Mean ［Flatten [varmap]]]
285.809
・しきい値ｌ（threshl）はユニフォームの領域の分散のための基準を設定するものである。３×３アレイの各分散の平均がしきい値ｌと等しいか、または小さい場合、続いて、その中心のブロックは、ユニフォームの領域にあると想定されて、それはデブロッキングフィルタによってフィルタ処理される。
【００８１】
・threshl = 64;
・ｂは、上記処理の最後にて空間的なエンハンスメントで使用されるブースト値である。ｂは、変数ｍとして定めるために「０」に設定されるが、その後に変更されるであろう。ｂの２つの各値は、ｂ＝１がそれほどビジーでない画像（avgyarが６００未満）、ｂ＝０．５がビジーな画像（avgyar以上）として使用される。
【００８２】
・b=0;
bthresh = 600;
・If[avgyar>=bthresh, b = .5, b = 1],
・b
１
・time2 = TimeUsed[]
5210.73 
・ロジックマップを作成するプログラム。
・次の各操作のセットは、オリジナル（元の原稿）の画像、デブロッキングされた画像、及びデリンギングされた画像をどのように結合して、最終的な画像とする方法を決定するのに使用されるロジックマップを作成することである。上記最終的な画像は、視覚されるレベル未満に、上記ブロッキングの大部分が除去され、上記リンギングが低減されたものとなっている。
【００８３】
上記セットの第１ステップは、分散マップ（varmap）と同じ各次元である、ロジックマップの出力アレイを形成することである。ロジックマップに対して、分散マップの各要素は１対１の写像関係を備えている。下記の各ロジカル（logical）ステップに従うのが非常に重要である。下記の各ステップに対するどのような変更も悪い結果をもたらすであろう。
【００８４】
第１ステップは、分散マップの各値の３×３アレイを取り出し、「ユニフォーム」と呼ばれるその平均値について計算することである。次のステップでは、上記３×３ブロックの標準偏差が、計算されて"stdvar"と呼称される。全ての操作ステップにおいて、全ての各値が最も近い整数に丸められている（Round[]）ことに注目。
【００８５】
続く、幾つかの各ステップでは、３×３アレイ内の分散マップの各値における、トップ、ボトム、レフト、ライトの３つの平均と４つの各コーナーにおける各値の平均とを計算して、それら計算結果は、トップテスト、ボトムテスト、レフトテスト、ライトテスト、コーナー１、コーナー２、コーナー３、コーナー４と呼ばれる。この時点にて、テストを始めることができる。
【００８６】
最初のテストは、ユニフォームが、しきい値ｌ以下であるかどうか判別することである。ユニフォームが、しきい値ｌ以下であるなら、３×３アレイの中央位置はユニフォーム領域にあると想定され、そして、デブロッキングされた画像が、この８×８ブロックのために使用されるべきであることを示すために、ロジックマップが「２５５」に設定される。
【００８７】
もし、上記テストにおいて、ユニフォームがしきい値ｌ以下でないなら、次に、トップテスト、ボトムテスト、レフトテスト、ライトテスト、コーナー１、コーナー２、コーナー３、コーナー４が、しきい値ｌ以下であるかどうか判別するためにテストされ、それらの何れか1つでも、しきい値ｌ以下であれば、その後、ロジックマップの中央位置は再び「２５５」に設定される。
【００８８】
上記の最後のテストにおいて、各値がしきい値ｌ以下でない場合、次に、分散マップの中央値の周囲となる分散マップにおける８つの各値のそれぞれがしきい値ｌ以下であるか否かをテストする。上記周囲の８つの各値における少なくとも１つがしきい値ｌ以下で、かつ、上記分散マップの中央値がしきい値ｌを超えるなら、ロジックマップ上の中央位置は「１２８」に設定される。「１２８」の意味は、上記画像におけるこのブロックが、デリンギングされた画像にて対応するブロックに置き換えられることである。
【００８９】
上記のテストが否であるなら、分散マップの中央値が、前述した３×３アレイの標準偏差、stdvarと比較されて、このテストされている領域がビジー領域であるか否かを判別する。上記判別は、分散マップの中央値の絶対値から上記平均値であるユニフォームの値を引くことにより実行され、この結果が、分散マップの３×３アレイの２つ各標準偏差以下であるか否かを問うことで実行される。この条件が満たされるなら、ビジー領域内であると想定され、ロジックマップの中央位置は「０」に設定される。「０」に設定される意味は、どのようなアーチファクトも観察されないのでオリジナル画像を維持することである。
【００９０】
上述した全ての各テストが否である場合、ロジックマップの中央位置は、「１２８」に設定されて、デリンギングされた画像に置き換えられるであろう。
【００９１】
・logicmap = Table[0, [ynblocks],
[nblocks]];
・For[i = 2, i £ ynblocks - 1, i++,
For[j = 2, j £ nblocks - 1, j++,
uniform =
Round [
Sum [varmap [[i + m, j + n]],
[m, -1, 1], [n, -1, 1]] / 9];
stdvar =
Round [StandardDeviation [
Flatten [
Table [varmap [[i + m, j + n]],
[m, -1, 1], [n, -1, 1]]]]];
lefttest =
Round [
Sum [varmap [[i + m, j - 1]],
[m, -1, 1]] / 3];
righttest =
Round [
Sum [varmap [[i + m, j + 1]],
[m, -1, 1]] / 3];
toptest =
Round [
Sum [varmap [[i - 1, j + n]],
[n, -1, 1]] / 3];
bottomtest =
Round [
Sum [varmap [[i + 1, j + n]],
[n, -1, 1]] / 3];
corner1 =
Round [
(varmap [[i - 1, j - 1]] +
varmap [[i, j - 1]] +
varmap [[i - 1, j]] ) / 3]; 
corner2 =
Round [
(varmap [[i + 1, j -1]] +
varmap [[i, j - 1]] +
varmap [[i + 1, j]]) / 3];
corner3 =
Round [
(varmap [[i - 1, j + 1]] +
varmap [[i - 1, j]] +
varmap [[i, j + 1]]) / 3];
corner4 =
Round [
(varmap [[i + 1, j + 1]] +
varmap [[i, j + 1]] +
varmap [[i + 1, j]]) / 3];
If [uniform £ threshl,
logicmap [[i, j]] = 255,
If [bottomtest £ threshl ||
lefttest £ threshl ||
righttest £ threshl ||
toptest £ threshl ||
corner1 £ threshl ||
corner1 £ threshl ||
corner1 £ threshl ||
corner1 £ threshl &&
varmap [[i, j]] > threshl,
logicmap [[i, j]] = 128,
If [varmap [[i - 1, j - 1]] £
threshl ||
varmap [[i - 1, j]] £ threshl ||
varmap [[i - 1, j + 1]] £ threshl ||
varmap [[i, j - 1]] £ threshl ||
varmap [[i, j + 1]] £ threshl ||
varmap [[i + 1, j - 1]] £
threshl ||
varmap [[i + 1, j]] £ threshl ||
varmap [[i + 1, j + 1]] £
threshl &&
varmap [[i, j]] > threshl,
logicmap [[i, j]] = 128,
If [Abs [varmap [[i, j]] - uniform £
2 * stdvar, logicmap [[i, j]] = 0,
logicmap [[i, j]] = 128]]]];]];
・time3 = Timeused[]
5220.95
・print ["maptime =", (time3 - time2) / 60]
maptime = 0.170278
filterhistogram =
Frequencies [Flatten [logicmap]]
[[538, 0], [2075, 128], [2187, 255]]
totalcounts =
filterhistogram [[1, 1]] +
filterhistogram [[2, 1]] +
filterhistogram [[3, 1]]
4800
freqtest =
N [filterhistogram [[1, 1]] /
totalcounts]
0.112083
・図４は、最終的な合成画像を形成するのに使用される、得られたロジックマップを示している。
【００９２】
・show [Graphics [Raster [logicmap / 255]],
AspectRatio AE .75];
・デブロッキングされ、及びデリンギングされた画像を形成すること。
・次の２つの各ステップでは、デブロッキングされ、デリンギングされ、スムージングされた画像を形成するために、前述したコンボリューション操作と、デリンギングフィルタ及びデブロッキングフィルタとして規定された各フィルタが用いられる。全体の画像は処理されるが、ロジックマップによって規定された各画素だけが使用されるであろう。
【００９３】
・ringingimage =
Round [
DiscreteConvolve [lumimage,
deringingfilter,
TransientSamples AE True,
Centered AE True] / norm]; 
・blockimage =
Round [
DiscreteConvolve [lumimage,
deblockingfilter,
TransientSamples AE True,
Centered AE True] / newnorm];
・本明細書では、出力画像はロジックマップに基づく合成画像を有するように生成される。
【００９４】
・outputimage = Table [0, [d [[1]]],
[d [[2]]]];
・time4 = TimeUsed[]
5246.27
・最終的な合成画像を形成する。
【００９５】
このステップは、単に、ロジックマップを参照し、そのロジックマップの値、「２５５」、「１２８」又は「０」に基づき、それぞれ、デブロッキングされた画像、デリンギングされた画像又はオリジナル画像からの対応する画像画素を、取り出し、出力画像でそれを対応位置に置き換えるものである。
【００９６】
上記ロジックマップは、Ｍ／８×Ｎ／８の各次元を備えているので、Ceiling[]の操作が、Ｍ×Ｎの出力アレイ全体への写像操作（map）において使用されることに注目。
【００９７】
・For [i = 1, i £ d [[1]], i++,
For [j = 1, j £ d [[2]], j++,
Which [logicmap [[Ceiling [i / 8],
Ceiling [j / 8]]] ☆ 0,
outputimage [[i, j]] =
lumimage [[i, j]],
logicmap [[Ceiling [i/8],
Ceiling [j / 8]]] ☆ 128,
outputimage [[i, j]] =
ringingimage [[i, j]],
logicmap [[Ceiling [i/8],
Ceiling [j / 8]]] ☆ 255,
outputimage [[i, j]] =
blockimage [[i, j]]];]];
・time5 = TimeUsed[]
5323.42 
・print ["create time=",
(time5 - time4) / 60]
create time=1.28583
・次の幾つかの各操作は、ＪＰＥＧアーチファクト除去アルゴリズムの一部ではないが、最終的な画像の処理パイプラインにて使用されるカーネルタイプで画像をエンハンスするのに使用される。上記カーネルのサイズは、上記オリジナル画像のサイズに基づいて選ばれる。
【００９８】
より小さい画像（６４０×４８０）は、それらがプリンタで拡大されなければならないので、より高い周波数（より小さいカーネル）でエンハンスされる必要がある。
【００９９】
最も大きい画像（２０００×１５００）は、これらの画像が６インチ・４インチの普通の大きさの印刷に縮小されることが好ましいことから、ＰＭＩ４４ｉチップセットで利用可能な完全な７×７のカーネルを必要とするであろう。
【０１００】
下記のWhich[]のステートメントが、使用する正しいカーネルサイズｎを選択するためのものである。
【０１０１】
一般的な規則は、上記画像にそれ自身に対するMTF(f)=1.0+b（1-Sin[pnaf]/nSin[paf])にて与えられるエンハンスメントＭＴＦである。ｎは、エンハンスメント処理に必要な、アンシャープ用マスク（unsharp mask）を形成するのに使用する画素数である。ａは、上記画素のサイズ、ａ＝１／ｄｐｉ（ドット／インチ）である。ｆは、空間周波数である。ｂは、要求されるブースト値である。
【０１０２】
実験と理論に基づいて、ＭＴＦのためのピーク値はpnaf=4.5のときに得られるであろう。６００ｄｐｉのプリンタでは、ａ=0.0423mmである。空間周波数ｆ=3 c/mmの数値は、上記ブーストが、ＭＴＦの中心部が正常な視認条件の範囲内に丁度位置することを確実にするであろう。上記設定は、ｎが11.28か、まさしく実用的ケースとしてｎが11の結果を与える。また、上記設定は最終印刷のためのものである。
【０１０３】
上記データに必要であるｎの値は前記の拡大率（magnification）に依存する。６４０×４８０ファイルに関し、６００ｄｐｉのプリンタのためには、上記拡大率は、約５であろう。上記設定は、ｎが１１／５である必要となることを意味する。一方、実際的な理由で、上記設定では、ｎ＝３が上記画像をブーストするのに必要であることを意味する。
【０１０４】
下記の各計算においては、プリンタのｄｐｉ、上記画像の画素解像度、及び、インチで表現される最終の印刷サイズに基づく自動的な上記設定が処理される。
【０１０５】
・Dimensions [outputimage]
[480, 640]
・fpeak = 3 
3 
・dpi = 600 
600 
・pixelsize = 25.4 / dpi
0.0423333 
・printsize = 4 
4 
・mag = 4 / (1size / dpi) 
5 
(*fpeak = If [freqtest£.25,1,3]*)
・nx = N [4.5 / fpeak * pixelsize * Pi)]
11.2787 
・n = N [nx/mag]
2.25574 
・n = Which [n £ 4，3，n £ 6, 5, n > 6, 7,] 
3 
・mtf[b_, n_, pixelsize_, f_] :=
1.O +
b
(1.0 - Sin [Pi * pixelsize * n * f] /
(n * Sin [Pi * pixelgize * f]));
Plot [mtf [b, nx, pixelsize, f],
[f, O, 10]];
・図５はエンハンスメントフィルタのＭＴＦ応答を示す。
【０１０６】
エンハンスメントフィルタを形成するために、最初に一次元の同等物を形成する必要がある。上記形成は、（ｎ−１）個の各ポイントにてＭＴＦ曲線をサンプリングし、続いて、３つの各ポイント二番目のポイント内での最初のＭＴＦサンプリング結果と、３つの各ポイントの一番目エレメント（要素）及び二番目のエレメント内の二番目のＭＴＦサンプリング結果の各複製物（レプリカ）とにより作成されるシンメトリック（対称な）アレイについてのＦＦＴを計算することにより実行される。
【０１０７】
上記形成が以下のように実行される。二次元フィルタは、一次元のフィルタによって、単に列（row）と行（column）を形成し、それらを掛けて３×３マトリクスを得ることによって、作り出される。上記フィルタは、それを整数計算にするために５１２により掛けられた後、正解を得るために５１２によって割られるものである。
【０１０８】
・amp = Table [mtf [b, nx, pixelsize, f],
[f, .0OO1, 6, 12 / (n+1)]]
[1., 2.2231]
・fir = FrequencySamplingFilter [n,
amp, EvenSymmetry AE True]
[-0.4077, 1.8154, -0.4077]
・boostfilter =
Round [512 * Filter2D [fir]];
・MatrixForm [N [boostfilter / 512 ]]
【０１０９】
【数５】
2004173248.tif 000007
・newoutimage =
Round [
DiscreteConvolve [outputimage,
boostfilter,
TransientSamples AE True,
Centered AE True] / 512;
・Dimensions [newoutimage]
[480, 640] 
・以下に示す各操作の幾つかでは、それらを上記計算から除かれている(* mmmmm*)が、今後の自己診断評価のためにそれらを保持される。
【０１１０】
・(*enhlum =
Round [
DiscreteConvolve [orig,
Boostfilter,
TransientSamples - > True,
CenteredAETrue] / 5l2];*)
・Dimensions [newoutimage]
[480, 640]
・上記様々な出力画像は、ｔｉｆｆ画像として記述されるようにグラフィックフォーマットに変換される。lumoutは、十分に処理された輝度チャンネルである。aimageとbimageとが未処理の各クロミナンスチャネルである。enhlumoutは、ＪＰＥＧアーチファクトのために処理されないオリジナル輝度チャンネルであるが、アンシャープ用マスクカーネルによってエンハンスメントされたものである。これは各比較の役に立つ。
【０１１１】
・starttime = TimeUsed[]
5332.47
・(*eightout = Graphics [Raster [artifactmap/ 255],
AspectRatioAE1.0];*)
・(*Export [
"Macintosh HD:Desktop Folder:
Blocking_Removal:eightout",
eightout, "TIFF"];*) 
・lumout =
Graphics [Raster [newoutimage / 255],
AspectRatioAE1.0];
・(*enhlumout =
Graphics [Raster [enhlum / 255],
AspectRatioAE1.0];*)
・aimage = Graphics [Raster[aimage / 255],
AspectRatioAE1.0];
・bimage = Graphics [Raster [bimage / 255],
AspectRatioAE1.0];
・(*unenhimage = Graphics [Raster [outputimage / 255],
AspectRatioAE1.0];*)
・(*ringimage = Graphics [Raster [ringingimage / 255],
AspectRatioAE1.0],*) 
・(*block = Graphics [
Raster [blockimage / 255],
AspectRatioAE1.0];*)
・次の幾つかの各操作は、上記のｔｉｆｆ画像を書くためのものである。
【０１１２】
・Export [
"Macintosh HD:Desktop Folder:
Blocking_Removal:lum", lumout,
"TIFF"];
・(*Export [
"Macintosh HD:Desktop Folder:
Blocking_Removal:enhlum",
Enhlumout, "TIFF"];*)
・Export [
"Macintosh HD:Desktop Folder:
Blocking_Removal:a" aimag,
"TIFF"]
・Export [
"Macintosh HD:Desktop Folder:
Blocking Removal:b", bimage,
"TIFF"];
・(*Export [
"Macintosh HD:Desktop Folder:
Blocking_Removal:unenhl",
Unenhimage, "TIFF"];*)
・(*Export [
"Macintosh HD:Desktop Folder:
Blocking_Removal:ring",
Ringimage, "TIFF"]*)
・(*Export [
"Macintosh HD:Desktop Folder:
Blocking_Removal:block",block,
"TIFF"];*)
・writetime = (TimeUsed[] - starttime) / 60
0.665278
・overalltime =
(TimeUsed[] - firsttime) / 60
2.90194 
５．図６、図７、及び図８による実施例
図６ないし図８によれば、これら３つの各図は、本発明の一変形例を示している。この一変形例では、上記オリジナル画像における全ての各画素ブロックは、最終的な画像出力での使用のために、画素ブロック毎に順次処理が完了される方法を示すためのものである。
【０１１３】
図６では、オリジナルの全体画像の一部であるフラグメント４６は、図６に描かれているように、単一の、８×８の画素ブロックが、さらなる各画素ブロック４８ａないし４８ｈにより囲まれていることを示している。
【０１１４】
上記図７及び図８を用いて記述されている、本発明の第二の実施例に係るシステム及び方法は、画素ブロック４８と、そして、まさにそれにより特定された周囲の８つの各画素ブロックとに関するものである。
【０１１５】
最初に、図７を見ると、この図７は、本発明の一変形例の実施例を十分に図解している。図７において、ブロック５０はオリジナルの画像全体を表している。ブロック５２は各画素をユニフォーム、トランジション又はビジーに特性付けるための構造や方法を表している。ブロック５４はデブロッキングフィルタ及びデリンギングフィルタを適用するか適用しないかのための構造及び方法を表している。ブロック５６は最終的な出力画像を表している。
【０１１６】
したがって、図７で示されていることは、画素４８のようなオリジナル画像内での画素が、それを囲む各画素ブロックと共に調べられて、ブロック５２によってユニフォーム、トランジション又はビジーと呼ばれる３つの各画素カテゴリの１つにそれを特性付けることである。
【０１１７】
その後、上記の特性付けられた画素は、ブロック５４に供給される。上記ブロック５４は、上記画素に対し適切なフィルタ処理、少しでも適切であれば、デブロッキングやデリンギングの方向でのフィルタ処理を施す。
【０１１８】
ブロック５４からの出力は、輝度ベースであり、以前に分離された各クロミナンスチャネル（図示せず）に結合されて、直ちに図において５８にて示されるような、処理された画素を、最終的な画像５６内に生成する。
【０１１９】
図８は、図７及び図８にて実行されるアーチファクト除去アルゴリズムの一変形例を十分にかつグラフィカルに示すものである。以下に、本発明の図６、図７及び図８の各実施例を実行するアルゴリズムの十分な記述を示す。
６．図６、図７、及び図８のアーチファクト除去アルゴリズム
・ＪＰＥＧアーチファクト除去プログラム
・＄Line = 1
1
・<<ImageProcessing>
・<<Statistics>
・上記画像ファイル内で、列の、階層化されたフォーマットで読み込み、輝度とクロミナンスの各チャンネルである、正方画像（square images）に分離する。
【０１２０】
・image = ReadList ["Macintosh HD:Desktop Folder:Blocking_Removal:garden.raw",Byte];
・l = 640 * 480
307200
・次の３つの各ステップは輝度チャンネルと各クロミナンスチャンネルとに分離するものである。
【０１２１】
・Iumimage = Take [image, l];
・aimage = Take [image, [l + 1, 2 * l]];
・bimage = Take [image, -l];
・これは各正方画像のサイズについて計算する。
【０１２２】
・size = 640
640
・「ビジー」の画像の測定は、輝度チャネルの標準偏差について計算することにより得られる。上記測定方法は、現在の上記アルゴリズムで使用されないが、自己診断プログラムに使用される。
【０１２３】
・imagestd = N [StandardDeviation[lumimage]]
65.7788
次の３つの各ステップは正方画像を形成するものである。
【０１２４】
・lumimage = Partition [lumimage, size];
・aimage = Partition [aimage, size];
・bimage = Partition [bimage, size];
・Dimensions [lumimage]
(400, 640)
・オリグ（Orig）は、輝度チャンネルのコピーであり実際の処理で使用されるであろう。
【０１２５】
・Orig = lumimage;
・ｂｓは、ＪＰＥＧリンギングの除去に使用されるブロックサイズを決定し、通常は、８にセットされる。
【０１２６】
・bs = 8
8
・
次のステップは、調べられる必要があるエッジ上のブロック数について計算する。上記各ブロックの総数は、nblocks*nblocksにより示されている。
【０１２７】
・nblocks = size / bs
80
ynblocks = 480 / bs
60
stdarray = Table [0, [ynblocks], [nblocks]];
・以下のしきい値は、該当のｂｓ×ｂｓブロックを処理する方法を決定するために使用されるものである。しきい値ｌはユニフォーム領域の上位レベルを決定するものである（全ての各しきい値が輝度チャンネルでのｂｓ×ｂｓの各ブロックのＲＭＳ値である）。該当のｂｓ×ｂｓブロックが、その周りに、しきい値ｌ以下のしきい値を備える何れかのブロック（全てでは８個）を有する場合、そのとき、該当ブロックがリンギングアーチファクトのためにテストされる必要がある。８つの周囲の各ブロックが、しきい値ｌを超える各ＲＭＳ値を有する際には、該当ブロックがビジー領域の中央にあって、さらに処理される必要はないと想定される。この実行では、上記各しきい値はｂｓ×ｂｓの各ブロックの各ＲＭＳ値である。実際の実行においては、分散を使用することができ、及び、その平方根を保存することができる。
【０１２８】
・
・threshl = 8;
・スモールフィルタ（Smallfilter）は、ｂｓ×ｂｓブロックがアーチファクト除去のために処理されるときに、ｂｓ×ｂｓブロックをスムージングするために使用される。上記中央の重みは、ｂｓ×ｂｓブロックとその周囲の各ブロックをブレンドするのを役立つ傾向がある。上記フィルタによってスムージングされた領域は、実際には、８×８のＪＰＥＧブロックを含む１０×１０アレイである。上記スムージングが実行された後に、８×８コアだけが処理された画像内に置かれる。これは、コンボリューションにおいて、どのようなエラーも防止できる。８×８のＪＰＥＧの各ブロック上で動作させているだけであるので、上記ポイント（ステップ）からは、ｂｓ×ｂｓブロック項を８×８ブロックにより置き換えることになるであろう。
【０１２９】
・smallfiter = [[1, 3,1], [3, 6, 3], [1, 3, 1]];
norm = Sum [Flatten [smallfilter][[i]], [i, 1, 9]]
22
・Sum [Flatten [smallfilter][[i]], [i, 1, 9]]
22
・MatrixForm [smallfilter]
【０１３０】
【数６】
2004173248.tif 000008
smoothfilter = [[1, 1, 1], [1, 5, 1], [1, 1, 1]];
MatrixForm [smoothfilter]
【０１３１】
【数７】
2004173248.tif 000009
smoothnorm = 13;
・上記プログラムは、マテマティカ（Mathematica）を使用する計算時間をモニターするのに役立つ。
【０１３２】
・t1 = TimeUsed[]
15240.5
・moveoneはカウンタである。
【０１３３】
・moveone = 0;
・シグマバッグ（sigmabag）は処理されたブロック数をカウントするのに使用され、自己診断プログラムに使用されて、実際の処理に対し何ら影響しないものである。
【０１３４】
・sigmabag = Table [O, [nblocks*ynblocks]];
・アウトイメージ（outimage）は、上記処理の各結果によって上記入力を上書きするのに使用される。
【０１３５】
・outimage = lumimage;
・画素カウント（pixelcount）及びカルカウント（calcount）はそれぞれ各カウンタである。
【０１３６】
・pixelcount = 0;
・calcount = 0;
・このアルゴリズムは、ワンステップで、「リンギング」アーチファクト除去と「ブロッキング」アーチファクト除去とを結合する。本発明者は、「ブロッキング」アーチファクト除去において、より効果的なツーパス（two pass）システムを開発した。そして、ワンパスのアルゴリズムが要求に合わないときには、上記ツーパスシステムを使用できる。上記処理における第１のステップは、決定をするのに必要である９つの各ブロックを見出すことである。上記９つの各ブロックは、８×８の各ブロックの３×３アレイを形成するものである。ブロックｂ１ないしｂ９は、８×８の各ブロックである。ｓｔｄ１ないしｓｔｄ９はそれぞれのＲＭＳ値である。
【０１３７】
上記関数のTake[]は、ただ、それぞれの８×８の各ブロックを得るためのものである。上記各ブロックが処理されるとき、単に、３つの新たな各ブロックのみが、処理されるに必要であり、その結果、上記プログラムは、各ｂ値及び各ｓｔｄ値の６つの各値を保持し、それらを上記処理の各ステップに合うように名前を変える。上記画像のそれぞれの水平なスキャンの始めでは、９つの各値が計算され、水平方向での掃引での他の全ての各ブロックのために、３つの新しい各値がそれぞれの処理されるブロック毎のために計算される。
【０１３８】
与えられたブロックが、それを囲む８つの各ブロックの内、何れか１つでもしきい値を示すthreshl未満のＲＭＳ値を有する場合、上記与えられたブロックは、リンギングアーチファクトのために調べられる。２つの追加のテストが実施される。トップ及びボトムでの各ブロックのＲＭＳ値の平均と、レフト及びライトでのＲＭＳ値の平均が計算される。該当のブロックのＲＭＳ値が、上記の各ＲＭＳ平均値の双方を超える際には、上記ブロックは３×３カーネルによってスムージングされる。超えないときには、上記ブロックは処理されない。そして、アルゴリズムは次のブロックに移動する。全ての必要な平均値、及びＲＭＳ値は更新される。上記ブロックが３×３カーネルによってスムージングされるなら、そのスムージングされたバージョンは出力画像に置かれる。
【０１３９】
上記Replace[]の関数は、上記の各ステップを実行するものであり、上記出力画像は、アルゴリズムのこのバージョンにより再規定される必要がある。上記アルゴリズムのループには、幾つかの論理的なブランチ（選択肢）がある。そして、Goto[place]及びLabel[place]はそれらのブランチを定義する。与えられた８×８のブロックが何れも処理されない場合、上記プログラムは、単に、上記ループのトップまでに進む。
【０１４０】
icount = 0;
jcount = 0;
skipitcount = 0;
boardercount = 0;
levelitcount = 0;
untest = 0;
difftable = Table [0, [nblocks*ynblocks]];
・
For [i = 2, i < ynblocks, i++,
icount + = 1;
For [j = 2, j < nblocks, j++,
jcount + = 1;
b1=Take[lumimage,[(i-2)*bs+1,(i-2)*bs+bs], [(j-2)*bs+1,(j-2)*bs+bs]];
b2=Take[lumimage,[(i-2)*bs+1,(i-2)*bs+bs], [(j-1)*bs+1,(j-1)*bs+bs]];
b3=Take[lumimage,[(i-2)*bs+1,(i-2)*bs+bs], [(j)*bs+1,(j)*bs+bs]];
b4=Take[lumimage,[(i-1)*bs+1,(i-1)*bs+bs], [(j-2)*bs+1,(j-2)*bs+bs]];
b5=Take[lumimage,[(i-1)*bs+1,(i-1)*bs+bs], [(j-1)*bs+1,(j-1)*bs+bs]];
b6=Take[lumimage,[(i-1)*bs+1,(i-1)*bs+bs], [(j)*bs+1,(j)*bs+bs]];
b7=Take[lumimage,[(i)*bs+1,(i)*bs+bs], [(j-2)*bs+1,(j-2)*bs+bs]];
b8=Take[lumimage,[(i)*bs+1,(i)*bs+bs], [(j-1)*bs+1,(j-1)*bs+bs]];
b9=Take[lumimage,[(i)*bs+1,(i)*bs+bs], [(j)*bs+1,(j)*bs+bs]];
std1=Round[StandardDeviation[Flatten[b1]]];
std2=Round[StandardDeviation[Flatten[b2]]];
std3=Round[StandardDeviation[Flatten[b3]]];
std4=Round[StandardDeviation[Flatten[b4]]];
std5=Round[StandardDeviation[Flatten[b5]]];
std6=Round[StandardDeviation[Flatten[b6]]];
std7=Round[StandardDeviation[Flatten[b7]]];
std8=Round[StandardDeviation[Flatten[b8]]];
std9=Round[StandardDeviation[Flatten[b9]]];
avg1=Round[Mean[Flatten[b1]]];
avg2=Round[Mean[Flatten[b2]]];
avg3=Round[Mean[Flatten[b3]]];
avg4=Round[Mean[Flatten[b4]]];
avg5=Round[Mean[Flatten[b5]]];
avg6=Round[Mean[Flatten[b6]]];
avg7=Round[Mean[Flatten[b7]]];
avg8=Round[Mean[Flatten[b8]]];
avg9=Round[Mean[Flatten[b9]]];
uniformtest=Round[(std1+std2+std3+std4+std6+std7+std8+std9)/8];
If[uniformtest, threshl, untest +=1];
If[uniformtest <= threshl, Goto[boarder],Goto[nextest]];
Label[nextest];
If[std1<=threshl || std2<=threshl ||
std3<=threshl || std4<=threshl || std6<= threshl|| std7<=threshl ||
std8<=threshl || std9<=threshl, Goto[compute], Goto[skipit];
Label[compute];
fixit=1;
moveon +=1;
sigmabag[[moveon]]=std5;
calcount +=1;
region=
Take[lumimage,[(i-1)*bs+1,(i-1)*bs+bs], [(j-1)*bs+1,(j-1)*bs+bs]];
smth=Round[DiscreteConvolve[region, smallfilter,
TransientSamples ↑ False, OptionCentered ↑ True]/norm];
Do[outimage=ReplacePart[outimage,smth[[m, n]],[(i-1)*bs+m,(j-1)*bs+n]]
[m,1,bs],[n,1,bs]];
stdarray[[i,j]]=128;
If[fixit×1, Goto[skipit], Goto[boarder];
Label[boarder];
boardercount +=1;
uniform=0;
uniformcount=0;
uniform=uniform+If[std1,threshl,avg1,0];
uniformcount=uniformcount+If[std1,threshl,1,0];
uniform=uniform+If[std2,threshl,avg2,0];
uniformcount=uniformcount+If[std2,threshl,1,0];
uniform=uniform+If[std3,threshl,avg3,0];
uniformcount=uniformcount+If[std3,threshl,1,0];
uniform=uniform+If[std4,threshl,avg4,0];
uniformcount=uniformcount+If[std4,threshl,1,0];
uniform=uniform+If[std5,threshl,avg5,0];
uniformcount=uniformcount+If[std5,threshl,1,0];
uniform=uniform+If[std6,threshl,avg6,0];
uniformcount=uniformcount+If[std6,threshl,1,0];
uniform=uniform+If[std7,threshl,avg7,0];
uniformcount=uniformcount+If[std7,threshl,1,0];
uniform=uniform+If[std8,threshl,avg8,0];
uniformcount=uniformcount+If[std8,threshl,1,0];
uniform=uniform+If[std9,threshl,avg9,0];
uniformcount=uniformcount+If[std9,threshl,1,0];
unifavg=Round[uniform/uniformcount];
diff=Round[avg5-unifavg];
difftable[[i*j]]=Abs[diff];
If[Abs[diff]=>threshl, Goto[skipit], Goto[levelit]];
Label[levelit];
levelit +=1;
region=
Take[lumimage,[(i-1)*bs,(i-1)*bs+bs+1], [(j-1)*bs,(j-1)*bs+bs+1]];
smth=Round[DiscreteConvolve[region, smallfilter,
TransientSamples ↑ False, OptionCentered ↑ True]/smoothnorm];
Do[outimage=ReplacePart[outimage,smth[[m, n]],[(i-1)*bs+m,(j-1)*bs+n]]
[m,1,bs],[n,1,bs]];
stdarray[[i,j]]=255;
Label[skipit];
skipcount +=1;
];];
Print["layer done","    ","Time=",
[TimeUsed[]-t1/60,"    ","block hit=",calcount];
以下のプログラムは、まさに、上記処理時間の長さや、ビジー、ユニフォーム、又はトランジションと規定された各ブロックの数を教えるものであり、自己診断に使用され、上記アルゴリズムの一部ではない。
【０１４１】
layer done    Time=3.23722    block hit =1198
Print["icount=", icount,"    jcount=",jcount,"  untest=", untest];
Print["skipits=", skipitcount-boardercount-levelitcount-calcount,
"boardercount=", boardercount,"   levelitcount=", levelitcount]
skipits=2721    boardercount=313    levelitcount=292
以上のように、本発明により提供される新規なシステム及び方法は、ＪＰＥＧ圧縮による普通のブロッキングやリンギングの各タイプの各アーチファクトを取り扱うものである。本発明は、選択された、オリジナルなカラー画像が、アーチファクト除去に適当な候補であるか否かに関する第１ステージの調査（図１参照）にて始まり、続いて、上記調査によって適当な候補であれば、前述した２つの形態のアーチファクト除去における一方の発動を始動（トリガー）する。
【０１４２】
オリジナル画像の各画素、より具体的にはそれら画像を構成する輝度チャンネルが調べられて、ビジー、ユニフォーム、又はトランジションの何れかとして特性付けられる。この情報は、最終的な画像において統合されるために、対応する位置に配されている各出力画素を生成するために採用される。
【０１４３】
本明細書では、本発明に係るシステム及び方法、及びそれらの変形例が図示され、記述されているが、本発明の技術的な思想から離れない範囲にて、さらに種々な変更や変形が可能なことは十分に理解されるものである。
【図面の簡単な説明】
【０１４４】
【図１】本発明の要部を示す概略ブロックでのフロー図であって、選択された、ＪＰＥＧ圧縮されたカラー画像が、アーチファクト除去の候補であるべきか否かを最初に決定することを含むことを示す。
【図２】図１にて図示されるように実行される、イエス／ノーの決定に基づく、アーチファクト除去を実行するための好ましいシステム及び方法を概略的に示す、概略ブロックによるフロー図である。
【図３】図２に示された構成に用いられたアーチファクト除去のアルゴリズムを記述するためのものであって、画像における分散の状態を示す平面図である。
【図４】図２に示された構成に用いられたアーチファクト除去のアルゴリズムを記述するためのものであって、上記画像と同一の画像を含むロジックマップを示す平面図である。
【図５】図２に示された構成に用いられたアーチファクト除去のアルゴリズムを記述するためのものであって、採用されたエンハンスメントフィルタのＭＴＦ応答を示すグラフである。
【図６】アーチファクト除去のために選択された、ＪＰＥＧ圧縮されたカラー画像の要部の概略平面図であって、上記画像における幾つかの８×８の各画素ブロックにおいて、実線で示された１つ画素ブロックと、破線で示された８つの画素ブロックを示す。
【図７】図３にて示されたものに沿ったものとして、本明細書において明確にされた、本発明を実施する、システム及び方法の一変形例を示す、概略化されたブロックによるフロー図である。
【図８】図４のシステムと方法において実行されるアルゴリズムのロジックアーキテクチャを示すフロー図である。
【図１】
2004173248.tif 000010
【図２】
2004173248.tif 000011
【図３】
2004173248.tif 000012
【図４】
2004173248.tif 000013
【図５】
2004173248.tif 000014
【図６】
2004173248.tif 000015
【図７】
2004173248.tif 000016
【図８】
2004173248.tif 000017
【外国語明細書】
2004173248.tif 000018
2004173248.tif 000019
2004173248.tif 000020
2004173248.tif 000021
2004173248.tif 000022
2004173248.tif 000023
2004173248.tif 000024
2004173248.tif 000025
2004173248.tif 000026
2004173248.tif 000027
2004173248.tif 000028
2004173248.tif 000029
2004173248.tif 000030
2004173248.tif 000031
2004173248.tif 000032
2004173248.tif 000033
2004173248.tif 000034
2004173248.tif 000035
2004173248.tif 000036
2004173248.tif 000037
2004173248.tif 000038
2004173248.tif 000039
2004173248.tif 000040
2004173248.tif 000041
2004173248.tif 000042
2004173248.tif 000043
2004173248.tif 000044
2004173248.tif 000045
2004173248.tif 000046
2004173248.tif 000047
2004173248.tif 000048
2004173248.tif 000049
2004173248.tif 000050
2004173248.tif 000051
2004173248.tif 000052
2004173248.tif 000053
2004173248.tif 000054
2004173248.tif 000055
2004173248.tif 000056
2004173248.tif 000057
2004173248.tif 000058
2004173248.tif 000059
2004173248.tif 000060
2004173248.tif 000061
2004173248.tif 000062
2004173248.tif 000063
2004173248.tif 000064
2004173248.tif 000065
2004173248.tif 000066
2004173248.tif 000067