画像処理装置
【課題】画像処理装置において、インデックス変換(パレットの作成を含む。)の処理効率を向上するための技術を提供する。
【解決手段】画像処理装置は、スキャンされた画像データの入力を受け付ける制御部141と、画像データの階調値のヒストグラムを生成するヒストグラム生成部145と、画像データをインデックスカラー形式の画像データに変換するために用いられるパレットを生成するパレット生成部143とを有する。ここで、パレット生成部143は、ヒストグラム生成部145が処理対象の画素の階調値についてヒストグラムを生成する時に、当該階調値が始めて出現した階調値である場合に、当該階調値にインデックスを割り付ける。
【解決手段】画像処理装置は、スキャンされた画像データの入力を受け付ける制御部141と、画像データの階調値のヒストグラムを生成するヒストグラム生成部145と、画像データをインデックスカラー形式の画像データに変換するために用いられるパレットを生成するパレット生成部143とを有する。ここで、パレット生成部143は、ヒストグラム生成部145が処理対象の画素の階調値についてヒストグラムを生成する時に、当該階調値が始めて出現した階調値である場合に、当該階調値にインデックスを割り付ける。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、入力された画像データをインデックスカラー形式の画像データに変換する技術に関する。
【背景技術】
【0002】
スキャナー、プリンター、コピー機、複合機等の画像処理装置において、メモリーなどの記憶装置で保持する画像データのサイズを削減するため、パレットと呼ばれるテーブル(色ごとに色番号としてのインデックスが対応付けられている)を用いて、入力された画像データ(例えば、RGB各24ビットのフルカラーの画像データ)を、当該画像データに含まれる各画素をインデックスで表現したインデックスカラー形式の画像データに変換する技術が知られている。
【0003】
また、画像処理装置において、入力された画像データに対して、当該画像データに含まれる各画素の色の出現頻度分布に基づいて所定の画像処理を行うため、入力された画像データに含まれる各画素の色のヒストグラムを生成する技術が知られている(例えば、特許文献1)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2009−37277号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、入力された画像データのヒストグラム生成も、インデックス変換(パレットの作成を含む。)も、入力された画像データに含まれる各画素について処理を行う必要があるため、画像処理装置の処理負荷が大きい。例えば、ヒストグラム生成およびインデックス変換(パレットの作成を含む。)の両方を行う場合には、画像処理装置の処理負荷がより大きい。
【0006】
本発明は、インデックス変換(パレットの作成を含む。)の処理効率を向上するための技術を提供することを目的とする。
【課題を解決するための手段】
【0007】
上記の課題を解決するための本発明の第1態様は、多値画像データを処理する画像処理装置であって、階調値毎にその出現度数を記憶するヒストグラム記憶手段と、インデックス値毎にその階調値を記憶するパレット記憶手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数を出力する、出力手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数に1加算する、ヒストグラム生成手段と、前記出力手段により出力された出現度数が0である場合に、当該階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、を有することを特徴とする。
【0008】
上記の課題を解決するための本発明の第2態様は、多値画像データを処理する画像処理装置であって、階調値毎にその出現度数を記憶するヒストグラム記憶手段と、インデックス値毎に、前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値を記憶する、パレット記憶手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値と上位の階調値が等しい複数の階調値の出現度数を出力する、出力手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数に1加算する、ヒストグラム生成手段と、前記出力手段により出力された複数の出現度数がいずれも0である場合に、当該階調値を前記所定ビット数削減した階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、を有することを特徴とする。
【0009】
ここで、上記の画像処理装置であって、前記ヒストグラム記憶手段は、前記所定ビット数の最小値から最大値までの値ごとに、並列アクセス可能な複数の記憶領域に分割されており、また、前記複数の記憶領域のそれぞれは、前記画像データに含まれる画素データの階調値のビット数よりも前記所定ビット数小さい階調値毎に、その出現度数を記憶し、前記出力手段は、前記画像データに含まれる画素データ毎に、前記複数の記憶領域それぞれに並列にアクセスし、その階調値を前記所定ビット数削減した階調値の出現度数を並列に出力する、ことを特徴としていてもよい。
【0010】
上記の課題を解決するための本発明の第3態様は、多値画像データを処理する画像処理装置であって、前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値毎に、その出現度数を記憶する、ヒストグラム記憶手段と、インデックス値毎に、前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値を記憶する、パレット記憶手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値の出現度数を出力する、出力手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値の出現度数に1加算する、ヒストグラム生成手段と、前記出力手段により出力された出現度数が0である場合に、当該階調値を前記所定ビット数削減した階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、を有することを特徴とする。
【0011】
なお、上記のいずれかの画像処理装置では、1フレームの画像データ毎に、ヒストグラムおよびパレットが生成される。
【図面の簡単な説明】
【0012】
【図1】本発明の第1実施形態に係る画像処理装置の、ハードウェアの概略構成の一例を示すブロック図。
【図2】画像処理装置におけるヒストグラム生成およびパレット生成、インデックス変換に関連する構成の一例を示すブロック図。
【図3】画像処理装置におけるヒストグラム生成およびパレット生成の処理手順を説明する図。
【図4】画像処理装置におけるインデックス変換の処理手順を説明する図。
【図5】ヒストグラムおよびパレットを格納するSRAMのサイズを説明する図。
【図6】ヒストグラムおよびデータ量を削減したパレットを格納するSRAMのサイズを説明する図(変形例1)。
【図7】データ量を削減したパレット作成の処理手順を説明する図(変形例1)。
【図8】ヒストグラムを格納するSRAMの構成およびアクセス手順を説明する図(変形例1)。
【図9】データ量を削減したヒストグラムおよびパレットを格納するSRAMのサイズを説明する図(変形例2)。
【図10】画素データのデータ量を削減した場合のヒストグラムおよびパレット作成の手順を説明する図(変形例2)。
【図11】本発明の第2実施形態に係る画像処理装置におけるパレット生成およびインデックス変換に関連する構成の一例を示すブロック図。
【図12】画像処理装置におけるパレット生成およびインデックス変換の処理手順を説明する図。
【発明を実施するための形態】
【0013】
<第1実施形態>
本発明の第1実施形態について、図面を参照しながら説明する。
【0014】
図1は、本発明の第1実施形態に係る画像処理装置1の、ハードウェアの概略構成の一例を示すブロック図である。本実施形態の画像処理装置1は、スキャナー機能と印刷機能を有するいわゆるコピー機である。
【0015】
画像処理装置1は、コントローラー10と、スキャナー20と、印刷エンジン30と、操作パネル40とを有する。
【0016】
コントローラー10は、CPU11と、DRAM12と、ROM13、メモリー制御ASIC(Application Specific Integrated Circuit)14と、スキャナー制御ASIC15と、印刷制御ASIC16と、入出力(I/O)制御ASIC17と、ネットワークインターフェイス(I/F)18とを有する。
【0017】
CPU11は、所定のプログラムを実行して、画像処理装置1を統合的に制御する。DRAM12は、データおよびプログラム等を一時的に記憶する揮発性メモリーであり、例えば、DDR−SDRAMである。ROM13は、データやプログラム等を格納している不揮発性メモリーであり、例えば、フラッシュメモリーである。ROM13は、メモリー制御ASIC14ではなく、I/O制御ASIC17に接続されていてもよい。
【0018】
メモリー制御ASIC14は、接続されているDRAM12およびROM13へのアクセスを制御するユニットである。メモリー制御ASIC23は、例えば、スキャナー制御ASIC15から出力された画像データを、DRAM12に格納する。また、例えば、DRAM12に格納された画像データを、印刷制御ASIC16に出力する。また、例えば、ネットワークI/F18およびI/O制御ASIC17を介してネットワーク上のホストPCから送られてきた、印刷対象の画像データをDRAM12に格納する。
【0019】
なお、後述するように、本実施形態では、メモリー制御ASIC14は、スキャナー制御ASIC15から出力された画像データについて、ヒストグラムの生成、パレットの生成、およびインデックス変換を行うための機能を有する。
【0020】
スキャナー制御ASIC15は、スキャナー20による画像読み取りを制御し、コントローラー10において処理可能な形式の画像データを生成するユニットである。スキャナー制御ASIC15は、例えば、スキャナー20が有するイメージセンサー、モーター、A/D変換器、ADF(Auto Document Feeder)などを制御して、原稿の画像読み取りを行う。また、例えば、スキャナー20から出力された画像データに、所定の画像処理(例えば、シェーディング補正、ガンマ補正など)を施し、メモリー制御ASIC14に出力する。
【0021】
印刷制御ASIC16は、印刷エンジン30において処理可能な印刷データを生成し、印刷エンジン30による印刷を制御するユニットである。印刷制御ASIC16は、例えば、DRAM12から画像データを読み出し、所定の画像処理(例えば、色変換、圧縮、伸張、2値化)を施して印刷データを生成する。そして、生成した印刷データを印刷エンジン30に送信して印刷を実行させる。
【0022】
I/O制御ASIC17は、I/O装置やI/F装置を制御するユニットである。I/O装置としては、例えば、操作パネル40、ハードディスク装置等がある。I/F装置としては、ネットワークI/F18、USBI/F、パラレルI/F等がある。I/O制御ASIC17は、例えば、ネットワークI/F18を介して受信した画像データを、DRAM12にDMA(Direct Memory Access)転送する。また、例えば、操作パネル40から出力される信号をCPU11に転送したり、CPU11から送られた描画データを操作パネル40に転送したりする。
【0023】
ネットワークI/F18は、ホストPCなどのネットワーク上の装置と各種データの送受信を行うユニットである。ネットワークI/F18は、例えば、ホストPCから受信した印刷ジョブをDRAM12に転送する。
【0024】
スキャナー20は、筐体の上面に画像読取面を備えたいわゆるフラットベッド型イメージスキャナーである。スキャナー20は、ADFを備えていてもよい。ADFを使用しない場合、スキャナー20は、画像読取面上に固定された原稿に下から光を当てて、イメージセンサーを移動させながら画像を読み取る。また、ADFを使用する場合、スキャナー20は、イメージセンサーを所定の位置に固定し、ADFにより原稿を搬送しながら画像を読み取る。スキャナー20は、読み取った画像データをA/D変換して、スキャナー制御ASIC15に出力する。
【0025】
印刷エンジン30は、印刷制御ASIC16から供給されたデータを、印刷媒体に印刷するユニットである。印刷エンジン30は、例えば、トナーカートリッジ、感光体ドラム、レーザー光照射機構、転写機構、紙送り機構、給排紙機構などを有するレーザー方式のエンジンである。もちろん、印刷エンジン30は、レーザー方式に限られず、インクジェット方式であってもよい。
【0026】
操作パネル40は、ユーザーと画像処理装置1との間の入出力インターフェイスとして、画像処理装置1の筐体に設けられているユニットである。操作パネル40は、例えば、液晶ディスプレイ(Liquid Crystal Display)や有機ELディスプレイ(Electro-Luminescence Display)などのディスプレイと、タッチパネルと、ハードスイッチ等を有する。
【0027】
上記の画像処理装置1の構成は、本願発明の特徴を説明するにあたって主要構成を説明したのであって、上記に限られない。また、一般的な画像処理装置が備える他の構成を排除するものではない。
【0028】
図2は、画像処理装置1におけるヒストグラム生成およびパレット生成、インデックス変換に関連する構成の一例を示すブロック図である。なお、スキャナー制御ASIC15から出力される画像データは、画素データ(RGB各色の階調値を有するデータ)で構成されている。
【0029】
メモリー制御ASIC14は、制御部141と、インデックス変換部142と、パレット生成部143と、SRAM144と、ヒストグラム生成部145と、SRAM146とを有する。
【0030】
制御部141は、メモリー制御ASIC14を統合的に制御するとともに、DRAM12へのアクセスを制御する回路である。もちろん、DRAM12へのアクセス制御を行う部分は、制御部141と独立していてもよい。
【0031】
例えば、制御部141は、スキャナー制御ASIC20から順次出力される画素データを受け付ける。また、受け付けた各画素データと同一の画素データを、DRAM12、ヒストグラム生成部145、およびパレット生成部143にそれぞれ出力する。また、制御部141は、パレット生成部143によるパレット作成が終了すると、DRAM12に格納した1フレーム(1ページ)の画像データに含まれる画素データを順次リードし、インデックス変換部142に出力する。
【0032】
また、制御部141は、インデックス変換部142から出力されるインデックス変換後の画像データの各インデックス値を順次受け付け、DRAM12に出力する。また、制御部141は、作成が完了したパレットをSRAM144から取得し、インデックス変換が完了した画像データに対応付けて、DRAM12に格納する。また、作成が完了したヒストグラムをSRAM146から取得し、インデックス変換された画像データと対応付けて、DRAM12に格納してもよい。
【0033】
ヒストグラム生成部145は、制御部141から順次出力される画素データに基づいて、階調値毎の画素の度数(頻度)を、SRAM146に記録する回路である。ヒストグラム生成部145は、制御部141から画素データを受け付けると、当該画素データの階調値に対応する度数データをSRAM146からリードしてパレット生成部143に出力する。その後、リードした度数データに1加算した度数データをSRAM146にライトする。なお、ヒストグラム生成部145は、1フレーム(1ページ)分の画像データ毎にヒストグラムを生成する。
【0034】
SRAM146は、画像データに含まれる画素データの階調値のヒストグラムを格納するための揮発性メモリーである。SRAM146は、アドレス(階調値)ごとにデータ(度数)を格納する領域を有する(図3参照)。
【0035】
パレット生成部143は、制御部141から順次出力される画素データと、当該画素データについてヒストグラム生成部145から出力される度数データに基づいて、階調値毎にインデックス値を割り付け、各インデックス値に対応する階調値をSRAM144に記録する回路である。パレット生成部143は、処理対象の画素データ(階調値)の度数データが0である場合(すなわち、初めてその階調値の画素を検出した場合)に、当該階調値にインデックスを割り当て、当該階調値をインデックス値に対応付けてSRAM144に格納する。なお、パレット生成部143は、1フレーム(1ページ)分の画像データ毎にパレットを生成する。
【0036】
SRAM144は、画像データに含まれる画素データの階調値とインデックス値とを対応づけたパレットを格納するための揮発性メモリーである。SRAM144は、アドレス(インデックス値)ごとにデータ(階調値)を格納する領域を有する(図3参照)。
【0037】
インデックス変換部142は、制御部141から順次出力される画素データを、SRAM144のパレットを参照してインデックス値に変換し、制御部141を介してDRAM12に出力する回路である。
【0038】
ここで、SRAM146およびSRAM144について具体例を挙げて説明する。図5は、ヒストグラムおよびパレットを格納するSRAMのサイズを説明する図である。本図は、画像データ(A4/600dpi/32Mpixel/RGB各8bit)を8bitのインデックスカラー画像データに変換する場合を示している。
【0039】
SRAM146は、少なくとも、25bit(225は32Mpixelを表現できる)の度数データを、224(16777216階調)アドレス分格納できる容量である。
【0040】
また、SRAM144は、少なくとも、24bit(RGB各8bit)の階調値データを、28(256のインデックス)アドレス分格納できる容量である。
【0041】
上記のメモリー制御ASIC14の構成は、本願発明の特徴を説明するにあたって主要構成を説明したのであって、上記に限られない。また、一般的なメモリー制御ASICが備える他の構成を排除するものではない。例えば、インデックス変換部142のSRAM144へのアクセス制御を行う部分、パレット生成部143のSRAM144へのアクセス制御を行う部分は、独立した1つの回路となっていてもよい。また、ヒストグラム生成部145のSRAM146へのアクセス制御を行う部分は、独立した1つの回路となっていてもよい。
【0042】
図3は、画像処理装置1におけるヒストグラム生成およびパレット生成の処理手順を説明する図である。本図は、1フレームの画像データを処理する場合を説明している。
【0043】
制御部141は、スキャナー制御ASIC15から順次出力される画素データを受け付け、各画素データと同一の画素データを、DRAM12、ヒストグラム生成部145、およびパレット生成部143にそれぞれ出力する。すなわち、制御部141は、画素データを順次DRAM12にライトして、1フレームの画像データ121をDRAM12に格納する。また、この制御部141の処理と並行して、画像データ121について、ヒストグラム生成部145によりヒストグラムが生成され、パレット生成部143によりパレットが生成される。
【0044】
ヒストグラム生成部145は、画素データごとにS1〜S4の処理を実行する。
【0045】
S1では、ヒストグラム生成部145は、制御部141から出力された画素データを受け付ける。
【0046】
S2では、ヒストグラム生成部145は、S1で受け付けた画素データの階調値をアドレスとして設定して、当該アドレスに格納されている度数データをSRAM146からリードする。
【0047】
S3では、ヒストグラム生成部145は、S2でリードした度数データをパレット生成部143に出力する。
【0048】
S4では、ヒストグラム生成部145は、S2でリードした度数データに1を加算する。また、S1で受け付けた画素データの階調値をアドレスとして設定して、SRAM146の当該アドレスに、1加算後の度数データをライトする。
【0049】
パレット生成部143は、画素データごとにS11〜S13の処理を実行する。
【0050】
S11では、パレット生成部143は、制御部141から出力された画素データを受け付け、また、当該画素データに対応する、S3でヒストグラム生成部145から出力された度数データを受け付ける。
【0051】
S12では、まず、パレット生成部143は、S11で受け付けた度数データが0であるか否かを判定する。そして、度数データが0である場合、パレット生成部143は、S11で受け付けた画素データにインデックス値を割り当て、当該インデックス値をアドレスとして設定して、SRAM144の当該アドレスに、画素データの階調値をライトする。そして、処理をS13に進める。一方、度数が0でない場合、パレット生成部143は、インデックス値を割り当て済みと判定し、次の画素データの処理のため、処理をS11に戻す。
【0052】
本実施形態では、インデックスの数は、予め定めた数(例えば、256個)である。パレット生成部143は、最小のインデックス値から昇順に(例えば、0〜255の順に)割り当てを行う。また、パレット生成部143は、S12において割り当てるべきインデックス値を保持している。もちろん、インデックス値の割り当て順序は、昇順に限られず、例えば、降順であってもよいし、所定の規則に基づく順序であってもよい。
【0053】
S13では、パレット生成部143は、S12において割り当て済みのインデックス値を1インクリメントする。ここで、パレット生成部143は、1インクリメントした後のインデックス値が、予め定めた最大値(例えば、インデックス値が256個の場合、255)を超え、かつ、処理対象の画素データが1フレームの画像データ中の最後の画素でない場合、パレットの作成を中止する。すなわち、パレット生成部143は、次の画素データ以降S11〜13の処理を行わない。
【0054】
上記のようにして、1フレームの画像データがDRAM12に格納され、また、当該画像データのヒストグラムおよびパレットが生成される。なお、パレットの作成が中止された場合、制御部141は画素データをパレット生成部143に出力しないようにしてもよいし、パレット生成部143は画素データを受け付けないようにしてもよい。
【0055】
図4は、画像処理装置1におけるインデックス変換の処理手順を説明する図である。本図は、図3におけるパレット作成の完了後、1フレームの画像データを処理する場合を説明している。
【0056】
制御部141は、パレット生成部143によるパレット生成が完了した場合、DRAM12に格納されている画像データ121に含まれる画素データを順次リードしてインデックス変換部142に出力する。また、インデックス変換部142から順次出力されるインデックス値をDRAM12にライトして、画像データ121をインデックス変換したインデックス画像データ122をDRAM12に格納する。なお、インデックス画像データ122の生成が終了した場合、画像データ121をDRAM12から削除してよい。
【0057】
インデックス変換部142は、画素データごとにS21〜S23の処理を実行する。
【0058】
S21では、インデックス変換部142は、制御部141から出力された画素データを受け付ける。
【0059】
S22では、インデックス変換部142は、インデックス値を最小値から最大値まで(例えば、0〜255)順次変化させ、インデックス値(アドレス)毎に、SRAM144から階調値データをリードする。また、インデックス変換部142は、リードした階調値データ毎に、当該階調値データとS21で受け付けた画素データの階調値との比較を行い、階調値が一致するインデックス値を特定する。すなわち、インデックス変換部142は、階調値が一致するインデックス値が見つかるまで、繰り返しSRAM144にアクセスする。
【0060】
S23では、インデックス変換部142は、S21で受け付けた画素データに対応するS22で特定したインデックス値を、制御部141に出力する。
【0061】
上記のようにして、1フレームの画像データ121が、インデックス画像データ122に変換されてDRAM12に格納される。なお、制御部141は、インデックス画像データ122の生成の完了後、パレットをSRAM144から読み出し、当該インデックス画像データ122と関連付けて、DRAM12に格納する。
【0062】
以上、本発明の第1実施形態について説明した。本実施形態によれば、インデックス変換(パレットの作成を含む。)の処理効率を向上することができる。すなわち、本実施形態では、ヒストグラム生成と並行して、ヒストグラムの値を参照しながらパレット作成が行われる。このような構成により、パレット作成時に、画素データ毎に、当該階調値に対応するインデックス値が割り当て済みであるか否か判定する必要がなくなり、インデックス変換処理が全体的に効率化される。
【0063】
ところで、上記の第1実施形態では、インデックス変換部142は、画素データ毎に、対応するインデックス値が見つかるまで繰り返しSRAM144にアクセスしている(図4のS22)。そのため、例えば、1フレームの画像データにおいて、インデックス値が大きい階調値の画素データの割合が多い場合には、処理負荷が大きくなる。
【0064】
そこで、複数のインデックス値(アドレス)の階調値データを並列にリードできるようにSRAM144を構成するとともに、並列にリードした各階調値データと処理対象の画素データの階調値とを並列に比較できるようにインデックス変換部142を構成してもよい。
【0065】
具体的には、例えば、24bit(RGB各8bit)の階調値データを、28(256のインデックス)アドレス分格納できる容量が必要な場合、SRAM144を、24bitの階調値データを格納するフリップフロップ回路を256個設けた構成とする。各フリップフロップ回路は、それぞれ0〜256のインデックス値に対応する。また、各フリップフロップ回路には並列アクセスできる構成とする。
【0066】
インデックス変換部142には、各フリップフロップ回路に対応する比較回路を設ける。インデックス変換部142は、処理対象の画素データを各比較回路に入力し、また、各フリップフロップ回路から並列に読み出された階調値データを各比較回路に入力する。そして、各比較回路から並列に出力される比較結果を参照して、処理対象の画素データのインデックス値を特定する。
【0067】
上記のようにSRAM144とインデックス変換部142を構成すれば、各画素データのインデックス値を特定するためにSRAM144にアクセスする回数は1回となり、処理負荷が軽減される。
【0068】
次に、上記の第1実施形態の変形例(変形例1、2)について説明する。
【0069】
第1実施形態では、元画像データの階調数(図5の例では、24bit)をそのまま使用して、パレット作成が行われる。すなわち、インデックスの最大数(図5の例では、256個)に比べて出現が予想される階調数が大幅に多いため、パレット生成中に割り当て可能なインデックスが足りなくなり、パレットを完成できない可能性が高い。
【0070】
そこで、変形例1では、パレット生成の際に、元画像データの階調数を削減する。変形例2では、ヒストグラム生成の際に、元画像データの階調数を削減する。以下、具体的に、第1実施形態と異なる点を中心に説明する。
【0071】
<変形例1>
本変形例では、図6に示すように、SRAM144は、階調数の異なる3つのSRAM144a〜cにより構成される。
【0072】
SRAM144aは、図5のSRAM144と同様に、24bit(RGB各8bit)の階調値データを、28(256のインデックス)アドレス分格納できる容量である。SRAM144bは、21bit(RGB各7bit、RGB各1bit削減)の階調値データを、28(256のインデックス)アドレス分格納できる容量である。SRAM144cは、18bit(RGB各8bit、RGB各2bit削減)の階調値データを、28(256のインデックス)アドレス分格納できる容量である。
【0073】
ヒストグラム生成部145は、制御部141から画素データを受け付けると、各SRAM144a〜cの階調数に応じて、必要な数の度数データをSRAM146からリードし、パレット生成部143に出力する。
【0074】
具体的には、ヒストグラム生成部145は、階調数24bitについては、処理対象の画素データの階調値(24bit)をアドレスとして設定して、SRAM146から度数データを1個リードし、パレット生成部143に出力する。
【0075】
また、ヒストグラム生成部145は、階調数21bitについては、処理対象の画素データの階調値(24bit)の所定の3bit(RGB各下位1bit)を最小値から最大値まで変化させ、各階調値をアドレスとして設定して度数データを8個リードし、パレット生成部143に出力する。
【0076】
また、ヒストグラム生成部145は、階調数18bitについては、処理対象の画素データの階調値(24bit)の所定の6bit(RGB各下位2bit)を最小値から最大値まで変化させ、各階調値をアドレスとして設定して度数データを64個リードし、パレット生成部143に出力する。
【0077】
例えば、図7に示すように、パレット生成において階調数24bitを21bitに削減する場合、SRAM146の階調値(アドレス)を、連続する8階調毎のグループとして扱う。ヒストグラム生成部145は、度数データを読み出す際に、処理対象の画素データの階調値が属するグループの度数データを8個リードする。そして、リードした8階調分の度数データを全てパレット生成部143に出力する。同様に、階調数24bitを18bitに削減する場合は、連続する64階調分の度数データが1つの度数データとして扱われる。
【0078】
なお、ヒストグラム生成部145は、各SRAM144a〜cの階調数について、必要な数の度数データをパレット生成部143に出力した後、上述の第1実施形態と同様に、画素データの階調値に対応する度数データを1加算して、SRAM146に格納する。
【0079】
パレット生成部143は、制御部141から出力された画素データと、当該画素データについてヒストグラム生成部145から出力された、各SRAM144a〜cの階調数ごとの度数データとに基づいて、階調値毎にインデックス値を割り付け、各インデックス値に対応する階調値をSRAM144a〜cに格納する。
【0080】
具体的には、パレット生成部143は、階調数24bitのパレットについては、ヒストグラム生成部145から出力された1個の度数データが0である場合に、画素データの階調値(24bit)にインデックス値を割り当て、当該インデックス値をアドレスとして画素データをSRAM144aに格納する。
【0081】
また、パレット生成部143は、階調数21bitのパレットについては、ヒストグラム生成部145から出力された8個の度数データが全て0である場合に、画素データの階調値(24bit)にインデックス値を割り当てる。また、図7に示すように、パレット生成部143は、画素データ(24bit、RGB各8bit)のRGB各下位1bitを削減し、画素データ(21bit、RGB各7bit)に変更する。そして、割り当てたインデックス値をアドレスとして設定し、データ削減後の画素データをSRAM144bに格納する。
【0082】
また、パレット生成部143は、階調数18bitのパレットについては、ヒストグラム生成部145から出力された64個の度数データが全て0である場合に、画素データの階調値(24bit)にインデックス値を割り当てる。また、パレット生成部143は、画素データ(24bit、RGB各8bit)のRGB各下位2bitを削減し、画素データ(18bit、RGB各6bit)に変更する。また、割り当てたインデックス値をアドレスとして設定し、データ削減後の画素データをSRAM144cに格納する。
【0083】
上記のようにして、パレット生成部143は、各階調数のパレットを作成する。そして、作成が完了した(インデックスの割り当てが足りた)パレットのうち、階調数が最も大きいパレットを、インデックス変換に使用するパレットとして選択する。なお、インデックス変換部142は、この選択されたパレットのSRAMを参照しながら、元画像データのインデックス変換を行う。
【0084】
上記の変形例1によれば、元画像データの階調数のままでは、インデックスの割り当てが足りずにパレットを作成できない場合であっても、階調数を減らすことにより、パレットを作成することができる。その結果、画像処理装置1において画像データをインデックス画像データとして保持することができ、メモリーの空き容量をできる限り大きくすることができる。
【0085】
ところで、上記の変形例1では、ヒストグラム生成部145による、度数データのリードのためのSRAM146へのアクセス回数は、処理対象の1つの画素データについて、階調数(24bit、21bit、18bit)ごとに、それぞれ、1回、8回、64回である。そのため、SRAM146へのアクセス処理の負荷が大きくなる。
【0086】
そこで、SRAM146を、複数の部分に分割して構成し、連続する階調値の度数データを並列にリードできるようにしてもよい。
【0087】
具体的には、図8に示すように、SRAM146を、8個のSRAMデバイス0〜7で構成する。各SRAMデバイスは、25bitの度数データを、221(RGB各7bit、2097152階調)アドレス分格納できる容量である。各SRAMデバイスには、RGB各下位1bitが等しい階調値の度数データが格納される。
【0088】
SRAMデバイス0には、RGB各下位1bitが000の階調値の度数データが格納される。SRAMデバイス1には、RGB各下位1bitが001の階調値の度数データが格納される。SRAMデバイス2には、RGB各下位1bitが010の階調値の度数データが格納される。SRAMデバイス3には、RGB各下位1bitが011の階調値の度数データが格納される。SRAMデバイス4には、RGB各下位1bitが100の階調値の度数データが格納される。SRAMデバイス5には、RGB各下位1bitが101の階調値の度数データが格納される。SRAMデバイス6には、RGB各下位1bitが110の階調値の度数データが格納される。SRAMデバイス7には、RGB各下位1bitが111の階調値の度数データが格納される。
【0089】
ヒストグラム生成部145は、階調数24bitのパレット作成のために度数データをリードする場合、処理対象の画素データのRGB各下位1bitをデバイスセレクト信号として設定するとともに、RGB各上位7bitをアドレスとして設定し、1個のSRAMデバイスから度数データを1個リードする。
【0090】
また、ヒストグラム生成部145は、階調数21bitのパレット作成のために度数データをリードする場合、処理対象の画素データのRGB各下位1bitの最小値から最大値(000〜111)までをデバイスセレクト信号として設定するとともに、RGB各上位7bitをアドレスとして設定し、8個のSRAMデバイスから度数データを並列に8個リードする。
【0091】
ヒストグラム生成部145は、階調数18bitのパレット作成のために度数データをリードする場合、処理対象の画素データのRGB各下位1bitの最小値から最大値(000〜111)までをデバイスセレクト信号として設定する。また、RGB各上位7bitのうち各下位1bitを最小値から最大値まで(000〜111)順次変化させて、8個のSRAMデバイスから度数データを並列に8個リードする処理を8回行う。
【0092】
上記のようにSRAM146を構成すれば、ヒストグラム生成部145による、度数データのリードのためのSRAM146へのアクセス回数を削減することができる。上記の例では、アクセス回数は、階調数(24bit、21bit、18bit)ごとに、それぞれ、1回、1回、8回となる。
【0093】
なお、上記の変形例1では、階調数(24bit、21bit、18bit)ごとにSRAM144a〜cを設けているが、SRAM144bまたはSRAM144cのいずれか1つを設けた構成としてもよい。また、SRAM144aと、SRAM144bまたはSRAM144cのいずれか1つとを設けた構成としてもよい。このようにすれば、SRAMを削減することができる。もちろん、上記の変形例1では、削減した階調数として、21bitおよび18bitを採用しているが、さらに小さい階調数であってもよい。
【0094】
<変形例2>
本変形例では、図9に示すように、ヒストグラムのSRAM144およびパレットのSRAM146の両方の容量を削減する。SRAM144の構成は、図6のSRAM144bと同様である。
【0095】
SRAM146は、25bit(225は32Mpixを表現できる)の度数データを、221(2097152階調)アドレス分格納できる容量である。
【0096】
ヒストグラム生成部145は、制御部141から画素データ(24bit)を受け付けると、図10に示すように、RGB各下位1bitを削除する。そして、当該画素データ(21bit)をアドレスとして設定し、SRAM146から度数データをリードしてパレット生成部143に出力する。また、リードした度数に1加算した度数をSRAM146にライトする。
【0097】
パレット生成部143は、制御部141から画素データ(24bit)を受け付けると、図10に示すように、RGB各下位1bitを削除する。また、ヒストグラム生成部145から出力された、処理対象の画素データ(21bit)の度数データが0である場合に、インデックスを割り当てる。そして、当該インデックス値をアドレスとして設定して、SRAM144の当該アドレスに、処理対象の画素データ(21bit)をライトする。
【0098】
上記の変形例2によれば、元画像データの階調値のままでは、インデックスの割り当てが足りずにパレットを作成できない場合であっても、階調数を減らすことにより、パレットを作成することができる。その結果、画像処理装置1において画像データをインデックス画像データとして保持することができ、メモリーの空き容量をできる限り大きくすることができる。また、ヒストグラムを生成する段階で、階調数を削減するため、ヒストグラムを生成するためのメモリー容量を削減できる。
【0099】
なお、上記の変形例2では、削減した階調数として、21bitを採用しているが、さらに小さい階調数であってもよい。また、ヒストグラムのSRAM146の階調数よりもパレットのSRAM144の階調数を小さくしてもよい。
【0100】
<第2実施形態>
本発明の第2実施形態について、図面を参照しながら説明する。本実施形態の画像処理装置1は、ヒストグラム生成を行わない構成である。以下、第1実施形態と異なる点を中心に説明する。
【0101】
図11は、画像処理装置1におけるパレット生成およびインデックス変換に関連する構成の一例を示すブロック図である。
【0102】
本実施形態では、メモリー制御ASIC14は、スキャナー制御ASIC15から出力された画像データについて、パレットの生成、およびインデックス変換を行うための機能を有する。メモリー制御ASIC14は、制御部147と、パレット生成・インデックス変換部148と、SRAM149とを有する。
【0103】
制御部147は、メモリー制御ASIC14を統合的に制御するとともに、DRAM12へのアクセスを制御する回路である。もちろん、DRAM12へのアクセス制御を行う部分は、制御部147と独立していてもよい。
【0104】
例えば、制御部147は、スキャナー制御ASIC20から順次出力される画素データを受け付ける。また、受け付けた各画素データと同一の画素データを、DRAM12、およびパレット生成・インデックス変換部148にそれぞれ出力する。
【0105】
また、制御部147は、パレット生成・インデックス変換部148から出力されるインデックス変換後の画像データの各インデックス値を順次受け付け、DRAM12に出力する。また、制御部147は、作成が完了したパレットをSRAM149から取得し、インデックス変換された画像データと対応付けて、DRAM12に格納する。
【0106】
パレット生成・インデックス変換部148は、制御部147から順次出力される画素データに基づいて、階調値毎にインデックス値を割り付け、各インデックス値に対応する階調値をSRAM149に記録する。また、画素データをインデックス値に変換し、制御部147を介してDRAM12に出力する。本実施形態では、パレット生成・インデックス変換部148は、1ラスタ(1ライン分の画像データ)毎に、パレット生成およびインデックス変換を行う。
【0107】
SRAM149は、図2のSRAM144と同様に、アドレス(インデックス値)ごとにデータ(階調値)を格納する領域を有する(図12参照)。SRAM149は、例えば、24bit(RGB各8bit)の階調値データを、28(256のインデックス)アドレス分格納できる容量である。
【0108】
図12は、画像処理装置1におけるパレット生成およびインデックス変換の処理手順を説明する図である。本図は、1ラスタの画像データを処理する場合を説明している。
【0109】
制御部147は、スキャナー制御ASIC15から順次出力される画素データを受け付け、各画素データと同一の画素データを、DRAM12およびパレット生成・インデックス変換部148にそれぞれ出力する。すなわち、制御部147は、画素データを順次DRAM12にライトして、1ラスタの画像データ123をDRAM12に格納する。また、この制御部147の処理と並行して、画像データ123について、パレット生成・インデックス変換部148によりパレットの生成およびインデックス変換が実行される。
【0110】
また、制御部147は、パレット生成・インデックス変換部148から順次出力されたインデックス値をDRAM12にライトして、1ラスタの画像データ123をインデックス変換したインデックス画像データ124をDRAM12に格納する。なお、インデックス画像データ124の生成が終了した場合、画像データ123をDRAM12から削除してよい。
【0111】
パレット生成・インデックス変換部148は、画素データごとにS31〜S34の処理を実行する。
【0112】
S31では、パレット生成・インデックス変換部148は、制御部147から出力された画素データを受け付ける。
【0113】
S32では、まず、パレット生成・インデックス変換部148は、インデックス値を最小値から割り当て済みの値まで順次変化させ、インデックス値(アドレス)毎に、SRAM149から階調値データをリードする。また、パレット生成・インデックス変換部148は、リードした階調値データ毎に、当該階調値データとS31で受け付けた画素データの階調値との比較を行い、当該階調値データにインデックス値が割り当て済みであるか否かを判定する。
【0114】
そして、処理対象の画素データの階調値にインデックス値が割り当て済みでない場合、パレット生成・インデックス変換部148は、S31で受け付けた画素データにインデックス値を割り当て、当該インデックス値をアドレスとして設定して、SRAM149の当該アドレスに、画素データの階調値をライトする。一方、処理対象の画素データの階調値にインデックス値が割り当て済みである場合、画素データの階調値をSRAM149にライトしない。
【0115】
S33では、パレット生成・インデックス変換部148は、S31で受け付けた画素データにS32で新たに割り当てたインデックス値、もしくは、S32で特定した割り当て済みのインデックス値を、制御部147に出力する。
【0116】
S34では、パレット生成・インデックス変換部148は、S32において新たにインデックス値を割り当てた場合、インデックス値を1インクリメントする。ここで、パレット生成・インデックス変換部148は、1インクリメントした後のインデックス値が、予め定めた最大値(例えば、インデックス値が256個の場合、255)を超え、かつ、処理対象の画素データが1ラスタの画像データ中の最後の画素でない場合、当該ラスタの画像データのパレットの作成を中止する。すなわち、パレット生成・インデックス変換部148は、次の画素データ以降S31〜34の処理を行わない。
【0117】
上記のようにして、ラスタ毎にパレットおよびインデックス画像データが生成され、DRAM12に格納される。また、インデックス値の割り当てが足りずにパレットを作成できなかったラスタについては、元画像データがそのままDRAM12に保持される。
【0118】
なお、上記では、ラスタ毎にパレットおよびインデックス画像データを生成しているが、全てのインデックス値(例えば、256個)を割り当てたときに、DRAM12に生成されているインデックス画像データを1つの単位としてもよい。すなわち、生成された各インデックス画像データに対応するパレットのサイズは全て同じであり、一方、各インデックス画像データのサイズは必ずしも同じとならない。このように構成すれば、パレットの作成を完了できない場合がなくなるとともに、元画像データをDRAM12に保持する必要がなくなり、メモリーの空き容量をできる限り大きくすることができる。
【0119】
また、上記では、制御部147が1ラスタの画像データ123をDRAM12に格納するようにしているが、1ラスタの画像データを格納できるSRAMを設け、当該SRAMに、パレット生成・インデックス変換部148が、制御部147から出力された1ラスタの画像データを格納するようにしてもよい。
【0120】
以上、本発明の第2実施形態について説明した。本実施形態によれば、インデックス変換(パレットの作成を含む。)の処理効率を向上することができる。すなわち、本実施形態によれば、パレット生成と並行して、割り当てたインデックス値を用いてインデックス変換が行われる。このような構成により、階調値に対応するインデックス値を特定するためにパレットに繰り返しアクセスをする必要がなくなり、インデックス変換処理が全体的に効率化される。
【0121】
なお、上記の本発明の実施形態は、本発明の要旨と範囲を例示することを意図し、限定するものではない。多くの代替物、修正および変形例が当業者にとって明らかである。
【0122】
例えば、上記の実施形態では、スキャナー制御ASIC15から出力される画像データを、ヒストグラム生成、パレット生成、インデックス変換の対象としていたが、これに限られない。I/O制御ASIC17から出力される画像データ(例えば、ネットワークI/F、USBI/F、パラレルI/Fから入力される画像データ)を対象としてもよい。
【符号の説明】
【0123】
1:画像処理装置、10:コントローラー、11:CPU、12:DRAM、13:ROM、14:メモリー制御ASIC、15:スキャナー制御ASIC、16:印刷制御ASIC、17:入出力(I/O)制御ASIC、18:ネットワークインターフェイス(I/F)、20:スキャナー、30:印刷エンジン、40:操作パネル、121:画像データ、122:インデックス画像データ、123:画像データ、124:インデックス画像データ、141:制御部、142:インデックス変換部、143:パレット生成部、144:SRAM、145:ヒストグラム生成部、146:SRAM、147:制御部、148:パレット生成・インデックス変換部
【技術分野】
【0001】
本発明は、入力された画像データをインデックスカラー形式の画像データに変換する技術に関する。
【背景技術】
【0002】
スキャナー、プリンター、コピー機、複合機等の画像処理装置において、メモリーなどの記憶装置で保持する画像データのサイズを削減するため、パレットと呼ばれるテーブル(色ごとに色番号としてのインデックスが対応付けられている)を用いて、入力された画像データ(例えば、RGB各24ビットのフルカラーの画像データ)を、当該画像データに含まれる各画素をインデックスで表現したインデックスカラー形式の画像データに変換する技術が知られている。
【0003】
また、画像処理装置において、入力された画像データに対して、当該画像データに含まれる各画素の色の出現頻度分布に基づいて所定の画像処理を行うため、入力された画像データに含まれる各画素の色のヒストグラムを生成する技術が知られている(例えば、特許文献1)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2009−37277号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、入力された画像データのヒストグラム生成も、インデックス変換(パレットの作成を含む。)も、入力された画像データに含まれる各画素について処理を行う必要があるため、画像処理装置の処理負荷が大きい。例えば、ヒストグラム生成およびインデックス変換(パレットの作成を含む。)の両方を行う場合には、画像処理装置の処理負荷がより大きい。
【0006】
本発明は、インデックス変換(パレットの作成を含む。)の処理効率を向上するための技術を提供することを目的とする。
【課題を解決するための手段】
【0007】
上記の課題を解決するための本発明の第1態様は、多値画像データを処理する画像処理装置であって、階調値毎にその出現度数を記憶するヒストグラム記憶手段と、インデックス値毎にその階調値を記憶するパレット記憶手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数を出力する、出力手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数に1加算する、ヒストグラム生成手段と、前記出力手段により出力された出現度数が0である場合に、当該階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、を有することを特徴とする。
【0008】
上記の課題を解決するための本発明の第2態様は、多値画像データを処理する画像処理装置であって、階調値毎にその出現度数を記憶するヒストグラム記憶手段と、インデックス値毎に、前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値を記憶する、パレット記憶手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値と上位の階調値が等しい複数の階調値の出現度数を出力する、出力手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数に1加算する、ヒストグラム生成手段と、前記出力手段により出力された複数の出現度数がいずれも0である場合に、当該階調値を前記所定ビット数削減した階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、を有することを特徴とする。
【0009】
ここで、上記の画像処理装置であって、前記ヒストグラム記憶手段は、前記所定ビット数の最小値から最大値までの値ごとに、並列アクセス可能な複数の記憶領域に分割されており、また、前記複数の記憶領域のそれぞれは、前記画像データに含まれる画素データの階調値のビット数よりも前記所定ビット数小さい階調値毎に、その出現度数を記憶し、前記出力手段は、前記画像データに含まれる画素データ毎に、前記複数の記憶領域それぞれに並列にアクセスし、その階調値を前記所定ビット数削減した階調値の出現度数を並列に出力する、ことを特徴としていてもよい。
【0010】
上記の課題を解決するための本発明の第3態様は、多値画像データを処理する画像処理装置であって、前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値毎に、その出現度数を記憶する、ヒストグラム記憶手段と、インデックス値毎に、前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値を記憶する、パレット記憶手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値の出現度数を出力する、出力手段と、前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値の出現度数に1加算する、ヒストグラム生成手段と、前記出力手段により出力された出現度数が0である場合に、当該階調値を前記所定ビット数削減した階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、を有することを特徴とする。
【0011】
なお、上記のいずれかの画像処理装置では、1フレームの画像データ毎に、ヒストグラムおよびパレットが生成される。
【図面の簡単な説明】
【0012】
【図1】本発明の第1実施形態に係る画像処理装置の、ハードウェアの概略構成の一例を示すブロック図。
【図2】画像処理装置におけるヒストグラム生成およびパレット生成、インデックス変換に関連する構成の一例を示すブロック図。
【図3】画像処理装置におけるヒストグラム生成およびパレット生成の処理手順を説明する図。
【図4】画像処理装置におけるインデックス変換の処理手順を説明する図。
【図5】ヒストグラムおよびパレットを格納するSRAMのサイズを説明する図。
【図6】ヒストグラムおよびデータ量を削減したパレットを格納するSRAMのサイズを説明する図(変形例1)。
【図7】データ量を削減したパレット作成の処理手順を説明する図(変形例1)。
【図8】ヒストグラムを格納するSRAMの構成およびアクセス手順を説明する図(変形例1)。
【図9】データ量を削減したヒストグラムおよびパレットを格納するSRAMのサイズを説明する図(変形例2)。
【図10】画素データのデータ量を削減した場合のヒストグラムおよびパレット作成の手順を説明する図(変形例2)。
【図11】本発明の第2実施形態に係る画像処理装置におけるパレット生成およびインデックス変換に関連する構成の一例を示すブロック図。
【図12】画像処理装置におけるパレット生成およびインデックス変換の処理手順を説明する図。
【発明を実施するための形態】
【0013】
<第1実施形態>
本発明の第1実施形態について、図面を参照しながら説明する。
【0014】
図1は、本発明の第1実施形態に係る画像処理装置1の、ハードウェアの概略構成の一例を示すブロック図である。本実施形態の画像処理装置1は、スキャナー機能と印刷機能を有するいわゆるコピー機である。
【0015】
画像処理装置1は、コントローラー10と、スキャナー20と、印刷エンジン30と、操作パネル40とを有する。
【0016】
コントローラー10は、CPU11と、DRAM12と、ROM13、メモリー制御ASIC(Application Specific Integrated Circuit)14と、スキャナー制御ASIC15と、印刷制御ASIC16と、入出力(I/O)制御ASIC17と、ネットワークインターフェイス(I/F)18とを有する。
【0017】
CPU11は、所定のプログラムを実行して、画像処理装置1を統合的に制御する。DRAM12は、データおよびプログラム等を一時的に記憶する揮発性メモリーであり、例えば、DDR−SDRAMである。ROM13は、データやプログラム等を格納している不揮発性メモリーであり、例えば、フラッシュメモリーである。ROM13は、メモリー制御ASIC14ではなく、I/O制御ASIC17に接続されていてもよい。
【0018】
メモリー制御ASIC14は、接続されているDRAM12およびROM13へのアクセスを制御するユニットである。メモリー制御ASIC23は、例えば、スキャナー制御ASIC15から出力された画像データを、DRAM12に格納する。また、例えば、DRAM12に格納された画像データを、印刷制御ASIC16に出力する。また、例えば、ネットワークI/F18およびI/O制御ASIC17を介してネットワーク上のホストPCから送られてきた、印刷対象の画像データをDRAM12に格納する。
【0019】
なお、後述するように、本実施形態では、メモリー制御ASIC14は、スキャナー制御ASIC15から出力された画像データについて、ヒストグラムの生成、パレットの生成、およびインデックス変換を行うための機能を有する。
【0020】
スキャナー制御ASIC15は、スキャナー20による画像読み取りを制御し、コントローラー10において処理可能な形式の画像データを生成するユニットである。スキャナー制御ASIC15は、例えば、スキャナー20が有するイメージセンサー、モーター、A/D変換器、ADF(Auto Document Feeder)などを制御して、原稿の画像読み取りを行う。また、例えば、スキャナー20から出力された画像データに、所定の画像処理(例えば、シェーディング補正、ガンマ補正など)を施し、メモリー制御ASIC14に出力する。
【0021】
印刷制御ASIC16は、印刷エンジン30において処理可能な印刷データを生成し、印刷エンジン30による印刷を制御するユニットである。印刷制御ASIC16は、例えば、DRAM12から画像データを読み出し、所定の画像処理(例えば、色変換、圧縮、伸張、2値化)を施して印刷データを生成する。そして、生成した印刷データを印刷エンジン30に送信して印刷を実行させる。
【0022】
I/O制御ASIC17は、I/O装置やI/F装置を制御するユニットである。I/O装置としては、例えば、操作パネル40、ハードディスク装置等がある。I/F装置としては、ネットワークI/F18、USBI/F、パラレルI/F等がある。I/O制御ASIC17は、例えば、ネットワークI/F18を介して受信した画像データを、DRAM12にDMA(Direct Memory Access)転送する。また、例えば、操作パネル40から出力される信号をCPU11に転送したり、CPU11から送られた描画データを操作パネル40に転送したりする。
【0023】
ネットワークI/F18は、ホストPCなどのネットワーク上の装置と各種データの送受信を行うユニットである。ネットワークI/F18は、例えば、ホストPCから受信した印刷ジョブをDRAM12に転送する。
【0024】
スキャナー20は、筐体の上面に画像読取面を備えたいわゆるフラットベッド型イメージスキャナーである。スキャナー20は、ADFを備えていてもよい。ADFを使用しない場合、スキャナー20は、画像読取面上に固定された原稿に下から光を当てて、イメージセンサーを移動させながら画像を読み取る。また、ADFを使用する場合、スキャナー20は、イメージセンサーを所定の位置に固定し、ADFにより原稿を搬送しながら画像を読み取る。スキャナー20は、読み取った画像データをA/D変換して、スキャナー制御ASIC15に出力する。
【0025】
印刷エンジン30は、印刷制御ASIC16から供給されたデータを、印刷媒体に印刷するユニットである。印刷エンジン30は、例えば、トナーカートリッジ、感光体ドラム、レーザー光照射機構、転写機構、紙送り機構、給排紙機構などを有するレーザー方式のエンジンである。もちろん、印刷エンジン30は、レーザー方式に限られず、インクジェット方式であってもよい。
【0026】
操作パネル40は、ユーザーと画像処理装置1との間の入出力インターフェイスとして、画像処理装置1の筐体に設けられているユニットである。操作パネル40は、例えば、液晶ディスプレイ(Liquid Crystal Display)や有機ELディスプレイ(Electro-Luminescence Display)などのディスプレイと、タッチパネルと、ハードスイッチ等を有する。
【0027】
上記の画像処理装置1の構成は、本願発明の特徴を説明するにあたって主要構成を説明したのであって、上記に限られない。また、一般的な画像処理装置が備える他の構成を排除するものではない。
【0028】
図2は、画像処理装置1におけるヒストグラム生成およびパレット生成、インデックス変換に関連する構成の一例を示すブロック図である。なお、スキャナー制御ASIC15から出力される画像データは、画素データ(RGB各色の階調値を有するデータ)で構成されている。
【0029】
メモリー制御ASIC14は、制御部141と、インデックス変換部142と、パレット生成部143と、SRAM144と、ヒストグラム生成部145と、SRAM146とを有する。
【0030】
制御部141は、メモリー制御ASIC14を統合的に制御するとともに、DRAM12へのアクセスを制御する回路である。もちろん、DRAM12へのアクセス制御を行う部分は、制御部141と独立していてもよい。
【0031】
例えば、制御部141は、スキャナー制御ASIC20から順次出力される画素データを受け付ける。また、受け付けた各画素データと同一の画素データを、DRAM12、ヒストグラム生成部145、およびパレット生成部143にそれぞれ出力する。また、制御部141は、パレット生成部143によるパレット作成が終了すると、DRAM12に格納した1フレーム(1ページ)の画像データに含まれる画素データを順次リードし、インデックス変換部142に出力する。
【0032】
また、制御部141は、インデックス変換部142から出力されるインデックス変換後の画像データの各インデックス値を順次受け付け、DRAM12に出力する。また、制御部141は、作成が完了したパレットをSRAM144から取得し、インデックス変換が完了した画像データに対応付けて、DRAM12に格納する。また、作成が完了したヒストグラムをSRAM146から取得し、インデックス変換された画像データと対応付けて、DRAM12に格納してもよい。
【0033】
ヒストグラム生成部145は、制御部141から順次出力される画素データに基づいて、階調値毎の画素の度数(頻度)を、SRAM146に記録する回路である。ヒストグラム生成部145は、制御部141から画素データを受け付けると、当該画素データの階調値に対応する度数データをSRAM146からリードしてパレット生成部143に出力する。その後、リードした度数データに1加算した度数データをSRAM146にライトする。なお、ヒストグラム生成部145は、1フレーム(1ページ)分の画像データ毎にヒストグラムを生成する。
【0034】
SRAM146は、画像データに含まれる画素データの階調値のヒストグラムを格納するための揮発性メモリーである。SRAM146は、アドレス(階調値)ごとにデータ(度数)を格納する領域を有する(図3参照)。
【0035】
パレット生成部143は、制御部141から順次出力される画素データと、当該画素データについてヒストグラム生成部145から出力される度数データに基づいて、階調値毎にインデックス値を割り付け、各インデックス値に対応する階調値をSRAM144に記録する回路である。パレット生成部143は、処理対象の画素データ(階調値)の度数データが0である場合(すなわち、初めてその階調値の画素を検出した場合)に、当該階調値にインデックスを割り当て、当該階調値をインデックス値に対応付けてSRAM144に格納する。なお、パレット生成部143は、1フレーム(1ページ)分の画像データ毎にパレットを生成する。
【0036】
SRAM144は、画像データに含まれる画素データの階調値とインデックス値とを対応づけたパレットを格納するための揮発性メモリーである。SRAM144は、アドレス(インデックス値)ごとにデータ(階調値)を格納する領域を有する(図3参照)。
【0037】
インデックス変換部142は、制御部141から順次出力される画素データを、SRAM144のパレットを参照してインデックス値に変換し、制御部141を介してDRAM12に出力する回路である。
【0038】
ここで、SRAM146およびSRAM144について具体例を挙げて説明する。図5は、ヒストグラムおよびパレットを格納するSRAMのサイズを説明する図である。本図は、画像データ(A4/600dpi/32Mpixel/RGB各8bit)を8bitのインデックスカラー画像データに変換する場合を示している。
【0039】
SRAM146は、少なくとも、25bit(225は32Mpixelを表現できる)の度数データを、224(16777216階調)アドレス分格納できる容量である。
【0040】
また、SRAM144は、少なくとも、24bit(RGB各8bit)の階調値データを、28(256のインデックス)アドレス分格納できる容量である。
【0041】
上記のメモリー制御ASIC14の構成は、本願発明の特徴を説明するにあたって主要構成を説明したのであって、上記に限られない。また、一般的なメモリー制御ASICが備える他の構成を排除するものではない。例えば、インデックス変換部142のSRAM144へのアクセス制御を行う部分、パレット生成部143のSRAM144へのアクセス制御を行う部分は、独立した1つの回路となっていてもよい。また、ヒストグラム生成部145のSRAM146へのアクセス制御を行う部分は、独立した1つの回路となっていてもよい。
【0042】
図3は、画像処理装置1におけるヒストグラム生成およびパレット生成の処理手順を説明する図である。本図は、1フレームの画像データを処理する場合を説明している。
【0043】
制御部141は、スキャナー制御ASIC15から順次出力される画素データを受け付け、各画素データと同一の画素データを、DRAM12、ヒストグラム生成部145、およびパレット生成部143にそれぞれ出力する。すなわち、制御部141は、画素データを順次DRAM12にライトして、1フレームの画像データ121をDRAM12に格納する。また、この制御部141の処理と並行して、画像データ121について、ヒストグラム生成部145によりヒストグラムが生成され、パレット生成部143によりパレットが生成される。
【0044】
ヒストグラム生成部145は、画素データごとにS1〜S4の処理を実行する。
【0045】
S1では、ヒストグラム生成部145は、制御部141から出力された画素データを受け付ける。
【0046】
S2では、ヒストグラム生成部145は、S1で受け付けた画素データの階調値をアドレスとして設定して、当該アドレスに格納されている度数データをSRAM146からリードする。
【0047】
S3では、ヒストグラム生成部145は、S2でリードした度数データをパレット生成部143に出力する。
【0048】
S4では、ヒストグラム生成部145は、S2でリードした度数データに1を加算する。また、S1で受け付けた画素データの階調値をアドレスとして設定して、SRAM146の当該アドレスに、1加算後の度数データをライトする。
【0049】
パレット生成部143は、画素データごとにS11〜S13の処理を実行する。
【0050】
S11では、パレット生成部143は、制御部141から出力された画素データを受け付け、また、当該画素データに対応する、S3でヒストグラム生成部145から出力された度数データを受け付ける。
【0051】
S12では、まず、パレット生成部143は、S11で受け付けた度数データが0であるか否かを判定する。そして、度数データが0である場合、パレット生成部143は、S11で受け付けた画素データにインデックス値を割り当て、当該インデックス値をアドレスとして設定して、SRAM144の当該アドレスに、画素データの階調値をライトする。そして、処理をS13に進める。一方、度数が0でない場合、パレット生成部143は、インデックス値を割り当て済みと判定し、次の画素データの処理のため、処理をS11に戻す。
【0052】
本実施形態では、インデックスの数は、予め定めた数(例えば、256個)である。パレット生成部143は、最小のインデックス値から昇順に(例えば、0〜255の順に)割り当てを行う。また、パレット生成部143は、S12において割り当てるべきインデックス値を保持している。もちろん、インデックス値の割り当て順序は、昇順に限られず、例えば、降順であってもよいし、所定の規則に基づく順序であってもよい。
【0053】
S13では、パレット生成部143は、S12において割り当て済みのインデックス値を1インクリメントする。ここで、パレット生成部143は、1インクリメントした後のインデックス値が、予め定めた最大値(例えば、インデックス値が256個の場合、255)を超え、かつ、処理対象の画素データが1フレームの画像データ中の最後の画素でない場合、パレットの作成を中止する。すなわち、パレット生成部143は、次の画素データ以降S11〜13の処理を行わない。
【0054】
上記のようにして、1フレームの画像データがDRAM12に格納され、また、当該画像データのヒストグラムおよびパレットが生成される。なお、パレットの作成が中止された場合、制御部141は画素データをパレット生成部143に出力しないようにしてもよいし、パレット生成部143は画素データを受け付けないようにしてもよい。
【0055】
図4は、画像処理装置1におけるインデックス変換の処理手順を説明する図である。本図は、図3におけるパレット作成の完了後、1フレームの画像データを処理する場合を説明している。
【0056】
制御部141は、パレット生成部143によるパレット生成が完了した場合、DRAM12に格納されている画像データ121に含まれる画素データを順次リードしてインデックス変換部142に出力する。また、インデックス変換部142から順次出力されるインデックス値をDRAM12にライトして、画像データ121をインデックス変換したインデックス画像データ122をDRAM12に格納する。なお、インデックス画像データ122の生成が終了した場合、画像データ121をDRAM12から削除してよい。
【0057】
インデックス変換部142は、画素データごとにS21〜S23の処理を実行する。
【0058】
S21では、インデックス変換部142は、制御部141から出力された画素データを受け付ける。
【0059】
S22では、インデックス変換部142は、インデックス値を最小値から最大値まで(例えば、0〜255)順次変化させ、インデックス値(アドレス)毎に、SRAM144から階調値データをリードする。また、インデックス変換部142は、リードした階調値データ毎に、当該階調値データとS21で受け付けた画素データの階調値との比較を行い、階調値が一致するインデックス値を特定する。すなわち、インデックス変換部142は、階調値が一致するインデックス値が見つかるまで、繰り返しSRAM144にアクセスする。
【0060】
S23では、インデックス変換部142は、S21で受け付けた画素データに対応するS22で特定したインデックス値を、制御部141に出力する。
【0061】
上記のようにして、1フレームの画像データ121が、インデックス画像データ122に変換されてDRAM12に格納される。なお、制御部141は、インデックス画像データ122の生成の完了後、パレットをSRAM144から読み出し、当該インデックス画像データ122と関連付けて、DRAM12に格納する。
【0062】
以上、本発明の第1実施形態について説明した。本実施形態によれば、インデックス変換(パレットの作成を含む。)の処理効率を向上することができる。すなわち、本実施形態では、ヒストグラム生成と並行して、ヒストグラムの値を参照しながらパレット作成が行われる。このような構成により、パレット作成時に、画素データ毎に、当該階調値に対応するインデックス値が割り当て済みであるか否か判定する必要がなくなり、インデックス変換処理が全体的に効率化される。
【0063】
ところで、上記の第1実施形態では、インデックス変換部142は、画素データ毎に、対応するインデックス値が見つかるまで繰り返しSRAM144にアクセスしている(図4のS22)。そのため、例えば、1フレームの画像データにおいて、インデックス値が大きい階調値の画素データの割合が多い場合には、処理負荷が大きくなる。
【0064】
そこで、複数のインデックス値(アドレス)の階調値データを並列にリードできるようにSRAM144を構成するとともに、並列にリードした各階調値データと処理対象の画素データの階調値とを並列に比較できるようにインデックス変換部142を構成してもよい。
【0065】
具体的には、例えば、24bit(RGB各8bit)の階調値データを、28(256のインデックス)アドレス分格納できる容量が必要な場合、SRAM144を、24bitの階調値データを格納するフリップフロップ回路を256個設けた構成とする。各フリップフロップ回路は、それぞれ0〜256のインデックス値に対応する。また、各フリップフロップ回路には並列アクセスできる構成とする。
【0066】
インデックス変換部142には、各フリップフロップ回路に対応する比較回路を設ける。インデックス変換部142は、処理対象の画素データを各比較回路に入力し、また、各フリップフロップ回路から並列に読み出された階調値データを各比較回路に入力する。そして、各比較回路から並列に出力される比較結果を参照して、処理対象の画素データのインデックス値を特定する。
【0067】
上記のようにSRAM144とインデックス変換部142を構成すれば、各画素データのインデックス値を特定するためにSRAM144にアクセスする回数は1回となり、処理負荷が軽減される。
【0068】
次に、上記の第1実施形態の変形例(変形例1、2)について説明する。
【0069】
第1実施形態では、元画像データの階調数(図5の例では、24bit)をそのまま使用して、パレット作成が行われる。すなわち、インデックスの最大数(図5の例では、256個)に比べて出現が予想される階調数が大幅に多いため、パレット生成中に割り当て可能なインデックスが足りなくなり、パレットを完成できない可能性が高い。
【0070】
そこで、変形例1では、パレット生成の際に、元画像データの階調数を削減する。変形例2では、ヒストグラム生成の際に、元画像データの階調数を削減する。以下、具体的に、第1実施形態と異なる点を中心に説明する。
【0071】
<変形例1>
本変形例では、図6に示すように、SRAM144は、階調数の異なる3つのSRAM144a〜cにより構成される。
【0072】
SRAM144aは、図5のSRAM144と同様に、24bit(RGB各8bit)の階調値データを、28(256のインデックス)アドレス分格納できる容量である。SRAM144bは、21bit(RGB各7bit、RGB各1bit削減)の階調値データを、28(256のインデックス)アドレス分格納できる容量である。SRAM144cは、18bit(RGB各8bit、RGB各2bit削減)の階調値データを、28(256のインデックス)アドレス分格納できる容量である。
【0073】
ヒストグラム生成部145は、制御部141から画素データを受け付けると、各SRAM144a〜cの階調数に応じて、必要な数の度数データをSRAM146からリードし、パレット生成部143に出力する。
【0074】
具体的には、ヒストグラム生成部145は、階調数24bitについては、処理対象の画素データの階調値(24bit)をアドレスとして設定して、SRAM146から度数データを1個リードし、パレット生成部143に出力する。
【0075】
また、ヒストグラム生成部145は、階調数21bitについては、処理対象の画素データの階調値(24bit)の所定の3bit(RGB各下位1bit)を最小値から最大値まで変化させ、各階調値をアドレスとして設定して度数データを8個リードし、パレット生成部143に出力する。
【0076】
また、ヒストグラム生成部145は、階調数18bitについては、処理対象の画素データの階調値(24bit)の所定の6bit(RGB各下位2bit)を最小値から最大値まで変化させ、各階調値をアドレスとして設定して度数データを64個リードし、パレット生成部143に出力する。
【0077】
例えば、図7に示すように、パレット生成において階調数24bitを21bitに削減する場合、SRAM146の階調値(アドレス)を、連続する8階調毎のグループとして扱う。ヒストグラム生成部145は、度数データを読み出す際に、処理対象の画素データの階調値が属するグループの度数データを8個リードする。そして、リードした8階調分の度数データを全てパレット生成部143に出力する。同様に、階調数24bitを18bitに削減する場合は、連続する64階調分の度数データが1つの度数データとして扱われる。
【0078】
なお、ヒストグラム生成部145は、各SRAM144a〜cの階調数について、必要な数の度数データをパレット生成部143に出力した後、上述の第1実施形態と同様に、画素データの階調値に対応する度数データを1加算して、SRAM146に格納する。
【0079】
パレット生成部143は、制御部141から出力された画素データと、当該画素データについてヒストグラム生成部145から出力された、各SRAM144a〜cの階調数ごとの度数データとに基づいて、階調値毎にインデックス値を割り付け、各インデックス値に対応する階調値をSRAM144a〜cに格納する。
【0080】
具体的には、パレット生成部143は、階調数24bitのパレットについては、ヒストグラム生成部145から出力された1個の度数データが0である場合に、画素データの階調値(24bit)にインデックス値を割り当て、当該インデックス値をアドレスとして画素データをSRAM144aに格納する。
【0081】
また、パレット生成部143は、階調数21bitのパレットについては、ヒストグラム生成部145から出力された8個の度数データが全て0である場合に、画素データの階調値(24bit)にインデックス値を割り当てる。また、図7に示すように、パレット生成部143は、画素データ(24bit、RGB各8bit)のRGB各下位1bitを削減し、画素データ(21bit、RGB各7bit)に変更する。そして、割り当てたインデックス値をアドレスとして設定し、データ削減後の画素データをSRAM144bに格納する。
【0082】
また、パレット生成部143は、階調数18bitのパレットについては、ヒストグラム生成部145から出力された64個の度数データが全て0である場合に、画素データの階調値(24bit)にインデックス値を割り当てる。また、パレット生成部143は、画素データ(24bit、RGB各8bit)のRGB各下位2bitを削減し、画素データ(18bit、RGB各6bit)に変更する。また、割り当てたインデックス値をアドレスとして設定し、データ削減後の画素データをSRAM144cに格納する。
【0083】
上記のようにして、パレット生成部143は、各階調数のパレットを作成する。そして、作成が完了した(インデックスの割り当てが足りた)パレットのうち、階調数が最も大きいパレットを、インデックス変換に使用するパレットとして選択する。なお、インデックス変換部142は、この選択されたパレットのSRAMを参照しながら、元画像データのインデックス変換を行う。
【0084】
上記の変形例1によれば、元画像データの階調数のままでは、インデックスの割り当てが足りずにパレットを作成できない場合であっても、階調数を減らすことにより、パレットを作成することができる。その結果、画像処理装置1において画像データをインデックス画像データとして保持することができ、メモリーの空き容量をできる限り大きくすることができる。
【0085】
ところで、上記の変形例1では、ヒストグラム生成部145による、度数データのリードのためのSRAM146へのアクセス回数は、処理対象の1つの画素データについて、階調数(24bit、21bit、18bit)ごとに、それぞれ、1回、8回、64回である。そのため、SRAM146へのアクセス処理の負荷が大きくなる。
【0086】
そこで、SRAM146を、複数の部分に分割して構成し、連続する階調値の度数データを並列にリードできるようにしてもよい。
【0087】
具体的には、図8に示すように、SRAM146を、8個のSRAMデバイス0〜7で構成する。各SRAMデバイスは、25bitの度数データを、221(RGB各7bit、2097152階調)アドレス分格納できる容量である。各SRAMデバイスには、RGB各下位1bitが等しい階調値の度数データが格納される。
【0088】
SRAMデバイス0には、RGB各下位1bitが000の階調値の度数データが格納される。SRAMデバイス1には、RGB各下位1bitが001の階調値の度数データが格納される。SRAMデバイス2には、RGB各下位1bitが010の階調値の度数データが格納される。SRAMデバイス3には、RGB各下位1bitが011の階調値の度数データが格納される。SRAMデバイス4には、RGB各下位1bitが100の階調値の度数データが格納される。SRAMデバイス5には、RGB各下位1bitが101の階調値の度数データが格納される。SRAMデバイス6には、RGB各下位1bitが110の階調値の度数データが格納される。SRAMデバイス7には、RGB各下位1bitが111の階調値の度数データが格納される。
【0089】
ヒストグラム生成部145は、階調数24bitのパレット作成のために度数データをリードする場合、処理対象の画素データのRGB各下位1bitをデバイスセレクト信号として設定するとともに、RGB各上位7bitをアドレスとして設定し、1個のSRAMデバイスから度数データを1個リードする。
【0090】
また、ヒストグラム生成部145は、階調数21bitのパレット作成のために度数データをリードする場合、処理対象の画素データのRGB各下位1bitの最小値から最大値(000〜111)までをデバイスセレクト信号として設定するとともに、RGB各上位7bitをアドレスとして設定し、8個のSRAMデバイスから度数データを並列に8個リードする。
【0091】
ヒストグラム生成部145は、階調数18bitのパレット作成のために度数データをリードする場合、処理対象の画素データのRGB各下位1bitの最小値から最大値(000〜111)までをデバイスセレクト信号として設定する。また、RGB各上位7bitのうち各下位1bitを最小値から最大値まで(000〜111)順次変化させて、8個のSRAMデバイスから度数データを並列に8個リードする処理を8回行う。
【0092】
上記のようにSRAM146を構成すれば、ヒストグラム生成部145による、度数データのリードのためのSRAM146へのアクセス回数を削減することができる。上記の例では、アクセス回数は、階調数(24bit、21bit、18bit)ごとに、それぞれ、1回、1回、8回となる。
【0093】
なお、上記の変形例1では、階調数(24bit、21bit、18bit)ごとにSRAM144a〜cを設けているが、SRAM144bまたはSRAM144cのいずれか1つを設けた構成としてもよい。また、SRAM144aと、SRAM144bまたはSRAM144cのいずれか1つとを設けた構成としてもよい。このようにすれば、SRAMを削減することができる。もちろん、上記の変形例1では、削減した階調数として、21bitおよび18bitを採用しているが、さらに小さい階調数であってもよい。
【0094】
<変形例2>
本変形例では、図9に示すように、ヒストグラムのSRAM144およびパレットのSRAM146の両方の容量を削減する。SRAM144の構成は、図6のSRAM144bと同様である。
【0095】
SRAM146は、25bit(225は32Mpixを表現できる)の度数データを、221(2097152階調)アドレス分格納できる容量である。
【0096】
ヒストグラム生成部145は、制御部141から画素データ(24bit)を受け付けると、図10に示すように、RGB各下位1bitを削除する。そして、当該画素データ(21bit)をアドレスとして設定し、SRAM146から度数データをリードしてパレット生成部143に出力する。また、リードした度数に1加算した度数をSRAM146にライトする。
【0097】
パレット生成部143は、制御部141から画素データ(24bit)を受け付けると、図10に示すように、RGB各下位1bitを削除する。また、ヒストグラム生成部145から出力された、処理対象の画素データ(21bit)の度数データが0である場合に、インデックスを割り当てる。そして、当該インデックス値をアドレスとして設定して、SRAM144の当該アドレスに、処理対象の画素データ(21bit)をライトする。
【0098】
上記の変形例2によれば、元画像データの階調値のままでは、インデックスの割り当てが足りずにパレットを作成できない場合であっても、階調数を減らすことにより、パレットを作成することができる。その結果、画像処理装置1において画像データをインデックス画像データとして保持することができ、メモリーの空き容量をできる限り大きくすることができる。また、ヒストグラムを生成する段階で、階調数を削減するため、ヒストグラムを生成するためのメモリー容量を削減できる。
【0099】
なお、上記の変形例2では、削減した階調数として、21bitを採用しているが、さらに小さい階調数であってもよい。また、ヒストグラムのSRAM146の階調数よりもパレットのSRAM144の階調数を小さくしてもよい。
【0100】
<第2実施形態>
本発明の第2実施形態について、図面を参照しながら説明する。本実施形態の画像処理装置1は、ヒストグラム生成を行わない構成である。以下、第1実施形態と異なる点を中心に説明する。
【0101】
図11は、画像処理装置1におけるパレット生成およびインデックス変換に関連する構成の一例を示すブロック図である。
【0102】
本実施形態では、メモリー制御ASIC14は、スキャナー制御ASIC15から出力された画像データについて、パレットの生成、およびインデックス変換を行うための機能を有する。メモリー制御ASIC14は、制御部147と、パレット生成・インデックス変換部148と、SRAM149とを有する。
【0103】
制御部147は、メモリー制御ASIC14を統合的に制御するとともに、DRAM12へのアクセスを制御する回路である。もちろん、DRAM12へのアクセス制御を行う部分は、制御部147と独立していてもよい。
【0104】
例えば、制御部147は、スキャナー制御ASIC20から順次出力される画素データを受け付ける。また、受け付けた各画素データと同一の画素データを、DRAM12、およびパレット生成・インデックス変換部148にそれぞれ出力する。
【0105】
また、制御部147は、パレット生成・インデックス変換部148から出力されるインデックス変換後の画像データの各インデックス値を順次受け付け、DRAM12に出力する。また、制御部147は、作成が完了したパレットをSRAM149から取得し、インデックス変換された画像データと対応付けて、DRAM12に格納する。
【0106】
パレット生成・インデックス変換部148は、制御部147から順次出力される画素データに基づいて、階調値毎にインデックス値を割り付け、各インデックス値に対応する階調値をSRAM149に記録する。また、画素データをインデックス値に変換し、制御部147を介してDRAM12に出力する。本実施形態では、パレット生成・インデックス変換部148は、1ラスタ(1ライン分の画像データ)毎に、パレット生成およびインデックス変換を行う。
【0107】
SRAM149は、図2のSRAM144と同様に、アドレス(インデックス値)ごとにデータ(階調値)を格納する領域を有する(図12参照)。SRAM149は、例えば、24bit(RGB各8bit)の階調値データを、28(256のインデックス)アドレス分格納できる容量である。
【0108】
図12は、画像処理装置1におけるパレット生成およびインデックス変換の処理手順を説明する図である。本図は、1ラスタの画像データを処理する場合を説明している。
【0109】
制御部147は、スキャナー制御ASIC15から順次出力される画素データを受け付け、各画素データと同一の画素データを、DRAM12およびパレット生成・インデックス変換部148にそれぞれ出力する。すなわち、制御部147は、画素データを順次DRAM12にライトして、1ラスタの画像データ123をDRAM12に格納する。また、この制御部147の処理と並行して、画像データ123について、パレット生成・インデックス変換部148によりパレットの生成およびインデックス変換が実行される。
【0110】
また、制御部147は、パレット生成・インデックス変換部148から順次出力されたインデックス値をDRAM12にライトして、1ラスタの画像データ123をインデックス変換したインデックス画像データ124をDRAM12に格納する。なお、インデックス画像データ124の生成が終了した場合、画像データ123をDRAM12から削除してよい。
【0111】
パレット生成・インデックス変換部148は、画素データごとにS31〜S34の処理を実行する。
【0112】
S31では、パレット生成・インデックス変換部148は、制御部147から出力された画素データを受け付ける。
【0113】
S32では、まず、パレット生成・インデックス変換部148は、インデックス値を最小値から割り当て済みの値まで順次変化させ、インデックス値(アドレス)毎に、SRAM149から階調値データをリードする。また、パレット生成・インデックス変換部148は、リードした階調値データ毎に、当該階調値データとS31で受け付けた画素データの階調値との比較を行い、当該階調値データにインデックス値が割り当て済みであるか否かを判定する。
【0114】
そして、処理対象の画素データの階調値にインデックス値が割り当て済みでない場合、パレット生成・インデックス変換部148は、S31で受け付けた画素データにインデックス値を割り当て、当該インデックス値をアドレスとして設定して、SRAM149の当該アドレスに、画素データの階調値をライトする。一方、処理対象の画素データの階調値にインデックス値が割り当て済みである場合、画素データの階調値をSRAM149にライトしない。
【0115】
S33では、パレット生成・インデックス変換部148は、S31で受け付けた画素データにS32で新たに割り当てたインデックス値、もしくは、S32で特定した割り当て済みのインデックス値を、制御部147に出力する。
【0116】
S34では、パレット生成・インデックス変換部148は、S32において新たにインデックス値を割り当てた場合、インデックス値を1インクリメントする。ここで、パレット生成・インデックス変換部148は、1インクリメントした後のインデックス値が、予め定めた最大値(例えば、インデックス値が256個の場合、255)を超え、かつ、処理対象の画素データが1ラスタの画像データ中の最後の画素でない場合、当該ラスタの画像データのパレットの作成を中止する。すなわち、パレット生成・インデックス変換部148は、次の画素データ以降S31〜34の処理を行わない。
【0117】
上記のようにして、ラスタ毎にパレットおよびインデックス画像データが生成され、DRAM12に格納される。また、インデックス値の割り当てが足りずにパレットを作成できなかったラスタについては、元画像データがそのままDRAM12に保持される。
【0118】
なお、上記では、ラスタ毎にパレットおよびインデックス画像データを生成しているが、全てのインデックス値(例えば、256個)を割り当てたときに、DRAM12に生成されているインデックス画像データを1つの単位としてもよい。すなわち、生成された各インデックス画像データに対応するパレットのサイズは全て同じであり、一方、各インデックス画像データのサイズは必ずしも同じとならない。このように構成すれば、パレットの作成を完了できない場合がなくなるとともに、元画像データをDRAM12に保持する必要がなくなり、メモリーの空き容量をできる限り大きくすることができる。
【0119】
また、上記では、制御部147が1ラスタの画像データ123をDRAM12に格納するようにしているが、1ラスタの画像データを格納できるSRAMを設け、当該SRAMに、パレット生成・インデックス変換部148が、制御部147から出力された1ラスタの画像データを格納するようにしてもよい。
【0120】
以上、本発明の第2実施形態について説明した。本実施形態によれば、インデックス変換(パレットの作成を含む。)の処理効率を向上することができる。すなわち、本実施形態によれば、パレット生成と並行して、割り当てたインデックス値を用いてインデックス変換が行われる。このような構成により、階調値に対応するインデックス値を特定するためにパレットに繰り返しアクセスをする必要がなくなり、インデックス変換処理が全体的に効率化される。
【0121】
なお、上記の本発明の実施形態は、本発明の要旨と範囲を例示することを意図し、限定するものではない。多くの代替物、修正および変形例が当業者にとって明らかである。
【0122】
例えば、上記の実施形態では、スキャナー制御ASIC15から出力される画像データを、ヒストグラム生成、パレット生成、インデックス変換の対象としていたが、これに限られない。I/O制御ASIC17から出力される画像データ(例えば、ネットワークI/F、USBI/F、パラレルI/Fから入力される画像データ)を対象としてもよい。
【符号の説明】
【0123】
1:画像処理装置、10:コントローラー、11:CPU、12:DRAM、13:ROM、14:メモリー制御ASIC、15:スキャナー制御ASIC、16:印刷制御ASIC、17:入出力(I/O)制御ASIC、18:ネットワークインターフェイス(I/F)、20:スキャナー、30:印刷エンジン、40:操作パネル、121:画像データ、122:インデックス画像データ、123:画像データ、124:インデックス画像データ、141:制御部、142:インデックス変換部、143:パレット生成部、144:SRAM、145:ヒストグラム生成部、146:SRAM、147:制御部、148:パレット生成・インデックス変換部
【特許請求の範囲】
【請求項1】
多値画像データを処理する画像処理装置であって、
階調値毎にその出現度数を記憶するヒストグラム記憶手段と、
インデックス値毎にその階調値を記憶するパレット記憶手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数を出力する、出力手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数に1加算する、ヒストグラム生成手段と、
前記出力手段により出力された出現度数が0である場合に、当該階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、
を有することを特徴とする画像処理装置。
【請求項2】
多値画像データを処理する画像処理装置であって、
階調値毎にその出現度数を記憶するヒストグラム記憶手段と、
インデックス値毎に、前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値を記憶する、パレット記憶手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値と上位の階調値が等しい複数の階調値の出現度数を出力する、出力手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数に1加算する、ヒストグラム生成手段と、
前記出力手段により出力された複数の出現度数がいずれも0である場合に、当該階調値を前記所定ビット数削減した階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、
を有することを特徴とする画像処理装置。
【請求項3】
請求項2に記載の画像処理装置であって、
前記ヒストグラム記憶手段は、
前記所定ビット数の最小値から最大値までの値ごとに、並列アクセス可能な複数の記憶領域に分割されており、また、前記複数の記憶領域のそれぞれは、前記画像データに含まれる画素データの階調値のビット数よりも前記所定ビット数小さい階調値毎に、その出現度数を記憶し、
前記出力手段は、
前記画像データに含まれる画素データ毎に、前記複数の記憶領域それぞれに並列にアクセスし、その階調値を前記所定ビット数削減した階調値の出現度数を並列に出力する、
ことを特徴とする画像処理装置。
【請求項4】
多値画像データを処理する画像処理装置であって、
前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値毎に、その出現度数を記憶する、ヒストグラム記憶手段と、
インデックス値毎に、前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値を記憶する、パレット記憶手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値の出現度数を出力する、出力手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値の出現度数に1加算する、ヒストグラム生成手段と、
前記出力手段により出力された出現度数が0である場合に、当該階調値を前記所定ビット数削減した階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、
を有することを特徴とする画像処理装置。
【請求項5】
請求項1〜4いずれか一項に記載の画像処理装置であって、
1フレームの画像データ毎に、ヒストグラムおよびパレットが生成される、
ことを特徴とする画像処理装置。
【請求項1】
多値画像データを処理する画像処理装置であって、
階調値毎にその出現度数を記憶するヒストグラム記憶手段と、
インデックス値毎にその階調値を記憶するパレット記憶手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数を出力する、出力手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数に1加算する、ヒストグラム生成手段と、
前記出力手段により出力された出現度数が0である場合に、当該階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、
を有することを特徴とする画像処理装置。
【請求項2】
多値画像データを処理する画像処理装置であって、
階調値毎にその出現度数を記憶するヒストグラム記憶手段と、
インデックス値毎に、前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値を記憶する、パレット記憶手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値と上位の階調値が等しい複数の階調値の出現度数を出力する、出力手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値の出現度数に1加算する、ヒストグラム生成手段と、
前記出力手段により出力された複数の出現度数がいずれも0である場合に、当該階調値を前記所定ビット数削減した階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、
を有することを特徴とする画像処理装置。
【請求項3】
請求項2に記載の画像処理装置であって、
前記ヒストグラム記憶手段は、
前記所定ビット数の最小値から最大値までの値ごとに、並列アクセス可能な複数の記憶領域に分割されており、また、前記複数の記憶領域のそれぞれは、前記画像データに含まれる画素データの階調値のビット数よりも前記所定ビット数小さい階調値毎に、その出現度数を記憶し、
前記出力手段は、
前記画像データに含まれる画素データ毎に、前記複数の記憶領域それぞれに並列にアクセスし、その階調値を前記所定ビット数削減した階調値の出現度数を並列に出力する、
ことを特徴とする画像処理装置。
【請求項4】
多値画像データを処理する画像処理装置であって、
前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値毎に、その出現度数を記憶する、ヒストグラム記憶手段と、
インデックス値毎に、前記画像データに含まれる画素データの階調値のビット数よりも所定ビット数小さい階調値を記憶する、パレット記憶手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値の出現度数を出力する、出力手段と、
前記画像データに含まれる画素データ毎に、前記ヒストグラム記憶手段にアクセスして、その階調値を前記所定ビット数削減した階調値の出現度数に1加算する、ヒストグラム生成手段と、
前記出力手段により出力された出現度数が0である場合に、当該階調値を前記所定ビット数削減した階調値にインデックス値を割り当て、前記パレット記憶手段にアクセスして、当該インデックス値の階調値として記憶する、パレット生成手段と、
を有することを特徴とする画像処理装置。
【請求項5】
請求項1〜4いずれか一項に記載の画像処理装置であって、
1フレームの画像データ毎に、ヒストグラムおよびパレットが生成される、
ことを特徴とする画像処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2011−44897(P2011−44897A)
【公開日】平成23年3月3日(2011.3.3)
【国際特許分類】
【出願番号】特願2009−191528(P2009−191528)
【出願日】平成21年8月21日(2009.8.21)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】
【公開日】平成23年3月3日(2011.3.3)
【国際特許分類】
【出願日】平成21年8月21日(2009.8.21)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】
[ Back to top ]