(実施例1)
図1は、実施例1におけるシステム構成を示す概略図である。図1では、複合機(MFP)101とコンピュータ(以下、PC)102が、ネットワーク103を介して接続されている。
点線104と105は処理の流れを示しており、104は、ユーザがMFP101のスキャナを用いて紙文書を読み込ませる処理を示す。その際、ユーザは、後述するMFP101のユーザーインターフェース(図2の203)を用いて、スキャン画像を送信する宛先(例えば、PC102)と、スキャンや送信に関わる各種設定を行うことができる。その各種設定として、ユーザは、解像度、圧縮率、データ書式(例えば、JPEG、TIFF、PDF、PDF高圧縮、PDF高圧縮(OCR結果付き))などを指定できる。本実施例では、データ書式としてPDF高圧縮(OCR結果付き)が指定された場合についての説明を行う。PDF高圧縮の技術詳細については後述する。105は、指定された各種設定に基づいて、MFP101のソフトウェアあるいはハードウェア機能を利用してデータを生成し、指定された宛先に送信する処理を示す。ここで、PC102へ送信された画像は、PDFなどのファイルフォーマットで送信されることになるので、PC102の有する汎用的なビューアで閲覧可能である。
図2は、MFP101の詳細構成を示す図である。MFP101は、画像入力デバイスであるスキャナ部201と、画像出力デバイスであるプリンタ部202、MFP全体の制御を行う制御ユニット204、ユーザーインタフェースである操作部203等を有する。制御ユニット204は、スキャナ部201、プリンタ部202、操作部203と接続し、一方では、LAN209と接続することで、画像情報やデバイス情報の入出力を行うコントローラである。CPU205はシステム全体を制御するプロセッサである。RAM206はCPU205が動作するためのシステムワークメモリであり、画像データを一時記憶するための画像メモリでもある。ROM210はブートROMであり、システムのブートプログラム等のプログラムが格納されている。記憶部211は、ハードディスクドライブ等の不揮発性記憶媒体であり、システム制御ソフトウェアや画像データを格納する。操作部I/F207は操作部(UI)203とのインターフェース部で、操作部203に表示するための画像データを操作部203に対して出力する。また、操作部I/F207は、操作部203を介して本画像処理装置のユーザが指示した情報を、CPU205に伝える役割をする。ネットワークI/F208は本画像処理装置をLAN209に接続し、データの入出力を行う(例えば、PDF形式の圧縮データを別の装置に送信したり、別の装置からPDF形式の圧縮データを受信したりする)。以上のデバイスがシステムバス216上に配置される。また、イメージバスインターフェース212は、システムバス216と画像データを高速で転送する画像バス217とを接続し、データ構造を変換するバスブリッジである。画像バス217は、例えば、PCIバスやIEEE1394で構成される。画像バス217上には以下のデバイスが配置される。ラスターイメージプロセッサ(RIP)213は、PDL(ページ記述言語)コードを解析し、指定された解像度のビットマップイメージに展開する、いわゆるレンダリング処理を実現する。デバイスI/F部214は、信号線218を介して画像入力デバイスであるスキャナ部201を接続し、信号線219を介して画像出力デバイスであるプリンタ部202を接続しており、画像データの同期系/非同期系の変換を行う。データ処理部215では、PDF高圧縮やOCRなどの処理を行うことで、PDF形式の圧縮データ(515)を生成する。生成された圧縮データ(515)は、ネットワークI/F208及びLAN209を介して、指定された宛先(例えば、クライアントPC102)に送信される。また、このデータ処理部215は、ネットワークI/F208及びLAN209を介して受信した圧縮データの伸長を行うこともできる。伸長画像は、デバイスI/F214を介してプリンタ部202に送られ、印刷されることになる。
<データ処理部215の説明>
次に、図2のデータ処理部215により実現される画像圧縮処理部の構成と画像伸長処理部の構成について、図5及び図6のブロック図を用いて説明する。データ処理部215は、プロセッサがコンピュータプログラムを実行することにより、図5または図6の各処理部として機能するように構成してもよいし、その一部または全部をASICや電子回路等のハードウェアで構成するようにしてもよい。
PDF高圧縮処理は、特許文献1で述べられているように、属性毎の領域判定を行い、各領域の属性に応じて、MMRによる2値可逆圧縮とJPEGによる多値非可逆圧縮とを適応的に変えて圧縮する。すなわち、文字領域に対してはMMR圧縮し、文字領域を周りの色で塗りつぶした画像をJPEG圧縮することにより、圧縮率を高くできるとともに、文字領域については高い品位が得られるようにする。このPDF高圧縮の処理は、カラーまたはモノクロの多値画像に対して有効な圧縮技術である。詳細は後述するが、本実施例では、2値化すると潰れてしまう領域が文字領域であるか否かを判定することができる。そうすることにより、本当の文字領域だけをMMR圧縮すべき対象であると判定できるようになる。
図5は、データ処理部215により実現される画像圧縮処理部の構成を示すブロック図であり、入力画像を圧縮して高圧縮PDF(OCR結果付き)を生成するための各処理部を示す。
2値化部502は、多値画像である入力画像501から2値画像を生成する。2値画像では、入力画像において閾値より濃い画素が例えば黒画素、閾値以下の画素が例えば白画素となる(もちろん、2値化結果は、黒、白で表されず、他の色で表されても良いし、色は無く、1、0や0、1で表されてもよい)。また、2値化部502では、閾値より濃い画素と、閾値以下の画素を区別することを目的としているが、同じ目的を達成できるのであれば、2値化以外の方法でも良い(例えば、3値化、4値化でも良い)。ただし、以下は、2値化部502で2値化がされたものとして説明を行う。なお、入力画像が701のような画像である場合、2値画像は702のようになる。なお、入力画像がカラーの多値画像である場合には、2値化は、その多値画像の輝度(例えば、YUVのうちのY)に対してのみ行われることになる。
領域判定部503は、2値化部502で生成された2値画像から、文字領域と写真領域を検出する。これにより、例えば、704と706が文字領域として、705が写真領域として検出される。この処理は、公知の領域識別手法(例えば、特開平06−068301号公報)によってなされる。概要を説明すると例えば以下の通りとなる。
(1)2値画像702に対して8連結で繋がる黒画素の輪郭を追跡することにより、8方向の何れかの方向で連続して存在する黒画素の塊(黒画素塊)を抽出する。8連結とは、左上、左、左下、下、右下、右、右上、上の8つの方向の何れかで同じ色(今回のケースでは黒)の画素が連続しているという意味である。一方、4連結とは、左、下、右、上の4つの方向の何れかで同じ色の画素が連続しているという意味である。
(2)抽出された黒画素塊の中に、一定の大きさを越える黒画素塊(例えば、黒画素塊によって囲まれる領域の面積が一定の面積を超えるような黒画素塊。)があれば、その領域内に白画素塊があるかを特定する。即ち、その領域内の4連結で繋がる白画素の輪郭を追跡することにより、白画素塊を抽出する。更に、抽出した白画素塊が一定の大きさを越える場合には、再度同様の黒画素の輪郭を追跡することにより黒画素塊の抽出を行う。これらの処理は、画素塊が一定の大きさ以下になるまで繰り返し行う。
(3)得られた黒画素塊を、大きさや形状、黒画素密度のうちの少なくとも1つを用いて、文字か写真かに分類する。例えば、縦横比が1に近く(即ち、1プラスマイナスαに収まる。αは固定の閾値で例えば0.1。)、かつ、大きさが定められた範囲(例えば、黒画素塊によって囲まれる画素の数が100画素以下)の黒画素塊を、文字を構成する黒画素塊と判定する。そして、残りの黒画素塊を写真を構成する画素塊と判定する。
(4)文字を構成する黒画素塊同士の距離が所定の距離(例えば、3画素。)内である場合に、その黒画素塊同士を同じグループに分類する。その上で、同じグループに分類された黒画素塊の何れをも包含する外接矩形領域を文字領域(704、706)と判定する。なお、文字を構成する他の黒画素塊が所定の距離内に無い、文字を構成する黒画素塊は、それ単独で一つのグループを構成することになる。従って、その単独の黒画素塊の外接矩形領域が文字領域と判定されることになる。なお、写真を構成する黒画素塊に対して(4)で説明した処理と同様の処理がなされるものとする。
(5)各領域の位置と、その領域の属性判定情報(文字か写真か)とを判定結果として出力する。
上記の(1)から(5)の処理により、704と706が文字領域、705が写真領域であるという判定結果が出力されることになる。以上で領域判定部503の説明を終える。
文字切出し部504は、領域判定部503で生成された文字領域の夫々に対して、文字切り矩形の切り出し処理を行う。切り出された結果は、710、711、712、713のようになる。この切り出し処理は以下の処理から構成される。
(1)文字領域の一つを選択する(例えば、708を選択する)。
(2)文字領域によって特定される一の2値画像に対して横方向から射影を取る。具体的には、横方向に伸びるラインに黒画素がいくつあるかを数え、その数えた結果が射影となる。取られた射影を715に表す。この射影715において、閾値より多くの黒画素があった縦方向に連続するラインを一つのグループにする。この結果、三つのグループが生じることになる。三つのグループは、ABCDの存在するライン群から構成されるグループ、EFGの存在するライン群から構成されるグループ、及び、Hの存在するライン群から構成されるグループである。
(3)各グループに対して、縦方向から射影を取る。716は、ABCDの存在するライン群に対して取った射影を表す。
(4)各グループの射影において、閾値より多くの黒画素があった横方向に連続するラインを一つのグループにする。例えば、射影716では、四つのグループに生じることになる。四つのグループは、Aの存在するライン群から構成されるグループ、Bの存在するライン群から構成されるグループ、Cの存在するライン群から構成されるグループ、Dの存在するライン群から構成されるグループからなる。
(5)(4)で得られた各ライン群のグループの外接矩形を文字切出し矩形として切り出す。その結果、例えば、各文字の外接矩形が文字切出し矩形として切り出されることになる。切り出された結果は、711、712、713、710に示す通りである。
(6)以上(1)−(5)の処理を、選択されていない文字領域が無くなるまで繰り返す。
ここで、図7を用いて、処理対象となる画像と、2値化・領域判定・文字切出しの処理結果の画像の例を示す。画像701は入力画像501の例であり、7011は白の背景上に記載された文字画像、7012は薄い濃度の背景上に記載された文字画像、7013は濃い濃度の背景上に記載された文字画像の例を示している。すなわち、文字7011と7012は、文字と背景の濃度差が大きい文字画像であり、文字画像7013は文字と背景の濃度差が小さい文字画像である。
702は、2値化部502において画像701を2値化した結果の2値画像の例であり、文字7013は、背景の濃度よりも小さい値の閾値で2値化が行われて、黒く潰れてしまっている状態を示している。
本実施例では、2値化すると潰れてしまう文字画像(例えば、閾値より濃い背景上のさらに濃い文字など、背景と文字の濃度差が小さくて2値化しても背景と文字を分離するのが困難な画像)を、「背景から分離困難な文字画像」と呼ぶこととする。また、2値化した場合に潰れない文字画像(例えば、白または閾値より薄い背景上の黒文字など、背景と文字の濃度差が大きて2値化したときに背景と文字を分離するのが容易な画像)を、「背景から分離容易な文字画像」と呼ぶこととする。すなわち、「背景から分離容易な文字画像」は、2値化すると文字画像部分が黒画素となり文字以外の背景部分は白画素になる文字領域の画像である。
703は、領域判定部503で2値画像702に対して領域判定を行った結果を示す。領域判定の結果、704と706は文字領域と判定され、705は写真領域として判定されたものとする。文字領域707と708は、2値画像703から、領域判定部503により文字領域と判定された部分画像を抽出したものである。709は、文字切り出し部504により切り出された文字切り矩形の概略図を示す。710は文字領域704内から切り出された文字切り矩形である。また、711、712、713は、文字領域706内から切り出された文字切り矩形である。
領域判定部2(505)は、文字切り出し部504により切り出された文字切り矩形内の文字画像について、2値化すると潰れてしまう文字(背景から分離困難な文字画像)であるか否かを判定する。領域判定部2の判定方法の詳細については後述する。領域判定部2(505)で「背景から分離困難な文字画像」であると判断された文字領域の情報に基づいて、領域判定部503で生成された文字領域情報と、文字切り出し部504で生成された文字切り矩形情報とを修正する。すなわち、領域判定部503で生成された文字領域情報と、文字切り出し部504で生成された文字切り矩形情報とから、領域判定部2(505)で「背景から分離困難な文字画像」であると判断された文字領域の情報を除去する。そうすることにより、「背景から分離困難な文字画像」であると判断された文字領域は、文字ではないと判定されることにより、後述のMMR圧縮がかからず、文字画像が見えなくなってしまうという問題を解決できることになる。
MMR圧縮部506は、2値化部502で生成された2値画像から、領域判定部2(505)で修正した後の文字領域情報に基づいて文字領域の2値画像を抽出する(即ち、「背景から分離容易な文字画像」と判断された文字切り矩形領域に含まれる2値画像のみを抽出する)。そして、当該抽出した文字領域の2値画像に対してMMR圧縮を行い、圧縮コード1(511)を生成する。
縮小部507は、入力画像501を縮小処理(低解像度化処理)し、縮小多値画像(不図示)を生成する。
代表色抽出部508は、領域判定部2(505)で修正した後の文字領域情報と文字切り矩形情報とに基づいて、2値画像における各文字を構成する画素(黒画素)の位置を特定する。そして、当該特定した文字の画素の位置に基づいて、縮小多値画像における対応する位置の色を参照して、文字切り矩形領域単位で文字の代表色を算出し、各文字の文字色情報513を得る。例えば、代表色は、文字切り矩形領域における2値画像で黒となった画素群の多値画像における色の平均や重み付け平均である。あるいは、そうした画素群の中で最も頻度の多い色である。このように代表色の取り方は様々考えられるが、文字切り矩形領域における2値画像で黒となった画素群のうちの少なくとも一画素の、多値画像における色が、代表職の算出には用いられることになる。
文字領域穴埋め部509は、領域判定部2(505)で修正した後の文字領域情報と文字切り矩形情報とに基づいて、2値画像における各文字を構成する画素(黒画素)の位置を特定する。そして、当該特定した画素の位置に基づいて縮小多値画像における対応する位置の画素を、その周辺色で塗り潰す処理を行う。周辺色は文字の周囲の画素の画素値の平均値を用い、文字の画素の画素値を当該求めた周辺色で置き換えればよい。文字領域穴埋め部による穴埋め処理の詳細については、特許文献1に記載されている。
JPEG圧縮部510は、文字領域穴埋め部509で穴埋め処理した後の画像をJPEG圧縮して、圧縮コード2(514)を生成する。
OCR部(516)は、領域判定部(503)で文字領域と判定された領域に対してステップ904において生成された文字切り矩形情報を参照しながら、公知の文字認識処理を行う。文字コード517は、その文字認識処理により得られた文字コードである。
ここで、MMR圧縮部(506)で、MMR圧縮する際には、領域判定部2(505)で文字として判定された領域、すなわち「背景から分離容易な文字画像」と判断された領域を対象としてMMR圧縮したのに対し、OCR部(516)でOCRする際には、領域判定部(503)で文字領域として判定された領域を対象としてOCRする。
このうち「背景から分離容易な文字画像」は、領域判定部(503)で文字領域と判定した領域のうちの一部の領域となっていることから、「背景から分離容易な文字画像」の方が狭い。即ち、OCR対象領域は広く、MMR圧縮領域は狭い。
なぜOCRされる領域の方が広くなっているのか。それは、OCR対象領域の中にたとえ本当は文字でないものが存在していたとしても、余計な文字コードが得られるだけであり、それほど大きな問題とはならないためである(余計だと思うのであればそうした文字コードを消せば良い)。これに対し、MMR圧縮時に、本当は文字でない領域をMMR圧縮してしまうと、その領域の画質劣化が起きてしまう。そのため、OCRでは広めの領域を対象として、MMR圧縮では狭めの領域を対象とした処理を行っているのである。
このようにして、各構成要素から得られた圧縮コード1(511)と、修正後の文字領域情報(512)と、文字色情報(513)と、圧縮コード2(514)と、文字コード(517)を含む圧縮データ(515)のファイルがPDF形式で生成される。生成されたPDF形式のファイルは、上述の通り、ユーザにより指定された宛先へと送信されることになる。
図6は、別の装置から送られてきたPDF形式の圧縮データを伸長する画像伸長処理部の構成を示すブロック図である。図6の処理は、圧縮データを伸長して印刷する場合などに実行される。ここでは、別の装置から送られてきた圧縮データが515と同じファイルであった場合を例に説明する。
MMR伸長部601は、圧縮データ(515)のファイルに含まれている圧縮コード1(511)に対してMMR伸長処理を行い、2値画像を再現する。JPEG伸長部603は圧縮コード2(514)に対してJPEG伸長処理を行い、縮小多値画像を再現する。拡大部604は、JPEG伸長部(603)で伸長された縮小多値画像に対して、拡大処理を行うことで、圧縮前の入力画像501のサイズと同じサイズの多値画像を生成する。
合成部602は、文字領域情報(512)を参照しながら、MMR伸長部で伸長された2値画像の黒画素に文字色情報の色(以下、文字色と称する。513)を割り当る。更に、当該文字色が割り当てられた2値画像を、拡大部604で生成された多値画像の上に合成することにより、伸長画像605を生成する。合成する際、2値画像における白画素に対しては透明色が割り当てられており、背景の多値画像を透過する。このように、画像伸長処理部は、画像圧縮処理部により生成された圧縮データを伸長し、伸長画像605を生成する。この伸長画像605は、デバイスI/F214を介してプリンタ部202に送られ、印刷されることになる。なお、この画像伸長処理部は、文字コード517は無視する。これは、伸長画像を印刷する上で文字コードは不要だからである。文字コードを必要とするのは、伸長画像605をディスプレイに表示するクライアントPC102のような装置であって、MFP101ではない。従って、MFP101は、文字コード517は無視する。なお、正確に言うと、文字コードを必要としているのは、PC102というより、PC102を利用するユーザである。文字列の切り貼り、編集をしたい場合に、文字コードは活用されることになる。
次に、上述した領域判定部2(505)が実行する処理の詳細について説明する。領域判定部2(505)は、2値化部502で生成された2値画像と、縮小部507で生成された縮小多値画像と、文字切出し部504で生成された文字切り矩形情報とに基づいて、文字切り矩形内の文字画像は2値化によって潰れるかどうかの判定を行う。なお、記憶部211において、入力画像501が保持されている場合は、縮小多値画像の代わりに、入力画像501を用いてもよい。
領域判定部2(505)の詳細構成について図3を用いて説明する。説明を行う上で、図4の文字画像の例を適宜参照する。ここで、図4の401は、白の背景上に記載された文字(背景と文字の濃度差が大きい画像)の例を示しており、2値化部502で画像401を2値化すると、402に示すような2値画像となる。また、406は、濃い濃度の背景上に記載された文字(背景と文字の濃度差が小さい画像)の例を示しており、背景407の濃度よりも小さい値の閾値で画像406を2値化すると、408に示すような黒く潰れた画像となる。尚、薄い濃度の背景上に記載された文字は、背景の濃度と文字の濃度の間の閾値で2値化が行われることによって、画像402と同様になるため説明を省略する。403〜405、及び409〜411については、後述する。
領域判定部2(505)は、細線化部301、エッジ検出部302、論理演算部303、エッジカウント部304、エッジ数比較部305から構成される。
領域判定部2(505)は、閾値よりも濃い領域(即ち、402、408で黒くなっている領域)の内部のエッジ画素を抽出する(1)。そして、抽出されたエッジ画素の数が閾値より少ない場合に「背景から分離容易な文字画像」であると判定する(2)。また、閾値以上である場合に、「背景から分離困難な文字画像」であると判定する(2)。
例えば、402の黒くなっている領域の内部には、エッジ画素が無い。一方、408で黒くなっている領域の内部には、エッジ画素(410で表されるHのエッジ画素)がある。ここでいうエッジ画素とは、もちろん二値画像から抽出されたエッジ画素ではなく、多値画像(入力画像)から抽出されたエッジ画素という意味である。
下記構成は、以上の処理(1)(2)を実現するための一構成であり、この構成に限られるわけではない。他に考えられる構成については後述する。
細線化部301は、2値画像に対して文字切り矩形情報を参照しながら、文字切り矩形単位で細らせ処理を実行する。細らせ処理は、2値画像内の黒画素塊の外側の2画素を削る(すなわち、黒画素塊の輪郭にある黒画素を白画素に置換する)ことによって、黒画素塊を細らせるための処理である。例えば、対象とする一つの文字切り矩形に含まれる2値画像内の各画素を順に注目画素として、5×5のウインドウを利用して走査を行う。そして、5×5のウインドウ中で1画素でも白画素が存在すれば、注目画素(5×5の中心)を白画素に置き換えることで、細らせ処理を行う。ここで、2値画像402に対して細らせ処理を行うと、403のような細線化画像になる。また、2値画像408に対して細線化を行うと、409のような細線化画像になる。
エッジ検出部302は、入力された縮小多値画像に対して、文字切り矩形情報を参照しながら、文字切り矩形単位でエッジ検出を行う。エッジであると判定された画素を黒画素として、エッジでないと判定された画素を白画素として表現した画像を、エッジ検出画像とする。エッジ検出は、公知の手法を用いればよいため、詳細については省略するが、以下の処理が考えられる。例えば、縮小多値画像の輝度成分に対して微分フィルタ処理を実行して各画素のエッジ強度を求め、該エッジ強度が所定閾値以上の画素を黒画素とし、エッジ強度が所定閾値より小さい画素を白画素とすることでエッジ検出画像を生成する。ただし、実施例4で説明するエッジ検出方法を利用するとより高精度なエッジ検出が実現できる。入力画像401を縮小することによって得られる不図示の縮小多値画像に対してエッジ検出を行うと、404のようなエッジ検出画像が得られる。また、入力画像406を縮小することによって得られる不図示の縮小多値画像に対してエッジ検出を行うと、410のようなエッジ検出画像が得られる。ここで、入力画像401や406を縮小することによって得られる不図示の縮小多値画像が、入力画像の1/2の解像度である場合は、404や410も、入力画像の1/2の解像度となるが、説明の簡略化のため、同じ大きさで図示している。なお、記憶部211において、入力画像401や406が保持されている場合は、縮小多値画像の代わりに、入力画像401や406を用いてエッジ検出を行ってもよい。
論理演算部303は、細線化部301によって生成された細線化画像と、エッジ検出部302によって生成されたエッジ検出画像との論理積(AND)をとって、論理積(AND)画像を生成する処理を行う。具体的には、細線化部301によって生成された細線化画像に黒画素があり、且つエッジ検出部302によって生成されたエッジ検出画像の同じ位置に黒画素がある場合のみ、論理積を取ると黒画素になる。なお、エッジ検出部302によって生成されたエッジ検出画像が、細線化画像の1/2の解像度である場合は、エッジ検出画像を0次補間によって、細線化画像の解像度に合わせてから論理積をとる。または、細線化画像を間引くことによって、エッジ検出画像の解像度に合わせてから論理積をとる。細線化画像403とエッジ検出画像404との論理積をとると、細線化画像403の黒画素とエッジ検出画像404の黒画素は、同じ位置にないため、論理積画像405内の黒画素は基本的に無くなる(ただし、ノイズ等の影響により少し残る場合はある)。一方、細線化画像409とエッジ検出画像410との論理積を取ると、論理積画像411のように、文字の輪郭部分に黒画素が残る。このように、「背景から分離容易な文字画像」に対する論理積画像内の黒画素の数は少なく、「背景から分離困難な文字画像」に対する論理積画像内の黒画素数は多いという特徴がある。
なお、412は、細線化画像403とエッジ検出画像404とを重ね合わせた場合を示す図である。413は細線化画像403の黒画素に相当し、414はエッジ検出画像404の黒画素に相当しており、細線化画像413の黒画素とエッジ検出画像414の黒画素は、同じ位置にないので、論理積を取ると黒画素は生成されないことになる。
エッジカウント部304は、論理演算部303によって論理積(AND)をとった結果(論理積画像)における黒画素の数を、エッジ数としてカウントする処理を行う。
エッジ数比較部305は、エッジカウント部304によってカウントされたエッジ数と所定の閾値とを比較し、「背景から分離容易な文字画像」であるか「背景から分離困難な文字画像」であるかを判定する。すなわち、エッジ数が所定閾値より少なければ、「背景から分離容易な文字画像(2値化したときに潰れない文字画像)」であると判定し、エッジ数が所定閾値以上であれば、「背景から分離困難な文字画像(2値化したときに潰れる文字画像)」であると判定する。
なお、黒画素塊の画素の幅が、細らせ処理の細らせ幅よりも小さい場合には、細らせ処理により、2値画像内の黒画素塊がすべてなくなってしまう場合がある。例えば、2値画像の黒画素塊が3画素幅で構成される細線文字で、細らせ処理の細らせ幅が4画素の場合、2値画像を細らせると黒画素塊がなくなってしまう。このように黒画素塊がなくなってしまう場合には、処理スピード向上の観点で、エッジ検出部302と論理演算部303とエッジカウント部304とエッジ数比較部305の処理を省くことが好ましい。これは、エッジ検出部302でエッジ画素を検出したとしても、細線化画像との間で論理積を取り、その結果得られるエッジ数をカウントすると、カウント結果が0になることが明らかだからである。カウント結果が0になると、エッジ数が所定閾値より少ないということになるので、「背景から分離容易な文字画像(2値化したときに潰れない文字画像)」であると判定できる。従って、対象とする文字切り矩形における黒画素が細らせ処理により全てなくなってしまう場合には、エッジ検出部302−エッジ数比較部305の処理を行わずして、その文字切り矩形を「背景から分離容易な文字画像(2値化したときに潰れない文字画像)」であると判定することになる。このように302−305の処理を省いた場合には、次の文字切り矩形領域を対象として、その領域に対して細線化部301−エッジ数比較部305の処理に移る。なお、上述の処理を省く理由は、以下のようにも説明できる。即ち、細線化したくらいで黒画素がなくなるようであれば元の二値画像の黒画素群はかなり細いといえ、細い黒画素群は一般に文字や線である。よって、上述の処理を省いて、対象とする文字切り矩形領域は、「背景から分離容易な文字画像(2値化したときに潰れない文字画像)」であると判定するのが処理スピードの面で好ましいというようにも説明できる。
あるいは、2値画像内の黒画素がすべてなくなる場合には、削る画素数を減らす事も可能である。例えば、5×5のウインドウ中で1画素でも白画素が存在すれば、注目画素(5×5の中心)を白画素に置き換えると黒画素塊がすべて白画素となってしまう場合にはウインドウサイズを小さくし、3×3のウインドウで処理する事も可能である。なお、細線化と細らせ処理は同義である。
なお、上述の説明では、エッジカウント部304によってカウントされたエッジ数と所定の閾値とを比較すると記載したが、エッジ数を、細線化画像の黒画素数で割った値を、所定の閾値と比べるのも好ましい。そうすることにより、文字切り矩形領域のサイズによらず適切な判断ができることになる。また、文字切り矩形領域を構成する全ての画素数や、その矩形領域を二値化した後の黒画素の数でエッジ数を割ることも考えられる。ただし、一番精度が高いのは、上述の通り、細線化画像の黒画素数でエッジ数を割ることである。そのようにすると、二値画像の内側(濃い領域の内側)にどれだけの割合でエッジが存在するかがわかるからである。この割合が高ければ高いほど、二値画像の内側にエッジが高い割合で存在すると言え、よって、この二値画像が文字でない可能性が高いと言えることになる。
次に、図8のフローチャートを用いて、データ処理部215が実行する各処理の説明を行う。説明を行う上で、図2、3、5を適宜参照する。なお、領域判定部2(505)は、図8の905〜911の処理を実行する。
ステップ901にて、2値化部502は、入力画像501に対して2値化処理を実行する。
ステップ902にて、領域判定部503は、2値画像に対して領域判定処理を実行し、2値画像内に含まれる各領域を識別し、当該識別された領域が文字領域か非文字領域かの判定を行う。
ステップ903にて、領域判定部で判定された領域の1つを順に注目領域とし、その注目領域が領域判定部で文字領域と判定された領域である場合は、ステップ904へ進み、非文字領域と判定された領域である場合は、ステップ913へ進む。
ステップ904にて、文字切出し部504は、当該注目領域内の画像に対して文字切り出しを行うことによって、文字切り矩形情報を生成する。
ステップ916にて、OCR部516は、領域判定部(503)で文字領域と判定された領域に対して、ステップ904において生成された文字切り矩形情報を参照しながら、公知の文字認識処理を行う。
ステップ905にて、細線化部301は、ステップ902において2値化された2値画像に対して、ステップ904において生成された文字切り矩形情報を参照しながら、文字切り矩形内の2値画像ごとに細線化処理を実行する。
ステップ906にて、エッジ検出部302は、入力画像を縮小した縮小多値画像(または入力画像501)と、ステップ904において生成された文字切り矩形情報とを用いて、文字切り矩形内の縮小多値画像(または文字切り矩形内の入力画像。)ごとにエッジ検出処理を実行する。
ステップ907にて、論理演算部303は、ステップ905において細線化部301によって生成された細線化画像と、ステップ906において生成されたエッジ画像の論理積(AND)をとる。
ステップ908にて、エッジカウント部304は、ステップ907において、論理演算部303によって論理積(AND)をとった結果の論理積画像の黒画素をカウントし、エッジ数を求める。ここで、求めたエッジ数は、更に、文字切り矩形領域の面積(文字切り矩形領域内の画素総数)で割ることにより、単位面積あたりのエッジ数を求めるように正規化を行っても構わない。このようにしておけば、文字切り矩形領域の大きさに依存せずにステップ909で閾値と比較できるという利点がある。
次に、ステップ909にて、エッジ数比較部305は、ステップ908でカウントされたエッジ数と閾値thとの比較を行う。ここで、エッジ数が閾値thよりも大きい場合は、ステップ910にて、対象とする文字切り矩形領域を「背景から分離困難な文字画像」であると判断する。また、エッジ数が閾値th以下の場合は、ステップ911にて対象とする文字切り矩形領域を「背景から分離容易な文字画像」と判断する。
ステップ912にて、文字切出し部504は、当該着目している文字領域内の全ての文字切り矩形について処理が終了しているかどうか判断し、終了していると判断するとステップ913へ進む。一方、未処理の文字切り矩形があると判断した場合は、ステップ914にて次の文字切り矩形を処理対象として設定して、ステップ905に戻る。
ステップ913にて、全ての領域についての判定が終了したと判断すると本処理を終了し、未処理の領域があると判断した場合は、ステップ915にて未処理の次の領域を注目領域として設定して、ステップ903に戻る。
以上のように、領域判定部2(505)において、文字切り矩形領域ごとに、細線化画像とエッジ検出画像との論理積を取った結果の黒画素の数(残ったエッジ数)にもとづいて、各文字切り矩形領域が「背景から分離容易な文字画像。」であるか「背景から分離困難な文字画像」であるかを、高精度に判定できるようになる。
「背景から分離困難な文字画像」(例えば図7の713)に対しては、文字領域情報から除去するので、MMR圧縮部506の処理対象にならない。すなわち、「背景から分離困難な文字画像」は、2値化されずに、背景画像とともにJPEG圧縮部510で圧縮処理されることになる。
以上のように、2値化すると潰れる文字画像であるか否かを判定することができるので、PDF高圧縮に適用した場合は、文字画像が潰れるのを防ぐことができる。
尚、本実施例では、「背景から分離困難な文字画像(2値化すると潰れてしまう文字画像。)」として、図4の406と408で示したように、1文字の「H」の場合を例にあげたが、これに限るものではなく、例えば、図9の入力画像1001に示すように2文字以上であっても構わない。なお、この入力画像1001を2値化すると2値画像1002となる。また、2値化で潰れた文字画像は矩形である必要はなく、例えば、図9の1003に示すように文字画像の一部が潰れる画像であっても構わない。なお、この入力画像1003を2値化すると、2値画像1004となる。
続いて、領域判定部2(505)の別の構成について説明する。
別の構成では、(A)まず領域判定部2に入力された画像を閾値より濃い領域と、閾値以下の領域に切り分ける(二値化でも三値化でも他の方法でもよい)。その結果、402、408のような領域が手に入る。
そして、(B)その入力された画像における、閾値より濃いと判定された領域(401のH領域や、406の全体領域)からエッジ画素を抽出する(抽出方法は上述の通りである)。このエッジを抽出する際には、閾値より濃いと判定された領域の端の部分(例えば、端から一画素内に入った画素や二画素内に入った画素)は非対象とする。即ち、このBの構成では、閾値より濃いと判定された領域の端の部分から一定距離以上離れた(中に入った)エッジ画素のみを抽出するのである。または、そうした端の部分(一定距離以上離れていない画素)も対象としてエッジ画素を抽出し、そうした端の部分を除去する構成としても良い。そうすることにより、405や411の結果と同じ結果が得られる。なお、この例では、一定距離は、3画素となっているが、他の値であっても良い。
(C)後は、得られた結果である所のエッジ画素の数をカウントし、そのエッジ画素の数が閾値thより大きいか、閾値th以下であるか判定する。
そうすることにより、上述の方法と同様の結果(「背景から分離困難な文字画像」であるか、「背景から分離容易な文字画像」であるかの判断結果)が得られることになる。なお、(B)の処理の代わりに、領域判定部2に入力された画像全体からエッジ画素を抽出しても良い。その場合、入力された画像全体から抽出されたエッジ画素のうち、閾値より濃いと判定された領域の端の部分、及び、閾値以下の領域を除く。そうすることにより、上述の(B)の構成と同じ結果が得られることになる。
なお、本実施例では文字切出し部504で切り出された文字切り出し904結果の文字単位での処理を説明した。この処理は、文字単位ではなく、その文字単位を更に分割して行う事も可能である。例えば、文字切出し部504に対し、領域を4等分に区切り、それぞれの領域での処理を行う事も可能である。例えば、図16の1300〜1304は、文字切りされた406を均等に4分割行った例である。1300〜1304それぞれにおいて処理を行う。更に、均等に区切るのではなく、文字切り出しされた領域の中心部のみ(例えば、文字切り領域の中心部60%のみを使用)で判定を行う事もできる。例えば、図16の1305は、文字切りされた406の中心部60%を抜き出したものであり、この1305に対して処理を行う。また、文字切り出しされた領域での判定と、この領域分割および・又は中心部での判定を合わせて、「背景から分離容易な文字画像」であるか「背景から分離困難な文字画像」であるかの判定を行う事も可能である。
(実施例2)
実施例1では、領域判定部2(505)において「背景から分離困難な文字画像」と判定された領域はMMR圧縮処理を行わないようにした。実施例2では、領域判定部2(505)で「背景から分離困難な文字画像」と判定された領域に対して、2値化部502と異なるアルゴリズムの高精度な2値化処理を再度実行して、背景から文字画像部分の画素を分離するようにしてもよい。この場合、高精度な再2値化処理を行った結果の文字領域を用いてMMR圧縮処理を行えば、文字領域の画質の向上を図れる。例えば、図7の713の領域は「背景から分離困難な文字画像」と判定されるので、その領域713に対応する入力画像701における領域7013のみを、他の領域と異なる閾値で2値化を行う。その結果、図7の714に示すような2値画像を生成することができ、この文字領域をMMR圧縮することができる。なお、高精度の再2値化処理の一例は、固定の閾値で2値化処理を行うのではなく、対象となる領域の濃度あるいは輝度の平均値を閾値として2値化処理する方法である。
(実施例3)
実施例1では、図4の401に示すように比較的文字品位の良い入力画像を例として挙げた。しかしながら、図10の1101に示すように文字品位が悪くノイズ等が多い画像(例えば、スキャン原稿や圧縮画像)に対してエッジ検出処理を行うと、図11の1102に示すように文字の内部で多くのエッジが出現する場合がある。文字内部におけるエッジの出現は、特に大きな文字になるほど、顕著になりやすい。
ここで、エッジ検出画像1102と細線化画像1103から得られる論理積(AND)画像1104では、文字内部のエッジが残りやすい。文字内部のエッジが多く残ると、本来、「背景から分離容易な文字画像」であるにも関わらず、「背景から分離困難な文字画像」と判定されてしまう。
実施例3では、文字切り領域のサイズが大きい場合、細線化部301での細らせ処理の削減量を大きくすることにより、文字内部に残ってしまうエッジを低減することができる。この処理を、図10の1105〜1112を用いて説明する。
1105は、文字品位が悪くノイズ等が多い入力画像の小文字を示す。1106は、小文字の画像1105に対してエッジ検出処理を実行した結果のエッジ検出画像を示す。1107は、小文字の画像1105に対して細らせ処理を実行した結果の細線化画像を示している。細らせ処理では、5×5のウインドウを利用して、5×5の中で1画素でも白画素が存在すれば、注目画素(5×5の中心)を白画素に置き換える処理を行っている。
1108は、エッジ検出画像1106と細線化画像1107との論理積をとった結果の論理積(AND)画像を示している。ここで、文字品位が悪くノイズ等が多い入力画像の小文字であったとしても、大文字の論理積(AND)画像1104と比較すると、エッジ数が少ない。
また、1109は、文字品位が悪くノイズ等が多い入力画像の大文字(1101と同様の文字画像)を示す。1110は、大文字の画像1109に対してエッジ検出処理を実行した結果のエッジ検出画像を示す。1111は、大文字の画像1109に対して細らせ処理を実行した結果の細線化画像を示している。大文字の画像に対する細らせ処理では、9×9のウインドウを利用して、9×9の中で1画素でも白画素が存在すれば、注目画素(9×9の中心)を白画素に置き換える処理を行う。すなわち、文字画像の大きさ(文字切り領域の大きさ)にもとづいて、ウインドウの大きさを変更することで細らせ処理の削減量を大きくしている。なお、上述したウインドウの大きさは一例であり、5×5や9×9に限るものではない。
1112は、エッジ検出画像1110と細線化画像1111との論理積をとった結果の論理積(AND)画像を示している。論理積(AND)画像1112は、前述の論理積(AND)画像1104と比較して、エッジ数が少なくなる。したがって、ノイズが多い大文字であっても、文字画像のサイズが大きければ細らせ処理の削減量を大きくすることで、「背景から分離容易な文字画像」と判定することができる。
以上のように、実施例3によれば、文字切り領域の大きさにもとづいて細線化部による細らせ処理の削減量を制御することで、入力画像がスキャン原稿のような場合であっても、ノイズ等の影響を低減することができ、高精度な判定を行うことができる。
(実施例4)
次に、図11を用いて図5の領域判定部2(505)内のエッジ検出部(302)が行う処理の詳細について説明を行う。エッジ検出部(302)は、分散値検出部1001、エッジ判定閾値算出部1002、エッジ抽出部1003から構成される。エッジ検出部(302)の処理をより詳細に説明するため、図12も合わせて説明を行う。図12の1101、1102、1103はそれぞれ図4内に示した401及び、406と同じく入力画像に対し文字切り矩形情報を参照しながら、文字切り矩形単位で切り出された入力画像を示している。1101、1102、1103はそれぞれ、スキャナ部201で取得された際の信号値が異なっている画像例である。より具体化するために、L*a*b*表色系での信号値をしめしており、L*が明度、a*およびb*で色度を示している。なお、本例ではL*a*b*表色系で示しているが、限定するものでなく例えば、RGB表色系など別の色空間の信号値でも同様の処理が可能である。1101の1104で示す領域の信号値は{L*,a*,b*}={1128,−50,+30}である。1105で示す領域の信号値は{L*,a*,b*}={128,+50,−60}である。1104と1105の領域間で大きな信号値差がある例を示している。一方、1102の1106で示す領域の信号値は{L*,a*,b*}={128,−50,+30}である。1107で示す領域の信号値は{L*,a*,b*}={128,−60,+30}である。1106と1107の領域間で小さな信号値差しかない例を示している。更に、1103の1108で示す領域の信号値は{L*,a*,b*}={128,−50,+30}である。1109で示す領域の信号値は{L*,a*,b*}={128,−52,+30}である。1108と1109の領域間ではほぼ信号値差がない例を示している。例えば、エッジ検出部(302)を本構成ではなく、単純に隣り合う画素との信号値比較を元に行うエッジ検出や、フィルタ処理によって行うエッジ検出を行った場合には以下の問題がある。即ち、闘値によっては1101では1104と1105との境界で輪郭エッジが取得できるが、1102の1106と1107との境界で輪郭エッジが取得できない。また、1102の1106と1107との境界で輪郭エッジを取得できる閾値にした場合には1103の1108と1109との境界の輪郭エッジが取得されてしまう。その結果、スキャナの読み取りバラつきやJpegノイズなどの小さなノイズもエッジとして検出されてしまう。
以上の課題を解決する構成が図11であり、分散値検出部1001は、文字切り矩形単位で切り出された入力画像の信号値での分散値を演算する演算部である。算出方法は、例えば以下の式で算出する。
ここで、切り出された入力画像の画素数をn、各画素の信号値(本実施例では、L*、a*、b*のそれぞれの値)をXi(i=1,2,… ,n)、領域内の画素数の信号値の平均をXaveで示す。尚、本実施例ではL*、a*、b*のそれぞれの値での分散値を示すが、限定するものではなく、例えば、a*、b*信号値での共分散値であってもよい。図12に示した1101、1102、1103の例では、1101は信号値差が大きくいことから分散値も大きくなり、1102と1103は信号値差が小さいことから分散値も比較的小さくなる。
これ以降の説明で用いる用語の定義として、「エッジが取得されやすい閾値」とは隣り合う画素間の信号値差を比較し、差がある場合にエッジと判定する処理では信号値差が小さくてもエッジと判定するものである。逆に、「エッジが取得されにくい閾値」は、信号値差が大きくなければエッジと判定されず、信号値差が少ない場合にはエッジと判定されないものをいう。
エッジ判定閾値算出部1002は、分散値検出部1001によって算出された分散値を元にエッジ抽出を行うための閾値の算出を行う。例えば、1101に示すように分散値が大きい画像に対してはエッジが取得されにくい閾値を割り当てる。一方で、1102と1103に対しては、エッジが取得されやすい閾値を割り当てる。
エッジ抽出部1003は、エッジ判定閾値算出部1002により決定した閾値を元に、エッジ抽出処理を行う処理部である。処理の方法は、汎用的な処理でよく、たとえば近接する画素の信号値差の比較を行い、その差が特定の閾値を越えるか否かで判定するものや、一次微分を算出するフィルタによりエッジ量を求め、特定の閾値を越えるか否かで判定する方法などが挙げられる。
エッジ判定閾値算出部1002によって算出した条件で切り分ける場合、1101はエッジが取得されにくい閾値を割り当ててエッジ抽出を行う。ここでは例えば、分散値を元に決定した閾値が5となった場合の例を示す。その閾値で判定した場合、1104と1105の領域間の信号値差は大きいため、正確に1104と1105の領域間にあるエッジを抽出できる。この結果を1110に示す。一方、1102の場合には、1106と1107の信号値差は小さいものの、エッジが取得されやすい閾値を割り当てる事で、1106と1107の領域間にあるエッジを抽出できる。この結果を1111に示す。1103の場合にはエッジが取得されやすい閾値を割り当てているが、1108と1109の間の信号値差が、1106と1107の信号値差に比べ非常に小さい。そのため、エッジが取得されやすい閾値であったとしても、1108と1109の領域間にあるエッジを抽出する事はない。この結果を1112に示す。
次に、図13のフローチャートを用いて、図11のエッジ検出部(302)の説明を行う。説明を行う上で、図11を適宜参照する。
まず、ステップ1201にて、分散値算出部(1001)は、入力画像(501)に対して信号の分散値を算出する。この際、その画像が持つチャンネル数が3の場合には3つとも求めてもよいし、1チャンネル化して1つでも良い。
次に、ステップ1202にて、エッジ閾値算出部(1002)は、ステップ1201で算出した画像の信号の分散値が所定の値を越えているか否かを判定する。もし、所定の閾値以上の場合には、1203において「エッジが取得されやすい閾値」を取得する。逆に、所定の閾値未満の場合には、1204において「エッジが取得されにくい値」を取得する。
最後に、ステップ1205にて、エッジ抽出部(1003)は、1203又は1204で決定した閾値を元にエッジ抽出処理を行う。
以上のように、本実施例では、エッジ抽出を行う場合に、文字切り矩形単位で切り出された入力画像毎に、画像の分散値を元に閾値を適応的に切り替える構成としている。そうすることにより、より高精度に「背景から分離困難な文字画像」と「背景から分離容易な文字画像」を精度よく切り分ける事ができるようになる。
(実施例5)
実施例4では、エッジの抽出を行う際の閾値算出において、信号値の分散値を元に閾値を切り替える手法を説明した。入力画像が3チャンネル等を持つカラー画像の場合には、チャンネル数に応じた数だけの分散値を算出ができ、精度よく閾値の決定に用いる事ができる。しかしながら、入力画像がグレースケールの場合には、チャンネル数が1つのため、閾値算出に用いる事ができる分散値が1つになってしまい、高精度に閾値を算出する事が難しい。
そこで、本実施例では図14に示すようにエッジ検出部(302)の構成を、分散値検出部1001、エッジ判定閾値算出部1002、エッジ抽出部1003に加え、黒画素密度算出部1004から構成される。また、入力画像に加え、2値化画像として使用する。
黒画素密度算出部1004は、入力される2値化画像を元に、文字切り矩形の面積に対する黒画素数の比率を算出する演算部である。入力されてくる2値化画像内で、黒画素数をカウントし、そのカウント数を文字切り矩形の面積で除算を行う。
次に、エッジ閾値算出部1002において、黒画素密度算出部1004で算出した黒画素密度を元に、最適な閾値を算出する。ここでも実施例1の分散値に応じてエッジの閾値を切り替えたのと同様に黒画素密度に応じてエッジの閾値を算出する。具体的には、黒画素密度が高い場合には「エッジが取得されやすい閾値」とし、黒画素密度が低い場合には「エッジが取得されにくい閾値」に設定する。このように設定する事で、「濃い濃度の背景を有する文字」の場合には黒画素密度が高く、「エッジが取得されやすい閾値」によりエッジ抽出が行え、正確にエッジの算出を行う事が可能となる。
尚、分散値を元に算出した閾値と、黒画素密度を元に算出した閾値のいずれか一つを使う事も可能であるが、両方とも使用して閾値算出に用いることも可能である。その際には、エッジをより多く取得する観点で「エッジが取得されやすい閾値」の方を使用する事が望ましいが、「エッジが取得されにくい閾値」を選ぶことも可能である。また、それぞれの閾値の重みを切り替える事で、例えば分散値を元に算出した閾値を優先させることなども可能である。
また、図15に示す通りエッジ検出部(302)の構成を、分散値検出部1001、エッジ判定閾値算出部1002、エッジ抽出部1003、黒画素密度算出部1004に加え、閉ループ数算出部1005から構成しても良い。
閉ループ数算出部1005は、入力される2値化画像に対し白の部分の連続した画素により閉ループができている数を算出するラベリングの処理を行う演算部である。
次に、エッジ閾値算出部1002において、閉ループ数算出部1005で算出した閉ループ数を元に、最適な閾値を算出する。ここでも実施例1同様に、閉ループ数の多少によりエッジ抽出に用いる閾値を算出する。具体的には、閉ループ数が多い場合には「エッジが取得されにくい閾値」を使用し、逆に閉ループ数が少ない場合には「エッジが取得されやすい閾値」を使用する。
以上の処理により、グレースケールのようなチャンネル数が少なく信号値の分散を元にエッジの閾値を算出できない画像に対しても、最適なエッジ閾値の算出を行う事が可能となる。
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。