(57)【要約】【課題】  比較的簡単な回路で誤差拡散における"はき寄せ"や"テクスチャ"、"ワーム"等による画質劣化要因を排除する。【解決手段】  誤差拡散法により画像データの量子化処理を実行する画像処理方法において、入力画像データに量子化誤差を加算して第１の画像データを生成する工程と、前記第１の画像データを所定の閾値と比較して量子化し、第２の画像データを生成する工程と、前記第２の画像データを逆量子化して第３の画像データを生成する工程と、前記第１の画像データと第３の画像データとの差分により、量子化誤差を画素毎に算出する算出工程と、前記算出された量子化誤差の正負を示す情報を、記憶部へ所定の画素数分格納する格納工程と、前記記憶部に格納された正負を示す情報に基づいて、前記第１の画像データまたは前記閾値の少なくともいずれか一方を補正するための補正値を生成する補正値生成工程とを実行する。【選択図】図１
2005065227.tif 000002
【特許請求の範囲】
【請求項１】
誤差拡散法により画像データの量子化処理を実行する画像処理方法において、
入力画像データに量子化誤差を加算して第１の画像データを生成する工程と、
前記第１の画像データを所定の閾値と比較して量子化し、第２の画像データを生成する工程と、
前記第２の画像データを逆量子化して第３の画像データを生成する工程と、
前記第１の画像データと第３の画像データとの差分により、量子化誤差を画素毎に算出する算出工程と、
前記算出された量子化誤差の正負を示す情報を、記憶部へ所定の画素数分格納する格納工程と、
前記記憶部に格納された正負を示す情報に基づいて、前記第１の画像データまたは前記閾値の少なくともいずれか一方を補正するための補正値を生成する補正値生成工程と、
を実行することを特徴とする画像処理方法。
【請求項２】
前記補正工程は、前記記憶部に格納された正負を示す情報から、正号または負号の少なくともいずれか一方の総数を計数し、当該総数に応じて、前記補正値を生成することを特徴とする請求項１に記載の画像処理方法。
【請求項３】
前記補正工程で生成する前記補正値は、前記計数された正号または負号の総数が多いほど、前記補正値が小さくなるように生成されることを特徴とする請求項２に記載の画像処理方法。
【請求項４】
前記補正工程は、前記計数されて得られる総数が取りうる各値と、当該各値に対応する補正値とを予め関連付けた補正テーブルとして保持し、前記記憶部に格納された正負を示す情報に基づいて計数された総数の値に応じて、前記補正値を前記補正テーブルから選択することを特徴とする請求項２に記載の画像処理方法。
【請求項５】
前記補正テーブルには、前記補正値の絶対値が登録され、前記補正工程では、前記正号または負号の総数に応じて前記絶対値に負号の付与を実行することを特徴とする請求項４に記載の画像処理方法。
【請求項６】
前記補正工程は更に、乱数を生成する工程を備え、前記正負を示す情報と前記生成された乱数とに基づいて、前記補正値を生成することを特徴とする請求項１に記載の画像処理方法。
【請求項７】
前記補正工程では、前記乱数を示すビット列をシフトするシフト量を前記正号または負号の総数の各値ごとに予め定めた乱数シフトテーブルを保持し、前記計数された正号または負号の総数に対応する前記乱数シフトテーブルに定義されたシフト量を参照し、当該シフト量にて前記乱数をシフトさせて得られた値に基づいて、前記補正値を生成することを特徴とする請求項６に記載の画像処理方法。
【請求項８】
前記補正工程は更に、前記シフト量にて乱数をシフトさせて得られた値の絶対値の上限値を所定値以下に制限する制限工程を有することを特徴とする請求項７に記載の画像処理方法。
【請求項９】
前記補正工程では、前記乱数が取りうる値のレンジを制限する制限量を前記正号または負号の総数の各値ごとに予め定めた乱数制限テーブルを保持し、前記計数された正号または負号の総数に対応する前記乱数制限テーブルに定義された制限量を参照し、当該制限量にて前記乱数を制限した値に基づいて、前記補正値を生成することを特徴とする請求項６に記載の画像処理方法。
【請求項１０】
コンピュータに請求項１に記載の画像処理方法を実行させるための画像処理プログラム。
【請求項１１】
請求項１０に記載の画像処理プログラムを格納した、コンピュータで読取り可能な記憶媒体。
【請求項１２】
誤差拡散法により画像データの量子化処理を実行する画像処理装置において、
入力画像データに量子化誤差を加算して第１の画像データを生成する手段と、
前記第１の画像データを所定の閾値と比較して量子化し、第２の画像データを生成する手段と、
前記第２の画像データを逆量子化して第３の画像データを生成する手段と、
前記第１の画像データと第３の画像データとの差分により、量子化誤差を画素毎に算出する算出手段と、
前記算出された量子化誤差の正負を示す情報を、記憶部へ所定の画素数分格納する格納手段と、
前記記憶部に格納された正負を示す情報に基づいて、前記第１の画像データまたは前記閾値の少なくともいずれか一方を補正するための補正値を生成する補正値生成手段と、
を有することを特徴とする画像処理装置。
【請求項１３】
前記補正手段は、前記記憶部に格納された正負を示す情報から、正号または負号の少なくともいずれか一方の総数を計数し、当該総数に応じて、前記補正値を生成することを特徴とする請求項１２に記載の画像処理装置。
【請求項１４】
前記補正手段で生成する前記補正値は、前記計数された正号または負号の総数が多いほど、前記補正値が小さくなるように生成されることを特徴とする請求項１３に記載の画像処理装置。
【請求項１５】
前記補正手段は、前記計数されて得られる総数が取りうる各値と、当該各値に対応する補正値とを予め関連付けた補正テーブルとして保持し、前記記憶部に格納された正負を示す情報に基づいて計数された総数の値に応じて、前記補正値を前記補正テーブルから選択する制御を行うことを特徴とする請求項１３に記載の画像処理装置。
【請求項１６】
前記補正テーブルには、前記補正値の絶対値が登録され、前記補正手段は、前記正号または負号の総数に応じて前記絶対値に負号の付与を実行することを特徴とする請求項１５に記載の画像処理装置。
【請求項１７】
前記補正手段は更に、乱数を生成する手段を備え、前記正負を示す情報と前記生成された乱数とに基づいて、前記補正値を生成することを特徴とする請求項１２に記載の画像処理装置。
【請求項１８】
前記補正手段は、前記乱数を示すビット列をシフトするシフト量を前記正号または負号の総数の各値ごとに予め定めた乱数シフトテーブルを保持し、前記計数された正号または負号の総数に対応する前記乱数シフトテーブルに定義されたシフト量を参照し、当該シフト量にて前記乱数をシフトさせて得られた値に基づいて、前記補正値を生成することを特徴とする請求項１７に記載の画像処理装置。
【請求項１９】
前記補正手段は更に、前記シフト量にて乱数をシフトさせて得られた値の絶対値の上限値を所定値以下に制限する制限手段を有することを特徴とする請求項１８に記載の画像処理装置。
【請求項２０】
前記補正手段は、前記乱数が取りうる値のレンジを制限する制限量を前記正号または負号の総数の各値ごとに予め定めた乱数制限テーブルを保持し、前記計数された正号または負号の総数に対応する前記乱数制限テーブルに定義された制限量を参照し、当該制限量にて前記乱数を制限した値に基づいて、前記補正値を生成することを特徴とする請求項１７に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像処理方法、プログラム、記憶媒体及び画像処理装置に関し、特に入力画像濃度と出力画像濃度等の差を誤差拡散法等により保存しつつ、入力データを２値又は多値データに量子化処理する画像処理方法、プログラム、記憶媒体及び画像処理装置に関する。
【背景技術】
【０００２】
従来、入力された多階調画像データを２値画像データに変換して出力する画像処理装置では、多階調画像を２値画像に変換する方法として、例えば誤差拡散法が用いられている。この誤差拡散法は、注目画素の階調値と、この階調値を２値化処理するための固定の２値化閾値との量子化誤差が、注目画素の近傍画素の階調値に拡散され、これら各階調値を逐次的に２値化する方法である（非特許文献１を参照）。
【０００３】
ところが、多値画像における濃度変化の大きな局所画像を誤差拡散法を利用して２値化する場合、量子化後の画像において、次のような現象が発生していた。基本的に、誤差拡散法を用いた量子化方法は、画素の濃度値を近傍の画素へ分散させる原理に基づくものである。そのため、例えば文字やエッジなどに多く見受けられる、高濃度から低濃度への変化部、低濃度から高濃度への変化部を有する画像においては、２値化後のドット生成に遅延が生じてしまう。
【０００４】
これは、２値化後の画像のドット位置が、多値画像におけるドット位置とは異なってしまうことを意味する。そのため、高濃度から低濃度への変化部では、"はき寄せ"と呼ばれる現象が生じる。はき寄せとは、本来ドットが存在する位置にドットが存在しないことを指すものである。
【０００５】
即ち、白画素の濃度値を０、黒画素の濃度値を１として表わす２値画像の場合は、濃度値が１でなければならない画素が、ドット生成の遅延及び量子化誤差の分配によって、濃度値が０となってしまう現象である。上記はき寄せとは対照的に、低濃度から高濃度への変化部などでは、濃度値が０でなければならない画素の濃度値が１となってしまうことに起因する、画像の潰れや途切れなどの現象が生じる。
【０００６】
こうした現象によって、多値画像を誤差拡散法を用いて量子化すると濃度の再現性が損なわれてしまう場合があった。結果として、このような画像を表示または印刷すると、一般的に擬似輪郭と称される画像として再現されてしまう。
【０００７】
また、特定の濃度パターンを有する多値画像においては、一般的に"テクスチャ"や"ワーム"と呼ばれる縞模様が再生画像に発生してしまう。そして、これらの現象が、再生画像に対する視覚的印象に悪影響を与える場合があった。
【０００８】
そこで、入力画像データの階調値（濃度値）が小さいときには閾値を小さく、入力画像データの階調値が大きいときには閾値を大きくするよう、注目画素の画像データの階調値に応じて２値化閾値を変動させることにより、注目画素のドット生成の遅れを解消する方法（以下、第１の方法と称す）が提案されている（特許文献１及び特許文献２を参照）。
【０００９】
また、注目画素及びその周辺画素における階調変化などの特徴量に基づいて、２値化の閾値及び拡散係数を設定することにより、"テクスチャ"や"ワーム"等の発生を防止する方法（以下、第２の方法と称す）が提案されている（特許文献３を参照）。
【特許文献１】特開平７−１１１５９１号公報
【特許文献２】特開平８−３０７６６９号公報
【特許文献３】特開平９−２４７４５０号公報
【非特許文献１】Ｒ．フロイド（R.Floyd）、Ｌ．スタインベルグ（L.Steinberg）"空間的グレースケールのための適応的アルゴリズム（An Adaptive Algorithm for Spatial Greyscale）"Proceeding of the S.I.D. vol 17/2,1976,p.75-76
【発明の開示】
【発明が解決しようとする課題】
【００１０】
ところが、上記第１の方法では、複雑な演算や判定回路、あるいはルックアップテーブル等が必要である。また、良好な画質を得るために、最適な閾値を設定するための複雑なチューニングが必要であった。また、第１の方法は、"テクスチャ"や"ワーム"等の発生を抑制するという観点においては、ほとんど効果がなかった。
【００１１】
また、上記第２の方法では、特徴量の算出に人間の視覚系に基づくフィルタを用いるため、複雑な演算や判定が必要であった。さらに第２の方法は、"はき寄せ"やドットパターンの消失による擬似輪郭解消の効果はあまりなかった。
【００１２】
本発明は上述した課題を解決するものであり、比較的簡単な回路で誤差拡散における"はき寄せ"や"テクスチャ"、"擬似輪郭"、"ワーム"等による画質劣化要因を排除する画像処理方法及び装置の提供を目的とする。
【課題を解決するための手段】
【００１３】
より具体的に本発明は、誤差拡散法により画像データの量子化処理を実行する画像処理方法において、入力画像データに量子化誤差を加算して第１の画像データを生成する工程と、前記第１の画像データを所定の閾値と比較して量子化し、第２の画像データを生成する工程と、前記第２の画像データを逆量子化して第３の画像データを生成する工程と、前記第１の画像データと第３の画像データとの差分により、量子化誤差を画素毎に算出する算出工程と、前記算出された量子化誤差の正負を示す情報を、記憶部へ所定の画素数分格納する格納工程と、前記記憶部に格納された正負を示す情報に基づいて、前記第１の画像データまたは前記閾値の少なくともいずれか一方を補正するための補正値を生成する補正値生成工程とを実行することを特徴とする。
【発明の効果】
【００１４】
以上説明したように、本発明では注目画素近傍の量子化誤差の負号を抽出し、抽出した負号の総数より負号の偏りが解消する方向に量子化の閾値の補正値を生成するため、簡単な構成で効果的に"はき寄せ"を防止できる。また、負号検出ウインドウや閾値の補正値の最適化により、規則パターンの"テクスチャ"や"擬似輪郭"、ドットが連続する"ワーム"も解消できる。
【発明を実施するための最良の形態】
【００１５】
以下、図面を参照して、本発明の実施の形態を詳細に説明する。
【００１６】
［第１の実施形態］
図１は、本発明の第１の実施形態に係る画像処理装置の構成の一例を示すブロック図である。なお、以下に説明する第１の実施形態並びにその他の実施形態において、本明細書では、量子化誤差の"負号（負を示す情報）"に着目して説明を行うこととする。これは、本発明の理解を容易とすることを目的としている。しかしながら、本発明は量子化誤差が負であることを示す情報によって限定されるものではなく、正号（正を示す情報）に置き換えて実施することも可能である。
【００１７】
さて図１において、１０１は加算器であり、拡散フィルタ１０９から分配された誤差量を入力画像データに加算した画像データ（第１の画像データ）を生成する。１０２は負号カウンタであり、誤差バッファ１０８より注目画素近傍の量子化誤差の負号を抽出しカウントする。１０３は補正値生成回路であり、負号カウンタ１０２のカウント値に応じて量子化器１０５における閾値の補正値を生成する。なお、本実施形態では補正値生成回路１０３で生成した閾値の補正値を、量子化器１０５内に存在する閾値を補正するために量子化器１０５に入力せず、加算器１０４を利用して画像データに加算する構成を採用する。この構成を採用した理由は、従来から設計された量子化器をそのまま用いることが可能であるという設計上のメリットによるものである。なお、閾値の補正値を画像データに加算することが相対的に閾値を補正することを意味するものであることは当業者であれば周知の事実である。
【００１８】
以下、本明細書に記載の実施形態においては、閾値の補正値を画像データに加算する構成を例示して説明する。しかしながら、補正値生成回路１０３で生成された閾値の補正値を量子化器１０５に入力し、量子化器１０５内に記憶された閾値を補正する構成を採用してもよい。また、補正値生成回路１０３で生成された閾値の補正値の一部を画像データに加算し、残りを量子化器１０５に入力する構成を採用してもよい。
【００１９】
１０４は加算器であり、拡散フィルタ１０９からの誤差量が加算された画像データに上記閾値の補正値を加算した画像データを生成する。１０５は量子化器であり、補正後の入力画像データを閾値と比較し、出力コード（第２の画像データ）に変換する。１０６は逆量子化器であり、上記出力コードより量子化代表値（第３の画像データ）を生成する。１０７は減算器であり、上記補正値が加算された画像データより量子化代表値を減算することで量子化誤差を生成する。１０８は誤差バッファであり、上記量子化誤差および１ライン前の画素の量子化誤差負号を約１ライン分遅延し、拡散フィルタ１０９の演算に必要な画素の誤差値を出力する。１０９は拡散フィルタであり、誤差バッファ１０８からの前ラインの拡散対象画素及び現ラインの拡散対象画素の量子化誤差に対応する係数を乗じた総和を加算器１にて次の入力画像データに加算する。
【００２０】
また、図１において、各ライン上に示す数字（例えば、８、１０、３、７等）は、各ラインにおけるデータのビット数を示している。
【００２１】
次に、本実施形態に対応する画像処理装置の具体的な動作を説明する。
【００２２】
まず、本実施形態において、画像処理装置は上記誤差バッファ８より量子化誤差の負号を抽出するため、誤差拡散後の値（拡散フィルタの値）を誤差バッファに格納するのではなく、量子化誤差そのものを誤差バッファに格納する構成になっている。なお、この構成により上記誤差バッファ１０８の容量の削減効果を得ることもできる。もちろん、従来の誤差拡散のように誤差拡散後の値を誤差バッファに格納し、別途量子化誤差負号用のバッファを設ける構成としても良い。
【００２３】
また、図１に示したように以下では入力画像データを８ビットとし、図２の拡散係数を用いて５値の誤差拡散を行うものとする。
【００２４】
図２に拡散フィルタ９の演算に用いる拡散係数の例を示す。図２において、＊で示す画素が注目画素である。当該注目画素の近傍の画素群における量子化誤差値と、当該画素群中の各画素と注目画素との位置関係に対応する係数との積が、注目画素の画素値に加算される。本実施形態において、図２に示した如く周囲の量子化誤差より次の画素の補正値を求める方法（平均誤差最小法）では、誤差拡散法の拡散係数と位置が注目画素中心に点対称の関係になる。
【００２５】
図３に負号カウンタ１０２に入力される負号検出ウインドウの例を示す。この負号検出ウィンドウは、＊を注目画素とした場合に、量子化誤差値の負号をカウントする対象となる、当該注目画素の近傍の画素群を決定するために利用される。誤差バッファ１０８には１ライン前の注目画素位置における量子化誤差のＭＳＢ（最上位ビット）と同様の値が現注目画素（＊）の量子化誤差のＬＳＢ（最下位ビット）側に付加されて入力される。なお、量子化誤差のＭＳＢは即ち、量子化誤差の正負を示すビットである。
【００２６】
以上より、誤差バッファ１０８は、＊を現在の注目画素とした場合、注目画素（＊）近傍の１ライン前の各画素（図中、F、G、H、I、Jの位置に相当）の量子化誤差と、注目画素（＊）近傍の２ライン前の各画素（図中、A、B、C、D、Eの位置に相当）の量子化誤差負号を保持している。
【００２７】
また、注目画素（＊）と同ラインにある２つ前の画素（図中、Ｌの位置に相当）の量子化誤差および注目画素（＊）と同ラインにある１つ前の画素（図中、Ｋの位置に相当）の量子化誤差負号を保持可能である。
【００２８】
ここで、注目画素（＊）が存在するラインから見て、２ライン前の画素群（図中、A、B、C、D、Eの位置に相当）及び注目画素（＊）と同ラインにある１つ前の画素（図中、Ｋの位置に相当）は量子化誤差負号に対応するビットのみを誤差バッファ１０８に記憶すればよい。これは、これらの位置の画素の量子化誤差は図２で示した拡散フィルタ１０９の演算に今後使用しないためである。
【００２９】
そして、この誤差バッファ１０８から最終的に各画素の負号ビットのみが抽出され、負号カウンタ１０２にて負号の数（１の総数）がカウントされる。
【００３０】
なお、誤差バッファ１０８でＡからＬまでの画素の負号を検出するのは、より広範に量子化誤差の正負の変化点をサーチし、より精度の高い判定を実施するためである。正負の変化点をサーチする理由は、当該変化点にドットが生成されるという誤差拡散法の特徴に基づくものである。この処理により、テクスチャやワームといった特定のパターンが生じるのをより好適に防止するためである。もちろん、本発明の画像処理方法や当該画像処理方法を実行する画像処理装置においては、上記の誤差バッファ並びに負号検出ウィンドウの構成によって限定されるものではなく、検出する画素数や領域を任意に設定可能である。当然ながら、正負の変化点を検出するのであるから、正号を検出する構成を採用しても良いことは明らかである。
【００３１】
図４に負号カウンタ１０２の具体的な構成例を示す。図中、４０１から４０８はフルアダー、４０９、４１０はハーフアダーである。入力された量子化誤差の負号A〜Lは、フルアダー４０１〜４０８およびハーフアダー４０９、４１０にて構成されるツリー状の加算器によって負号が１となっている画素の数（即ち、負号総数）がSS3、SS2、SS1、SS0の４ビットで出力される。補正値生成回路１０３は負号カウンタ２で求められた近傍の負号総数を閾値の補正値に変換する。例えば５値の誤差拡散の場合、負号総数をSSとすると閾値の補正値Ｔｈｄは、具体的には下記表１のように補正値テーブルとして表すことができる。
【００３２】
（表１）
SS   0  1  2  3 4 5 6  7  8   9  10  11  12
Thd 24 20 16 12 8 4 0 -4 -8 -12 -16 -20 -24
ここで、負号総数SSが小さい場合は、例えば、図１５（ａ）のように画素値が量子化閾値を下回っているために、平坦部においては周囲の画素の量子化代表値は入力レベル値より小さく、かつ入力レベル値に最も近い量子化代表値が選択され、量子化誤差が正となっている画素が多い。従って、このような場合は、閾値を下げて入力レベル値より大きく、かつ入力レベル値に最も近い量子化代表値を選択され易くする必要がある。
【００３３】
一方、負号総数SSが大きい場合は、図１５（ｂ）のように画素値が量子化閾値を上回っているために、周囲の画素の量子化代表値は入力レベル値より大きく、かつ入力レベル値に最も近い量子化代表値が選択され、量子化誤差が負となっている画素が多い。従って、このような場合は、閾値を上げて入力レベル値より小さく、かつ入力レベル値に最も近い量子化代表値を選択され易くする必要がある。なお、量子化代表値については後述する。
【００３４】
そこで、上記補正値は負号検出ウインドウで負号を検出する画素数（即ちSSの最大値）の１／２より少ない場合は正とし、負号検出ウインドウで負号を検出する画素数の１／２より多い場合は負とする。このように補正値の絶対値は、正負対称が望ましい。
【００３５】
このような補正値の対称性を利用すれば、補正値を正の領域または負の領域のいずれか一方のみを定義することができる。即ち、負号総数SSが負号検出ウインドウで負号を検出する画素数の１／２より小さい場合は加算器１０４にて補正値を加算し、負号総数SSが負号検出ウインドウで負号を検出する画素数の１／２より大きい場合は加算器１０４にて補正値を減算する構成とすることができる。
【００３６】
この構成によれば、上記テーブルの容量を１／２に削減できる。また、前記"はき寄せ"が目立つのは、負号総数SSが０または負号検出ウインドウで負号を検出する画素数に等しい場合（図３の場合は１２）であるので、この場合のみ閾値を補正する構成としても良い。
【００３７】
なお、上記表１では負号総数SSの増加に比例して閾値の補正値Ｔｈｄが減少するようになっているので、テーブルではなく、下記の数式により補正値を生成してもよい。
【００３８】
（数１）
Ｔｈｄ＝２４−ＳＳ×４
また、上述したように、本実施形態では閾値補正値Tｈｄを量子化器１０５に入力するのではなく、量子化器１０５の直前で画素値に加算している。即ち、本実施形態では補正値により直接閾値を補正するのではなく、量子化器１０５の入力画像データを補正することにより、間接的に量子化閾値を補正することを可能とする。これにより、量子化器１０５を従来と全く同じ構成にすることができる。
【００３９】
ここで改めて本実施形態における量子化器１０５への入力データの補正処理の一例を、図１６のフローチャートを参照して説明する。
【００４０】
ステップＳ１６０１においては、注目画素近傍の画素群（図３におけるＡからＬ）について負号数を、負号カウンタ１０２において計数する。ステップＳ１６０２においては、表１に示すような補正値テーブルを参照し、ステップＳ１６０１において計数された負号数に基づいて量子化器１０５へ入力する画像データの補正値（閾値の補正値に相当する）を決定する。なお、補正値の決定に当たっては、後述するように量子化ステップの１／２の値をオフセットとして加算しても良い。ステップＳ１６０３においては、ステップＳ１６０２において決定された補正値を当該入力データに加算することにより、補正を行う。
【００４１】
以上のように補正された入力データは、量子化器１０５において５値のコードに変換される。よって、閾値補正後の入力画像データをｘ＋ｅ＋Ｔｈｄとすると、出力コードｃは、
（数２）
ｘ＋ｅ＋Ｔｈｄ＜３２    の時  ｃ＝０
３２≦ｘ＋ｅ＋Ｔｈｄ＜９６    の時  ｃ＝１
９６≦ｘ＋ｅ＋Ｔｈｄ＜１６０  の時  ｃ＝２
１６０≦ｘ＋ｅ＋Ｔｈｄ＜２２４  の時  ｃ＝３
２２４≦ｘ＋ｅ＋Ｔｈｄ          の時  ｃ＝４
となる。
【００４２】
ここで、従来から知られている８ビットの画像データを量子化する量子化器１０５に対応するために、補正値生成回路１０３にてオフセット量として３２（量子化ステップの１／２の値）を加算した閾値補正値Ｔｈｄ１を生成するとする。この場合、上記式１は閾値補正値Ｔｈｄ１加算後の補正入力画像データをｘ＋ｅ＋Ｔｈｄ１とすると、出力コードｃは、
（数３）
ｘ＋ｅ＋Ｔｈｄ１＜６４    の時  ｃ＝０
６４≦ｘ＋ｅ＋Ｔｈｄ１＜１２８  の時  ｃ＝１
１２８≦ｘ＋ｅ＋Ｔｈｄ１＜１９２  の時  ｃ＝２
１９２≦ｘ＋ｅ＋Ｔｈｄ１＜２５６  の時  ｃ＝３
２５６≦ｘ＋ｅ＋Ｔｈｄ１          の時  ｃ＝４
となる。
【００４３】
即ち、出力コードｃは閾値補正値加算後の補正入力画像データの負号ビットを除いた上位３ビットを抽出すれば良い。例えば、ｘ＋ｅ＋Ｔｈｄ１＝６３、６４、１２８、１９２、２５６の場合、それぞれを２進数で表現すると、「０００１１１１１」、「００１０００００」、「０１００００００」、「０１１０００００」、「１０００００００」となるので、上位３ビットは、「０００」、「００１」、「０１０」、「０１１」、「１００」でそれぞれ、「０」、「１」、「２」、「３」、「４」となる。
【００４４】
但し、後述するように、補正値ｅの値によっては出力コードｃは範囲外の値をとることがある。具体的にはｘ＋ｅ＋Ｔｈｄ１＜０の場合とｘ＋ｅ＋Ｔｈｄ１＞３１９の場合である。
【００４５】
ｘ＋ｅ＋Ｔｈｄ１＜０の場合、負号ビットを除いた上位３ビットを抽出した値は７（１１１）となるが、所望の出力コードは０なので、７の場合は０に変換（量子化誤差の範囲は±６３のため６は存在しないので上位２ビット"１１"なら全てのビットを０に）して出力する。
【００４６】
ｘ＋ｅ＋Ｔｈｄ１＞３１９の場合、負号ビットを除いた上位３ビットを抽出した値は５（１０１）となる（量子化誤差の範囲は±６３のため６は存在しない）が、所望の出力コードは４なので、５の場合は４に変換（上位２ビットが"１０"なら最下位ビットである１を０に変換）して出力する。
【００４７】
表１に上記オフセットを加算したものを表２に示す。また、式１は下記の式４として表現される。
【００４８】
（表２）
SS    0  1  2  3  4  5  6  7  8  9 10 11 12
Thd1 56 52 48 44 40 36 32 28 24 20 16 12  8
（数４）
Ｔｈｄ１＝５６−SS×４
逆量子化器１０６は量子化器１０５の出力コードｃを量子化代表値ｒに変換する。
【００４９】
具体的には
（数５）
ｃ＝０  の時  ｒ＝０
ｃ＝１  の時  ｒ＝６４
ｃ＝２  の時  ｒ＝１２８
ｃ＝３  の時  ｒ＝１９２
ｃ＝４  の時  ｒ＝２５５
となる。
【００５０】
よって、ｃ＝４以外（即ちＭＳＢが０）ではＭＳＢを除いた２ビットの下位に０を６ビット分結合した値が量子化代表値となる。ｃ＝４の場合（即ちＭＳＢが１）では全てのビットを１にした値が量子化代表値となる。
【００５１】
量子化誤差は減算器１０７にて拡散フィルタ１０９による補正値が加算された画像データより上記量子化代表値を減算することで生成される。即ち、上記閾値の補正値は誤差拡散のフィードバックループ内にあるため、入力画像の低周波成分には影響を与えずに前記"はき寄せ"を改善することができる。
【００５２】
量子化器１０５における量子化誤差の範囲は上記閾値の補正により±５６（上記表１の場合。通常は上記Ｔｈｄ１の最大値）に拡大されるため、減算器１０７の出力は７ビット（負号分が１ビット、量子化誤差分が６ビット）必要になる。
【００５３】
また、図３に示したように、閾値補正値の生成には、注目画素が位置するラインの２ライン前の量子化誤差負号が必要となるため、誤差バッファ１０８には１ライン前のMSB（即ち、１ライン前の量子化誤差負号）をLSB側に付加した８ビットを入力する。
【００５４】
拡散フィルタ１０９は、上記誤差バッファ１０８から出力される前ラインの拡散対象画素よりLSBを削除した７ビットに対応する係数を乗じたもの、また直前画素の量子化誤差に対応する係数を乗じたものの総和を求め、入力画像データに加算する。なお、図２の拡散係数の分母は１６であるので、拡散フィルタ１０９からの出力値は整数部７ビット、小数部４ビットの合計１１ビットになるが、整数部７ビットが入力画像データに加算される。
【００５５】
このように、本実施形態に対応する本発明によれば、注目画素近傍の画素群における量子化誤差の負号数に応じて、量子化器への入力データを補正することができるので、量子化器の構成を変更することもなく、比較的簡単な回路で誤差拡散における"はき寄せ"や"テクスチャ"、"ワーム"等による画質劣化要因を排除することが可能となる。
【００５６】
［第２の実施形態］
図５は、本発明の第２の実施形態に係る画像処理装置の構成を示すブロック図である。同図において、１０１から１０９のいずれかの参照番号が付されたブロックは、図１において対応するブロックと同様の機能を果たす。図５において新たに追加されたブロックは５０１から５０４であり、５０１は乱数生成回路、５０２はシフタ、５０３はリミッタ、５０４は加減算器である。以下、第１の実施形態と異なる部分のみ、図１７を参照しつつ説明する。図１７は、本実施形態に対応する補正値生成処理の一例を示すフローチャートである。
【００５７】
まず、ステップＳ１７０１において、負号カウンタ１０２により注目画素近傍の画素群における負号数SSが計数される。続いてステップＳ１７０２では、乱数生成回路５０１が所定ビット数の乱数を生成する。さらに、ステップＳ１７０３において、シフタ５０２が負号カウンタ１０２から入力された負号総数SSに基づいて、シフトテーブル（詳細は後述する。）を参照して上記乱数のシフト量を決定する。続いて、ステップＳ１７０４において該シフト量分だけ乱数をシフトする。ステップＳ１７０５では、リミッタ５０３が上記シフトされた乱数を所定値以下に制限して加減算器５０４に入力する。ステップＳ１７０６において、加減算器５０４は負号カウンタ１０２の負号総数SSが負号検出ウインドウの画素数（即ちSSの最大値）の１／２より少ない場合は上記制限された乱数を加算し、負号検出ウインドウの画素数の１／２より多い場合は上記制限された乱数を減算する。
【００５８】
次に、具体的な動作を説明する。乱数生成回路５０１は０〜３２の整数の乱数を生成する回路で、例えば、ＬＦＳＲ（Linear Feedback Shift Register）を用いたＭ系列擬似ランダム符号生成回路等が用いられる。
【００５９】
図６に９ビットのＭ系列擬似ランダム符号生成回路の一構成例を示す。６０１はシフトレジスタ、６０２はＥＸＯＲ回路である。
【００６０】
Ｍ系列擬似ランダム符号生成回路では、シフトレジスタに０以外の値をロードしておき、シフトレジスタの原始多項式に対応するビットを排他的論理和した結果をビット０に入力し、左シフトすることで次の乱数を得る。本実施形態ではシフトレジスタ６０１の段数が９段なので、９次の原始多項式Ｘ９＋Ｘ４＋１を用いている。
【００６１】
よって、シフトレジスタ６０１のビット８とビット３をＥＸＯＲ回路６０２でＥＸＯＲした結果をビット０の入力とし、次のクロックで左シフトする。本構成により１〜５１１の乱数が、５１１周期で生成される。量子化器１０５への入力データの補正値のレンジは０〜３１であるので、上記シフトレジスタ６０１の任意の５ビットを用いることで５１１周期の０〜３１の乱数を得る。
【００６２】
生成された乱数は、シフタ５０２にて右シフトされる。ここで、図７に示す負号検出ウインドウを用いた場合、負号検出ウインドウの画素数（即ち負号総数の最大値SSmax）は７である。また、負号総数SSのMSBが０の時（SSのとり得る範囲は０００〜０１１、即ち３以下）は負号総数SSが負号検出ウインドウの画素数の１／２以下で、負号総数SSのMSBが１の時（SSのとり得る範囲は１００〜１１１、即ち４以上）は負号総数SSが負号検出ウインドウの画素数の１／２以上と判定できる。
【００６３】
表３に上記シフトテーブルの例を示す。ここではテーブルのエントリーは８つであるが、対称性を利用すれば上記と同様にエントリー数を４つに削減できる。なお、表３に示したシフトテーブルは、負号検出ウインドウの画素数の１／２で対称となるように設定することも可能である。そのように設定した場合は負号総数SSの下位２ビット（但し、MSBが１の場合は対象性を維持するためにビットを反転させる）を参照可能に構成すれば良い。
【００６４】
（表３）
SS  0 1 2 3 4 5 6 7
SFT 0 3 3 1 1 3 3 0
上記表３では、負号総数SSが０または７の時はシフトせずに乱数をそのまま出力する。負号総数SSが３または４の時は乱数を１ビット右シフトして出力する。例えば、生成された乱数が「００１１０」（即ち、６）の場合、１ビット右シフトすることにより、「０００１１」（即ち、３）となる。負号総数SSがそれ以外では乱数を３ビット右シフトして出力する。即ち、負号総数SSが０または７の時は乱数の値が、負号総数SSが３または４の時は乱数を１／２した値が、負号総数SSがそれ以外の時は乱数を１／８した値が出力されることになる。
【００６５】
ここで、負号総数SSの中央部のシフト量を少なめに設定しているのは、特定のテクスチャを解消するようにドットを生成させるためである。例えば、図８に示すようなドットパターンが生成されている場合、画素の量子化誤差の負号はほぼ同じようなパターンになる。従って、図７に示す負号検出ウインドウを図８に適用した場合、即ち、図９に示すウィンドウ内の負号数はSS＝４となる。
【００６６】
このように、本実施形態では負号検出ウインドウ内の画素群における負号の偏りを解消する方向に閾値が変動するので、この場合、結果として量子化の閾値が大きくなり、濃度の高い方のドットが生成されにくくなる。また、このようなパターンは入力レベル値が入力レベル値と隣接する量子化代表値間のほぼ中間の値付近である場合に発生するため、量子化誤差が大きくなり、結果として、拡散フィルタ１０９からの出力値が比較的大きくなってしまう。
【００６７】
従って、このようなパターンを解消するには、補正値も比較的大きな値が必要となるため、シフト量を少なめに設定している。なお、次の画素においては図１０に示すようになり、量子化の閾値が下がって濃度の低い方のドットが生成されにくくなる。
【００６８】
図１１は縦方向に濃度の高いドットが並んでいる場合を示している。ここで図７の負号検出ウインドウを適用すると、図１２に示すパターンが得られる。この場合、負号が検出される画素は４つである。量子化器１０５の入力データは補正値が減算されることとなるので、相対的に量子化の閾値が上がって濃度の高い方のドットが生成されにくくなる（そこで、図１２では、＊で示される注目画素を白色で示している。）。一方、次のサイクルでは、図１３に示すパターンとなるため、負号が検出される画素は３つである。量子化器１０５の入力データは補正値が加算されることとなるので、相対的に量子化の閾値が下がって濃度の低い方のドットが生成されにくくなる（そこで、図１３では、＊で示される注目画素をグレーで示している。）。さらに、補正値には乱数を使用しているため、図１１に示すような特定のパターンは崩され、ほぼランダムなパターンとなる。
【００６９】
但し、補正値の絶対値が大きい場合、誤差の蓄積なしに即座にドットを生成してしまうため、エッジ部にドットが張り付いたり、滑らかなグラデーション部の量子化代表値付近の入力濃度において３つの量子化代表値が混在して、ざらついた画像になったりしてしまう（過補正）という問題がある。
【００７０】
そこで、本実施形態では、リミッタ５０３により上記シフトされた乱数の最大値に一定の制限を設けることにより、このような弊害を防止する。上記の例ではリミッタ５０３の前では補正値の絶対値は０〜３１であるが、リミッタ５０３によって、例えば０〜２４になるように制限される。この制限値は、通常、滑らかなグラデーションの出力濃度値より決定される。
【００７１】
なお、上記シフタ５０２は右シフトにて説明したが、これに限らず、例えば左シフトで構成しても良い。例えば乱数のレンジが０〜３（「０００００」から「０００１１」）の場合、左シフト量を下記表４としてもほぼ同様の効果が得られる。また、この場合、補正値の絶対値のレンジは０〜２４になる（例えば、「０００１１」は、３ビット左シフトされると「１１０００」となる）ので、上記制限値が２４の場合は、リミッタ５０３が不要になる。但し、左シフトの場合には上記のように乱数のレンジを低く押さえることが必要である。
【００７２】
（表４）
SS  0 1 2 3 4 5 6 7
SFT 3 0 0 2 2 0 0 3
また、本実施形態では、乱数をシフトしてからリミッタ５０３を用いて値を制限したが、乱数の最大値を制限してからビットをシフトする構成でも良い。この場合、シフト後の補正値の絶対値が所定値以下となるようにリミッタ５０３で制限する。
【００７３】
また、シフタ５０２の代わりに乗算器を用いても良い。この場合、シフトテーブルの代わりに係数テーブルを用いることになるが、適切な係数を設定することにより補正値の絶対値が所定値以下に制限することも可能である。この場合も、リミッタ５０３は不要になる。
【００７４】
加減算器５０４は負号総数SSのMSBが０の場合は上記制限された補正値を加算し、MSBが１の場合は上記制限された補正値を減算する。即ち、負号検出ウインドウの画素数が（２のべき乗-１）の場合は、負号総数SSのMSBでファンクションを切り替えるようにすれば良い。
【００７５】
また、上記加減算の簡略化のため、負号総数SSのMSBで上記制限された補正値を反転して加算する構成でも良い。この場合、補正値は正負非対称になってしまうが、閾値を補正する構成（誤差拡散ループの内側で補正）であるため、出力濃度は変わらない。
【００７６】
以上のように、本実施形態に対応する本発明によれば、乱数生成器を利用して、注目画素に隣接する画素群における量子化誤差の負号数に応じて、量子化器への入力データを補正することができるので、量子化器の構成を変更することもなく、比較的簡単な回路で誤差拡散における"はき寄せ"や"テクスチャ"、"ワーム"等による画質劣化要因を排除することが可能となる。また、シフトや乗算等を用いることで、補正値加算による副作用を最小化し、画質劣化要因に応じた最適な乱数レンジにて補正可能となる。
【００７７】
［第３の実施形態］
図１４は、本発明の第３の実施形態に係る画像処理装置の構成を示すブロック図である。図において、１０１から１０９、５０１及び５０４のいずれかの参照番号が付されたブロックは、図１及び図５において対応するブロックと同様の機能を果たす。図１４において新たに追加されたブロックは１４０１であり、この１４０１はリミッタである。以下、第２の実施形態と異なる部分のみ説明する。
【００７８】
本実施形態では、第２の実施形態において使用したシフトテーブルの代わりにリミットテーブルを導入し、負号総数SSに応じた制限値でリミットした乱数を補正値として使用する。
【００７９】
以下、本実施形態に対応する本発明の具体的な動作を説明する。リミッタ１４０１は負号カウンタ１０２より入力された負号総数SSに基づいてリミットテーブル（詳細は、後述する。）を参照し、上記乱数の制限値を決定する。そして、該制限値に従い乱数をリミットした後、加減算器５０４に入力する。加減算器５０４は負号総数SSが負号検出ウインドウの画素数（即ちSSの最大値）の１／２より少ない場合は上記リミットされた乱数を加算し、負号検出ウインドウの画素数の１／２より多い場合は上記リミットされた乱数を減算する。
【００８０】
上記第２の実施形態と同様に、負号検出ウインドウの画素数が「２ｎ−１」の場合は、負号総数SSのMSBでファンクションを切り替えるようにすれば良い。また、上記加減算の簡略化のため、負号総数SSのMSBで上記リミットされた乱数を反転して加算する構成でも良い。この場合、補正値は正負非対称になってしまうが、閾値を補正する構成（誤差拡散ループの内側で補正）であるため、出力濃度は変わらない。また、負号総数SSのMSBが「１」の時の制限値を予め「−１」補正しておけば、反転を加算するだけで正負対称になる。
【００８１】
表５に負号検出ウインドウの画素数が７の場合のリミットテーブルの例を示す。上述した第１の実施形態及び第２の実施形態で説明したので詳細な説明は省略するが、本リミットテーブルも対称性を利用して、テーブルのエントリーを４つに削減できる。
【００８２】
（表５）
SS   0 1 2  3  4 5 6  7
LMT 24 3 3 15 15 3 3 24
このように、本実施形態では乱数を負号総数SSに応じてリミットする構成としたので、すべての負号総数SSにおいて補正値が制限値となる確率が上がり、補正が有効になる画素が増える。これにより、負号検出ウィンドウで検出される画素群の負号総数SSの偏りが大きい部分では上記の"はき寄せ"を防止し、負号総数SSの偏りが小さい部分では"テクスチャ"や"擬似輪郭"を解消し、負号総数SSの偏りが中程度の部分では"ワーム"と呼ばれる縞模様の解消にも効果を発揮する。
【００８３】
［その他の実施形態］
なお、本発明は、複数の機器（例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機、ファクシミリ装置など）に適用してもよい。
【００８４】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体（または記録媒体）を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００８５】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【図面の簡単な説明】
【００８６】
【図１】本発明の第１の実施形態に係わる画像処理装置の構成を説明するブロック図である。
【図２】拡散フィルタ１０９の演算に用いる量子化誤差の位置と拡散係数の例を示す図である。
【図３】負号検出ウインドウの例を示す図である。
【図４】負号カウンタ１０２の一構成例を示す図である。
【図５】本発明の第２の実施形態に係わる画像処理装置の構成を説明するブロック図である。
【図６】乱数生成回路５０１の一構成例を示す図である。
【図７】第２の負号検出ウインドウの例を示す図である。
【図８】テクスチャの例を示す図である。
【図９】第２の負号検出ウインドウ例でのテクスチャの様子を示す図である。
【図１０】図９の次のサイクルのテクスチャの様子を示す図である。
【図１１】別のテクスチャの例を示す図である。
【図１２】第２の負号検出ウインドウ例での図１１のテクスチャの様子を示す図である。
【図１３】図１２の次のサイクルのテクスチャの様子を示す図である。
【図１４】本発明の第３の実施形態に係わる画像処理装置の構成を説明するブロック図である。
【図１５】画素値、量子化閾値、量子化代表値との関係を説明するための図である。
【図１６】本発明の第１の実施形態に対応する補正値生成処理の一例を示すフローチャートである。
【図１７】本発明の第２の実施形態に対応する補正値生成処理の一例を示すフローチャートである。
【図１】
2005065227.tif 000003
【図２】
2005065227.tif 000004
【図３】
2005065227.tif 000005
【図４】
2005065227.tif 000006
【図５】
2005065227.tif 000007
【図６】
2005065227.tif 000008
【図７】
2005065227.tif 000009
【図８】
2005065227.tif 000010
【図９】
2005065227.tif 000011
【図１０】
2005065227.tif 000012
【図１１】
2005065227.tif 000013
【図１２】
2005065227.tif 000014
【図１３】
2005065227.tif 000015
【図１４】
2005065227.tif 000016
【図１５】
2005065227.tif 000017
【図１６】
2005065227.tif 000018
【図１７】
2005065227.tif 000019