JP2008182448A - パックビッツ符号化手段 - Google Patents
パックビッツ符号化手段 Download PDFInfo
- Publication number
- JP2008182448A JP2008182448A JP2007013918A JP2007013918A JP2008182448A JP 2008182448 A JP2008182448 A JP 2008182448A JP 2007013918 A JP2007013918 A JP 2007013918A JP 2007013918 A JP2007013918 A JP 2007013918A JP 2008182448 A JP2008182448 A JP 2008182448A
- Authority
- JP
- Japan
- Prior art keywords
- data
- value
- encoding
- input
- encoded
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Image Processing (AREA)
- Compression Of Band Width Or Redundancy In Fax (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
【課題】 符号化に時間がかかる(処理速度が遅い)という問題や、複数の上限値によって符号化した全ての符号化データを保持するためのバッファが必要となり、符号化のためのメモリ容量が増大するという問題があった。
【解決手段】 パックビッツ方式の符号化処理において、「同じ値のデータが連続して入力される数」の上限値と「異なる値が続いて入力される数」の上限値を変更して圧縮率を向上する。また上記動作を、データを二度読みをせず、バッファ容量を増やすことなく行う。
【選択図】 図1
【解決手段】 パックビッツ方式の符号化処理において、「同じ値のデータが連続して入力される数」の上限値と「異なる値が続いて入力される数」の上限値を変更して圧縮率を向上する。また上記動作を、データを二度読みをせず、バッファ容量を増やすことなく行う。
【選択図】 図1
Description
本発明はパックビッツ方式により符号化処理を行う符号化装置に関する。
従来、データの圧縮方式にはさまざまな方式が利用されているが、復号化した時に符号化前の情報を損失なく復号する方式(ロスレス)としてはパックビッツ符号化方式による符号化が知られている。
パックビッツ符号化とは、符号化を行うデータ(以下、符号化前のデータを生データと呼ぶ)をランレングス方式で圧縮する符号化方式である。以下に、8ビットの生データを符号する場合のパックビッツ符号化処理の説明を行う。
パックビッツ符号化は先ず始めに、生データを「同じ値のデータが連続して入力される部分」と「ひとつ前に入力されたデータの値と異なる値のデータが連続して入力される部分」に分割する。そしてそれぞれの部分がいくつ続いているか(「同じ値のデータが連続する部分」では同じ値が連続して入力された回数を、「ひとつ前に入力されたデータの値と異なる値のデータが連続する部分」では異なる値が入力された個数を表す)を表す「長さ情報」を付加して符号化を行う。
そして、「同じ値のデータが連続する部分」では「連続する数+データの値」という形に、また「異なるデータが連続する部分」では「異なるデータが連続する数+異なる値のデータ列」という形で表す。そしてこの処理で生成したデータ列をパックビッツ符号化データとして出力する。上記処理を行うことにより、「同じ値のデータが連続する部分」では「同じ値のデータが連続する部分」を「連続する数」と「データの値」の二つの値で表現することが出来る。
以下にパックビッツ符号化の手順の例を示す。例えば、下記(1)に示すような順番で24個の生データ列が入力されたとする。
0,0,0,0,1,2,3,4,4,4,4,4,4,4,4,5,5,6,7,8,8,9,10,10 −(1)
この場合、生データ列を
0,0,0,0,
1,2,3,
4,4,4,4,4,4,4,4,
5,5,
6,7,
8,8,
9,
10,10 −(2)
というように、「同じ値のデータが連続する部分」と、「異なる値のデータが連続する部分」とに分割する。そして、それぞれの部分に「長さ情報」を付加し、「同じ値のデータが連続する部分」に関してはデータ部分を1つだけに圧縮する。
この場合、生データ列を
0,0,0,0,
1,2,3,
4,4,4,4,4,4,4,4,
5,5,
6,7,
8,8,
9,
10,10 −(2)
というように、「同じ値のデータが連続する部分」と、「異なる値のデータが連続する部分」とに分割する。そして、それぞれの部分に「長さ情報」を付加し、「同じ値のデータが連続する部分」に関してはデータ部分を1つだけに圧縮する。
0,0,0,0, →(-4),0,
1,2,3, →(3),1,2,3,
4,4,4,4,4,4,4,4,→(-8),4,
5,5, →(-2),5,
6,7, →(2),6,7,
8,8, →(-2),8,
9, →(1),9,
10,10 →(-2),10 −(3)
ここで「長さ情報」として付加した情報は、負の数は「同じ値のデータが連続する数」を表し、正の数は「異なる値のデータの数」を表している。そして、この「長さ情報」をデータと同じく8ビットの幅を持つ「長さコードデータ」としてデータ列に埋め込んで出力する。
1,2,3, →(3),1,2,3,
4,4,4,4,4,4,4,4,→(-8),4,
5,5, →(-2),5,
6,7, →(2),6,7,
8,8, →(-2),8,
9, →(1),9,
10,10 →(-2),10 −(3)
ここで「長さ情報」として付加した情報は、負の数は「同じ値のデータが連続する数」を表し、正の数は「異なる値のデータの数」を表している。そして、この「長さ情報」をデータと同じく8ビットの幅を持つ「長さコードデータ」としてデータ列に埋め込んで出力する。
したがって、上の(1)の入力データ列に対してパックビッツ符号化を行うと、(4)に示す符号化データ列となる。
FD,00,02,01,02,03,F9,04,FF,05,01,06,07,FF,08,00,09,FF,10 −(4)
上記(4)では長さ情報及びデータ部とも16進数表示を行い、長さ情報については負の数を2の補数により表している。以下に、「長さ情報」と、生成される「長さコードデータ」の対応を示す。
上記(4)では長さ情報及びデータ部とも16進数表示を行い、長さ情報については負の数を2の補数により表している。以下に、「長さ情報」と、生成される「長さコードデータ」の対応を示す。
尚、上記表に示すようにパックビッツ符号化では「長さコードデータ」として0x80は生成しない。そのためデータ列の最後を表すエンドオブリストコードデータとして0x80を使用することもある。
また、「同じ値のデータが連続する部分」や「異なる値のデータが連続する部分」の長さが129個を越える場合は、長さが128の部分までで一度符号化処理を行い、128個を越えた部分に対しては改めて「同じ値のデータが連続する部分」又は「異なる値のデータが連続する部分」として処理を行う。以降、再び長さが128を越える場合は同様に符号化処理を繰り返す。
以降、パックビッツ符号化されたデータ列において「長さコードデータ」のことを「長さ情報」、長さ情報に続いて出力される実際のデータの部分を「データ部」と呼ぶ。
従来例としては、例えばかすれやムラをランレングス符号化したまま補正するため、補正したことによってラン長が変化した部分に対して前後するランレングス符号を相対的に修正する画像境界変更手段を備える画像調整装置がある(特許文献1参照)。
特開平5−137005号公報
上記従来の技術では、パックビッツ符号化を行う際の「同じ値のデータが連続する部分」や「異なる値のデータが連続する部分」の長さの上限がそれぞれ128で固定されていたため、データの値や並び方によっては冗長な符号化を行っていた。
また、データの値や並び方によって「同じ値のデータが連続する部分」や「異なる値のデータが連続する部分」の上限値を変更して符号化を行うことで符号化後のデータ量を削減するために、以下の2つの方法が提案されている。
1.一度データを読み込むことで最適な上限値を求めた上で、再度データを読み込んで最適な上限値を用いて符号化を行う
2.複数の上限値により符号化を行った結果をバッファに格納し、その中からデータ量が最も少ない符号化データを使用する
しかし上記1の方法ではデータを二度読み込む必要があり、符号化に時間がかかる(処理速度が遅い)という問題があった。また、上記2の方々では、複数の上限値によって符号化した全ての符号化データを保持するためのバッファが必要となり、符号化のためのメモリ容量が増大するという問題があった。
2.複数の上限値により符号化を行った結果をバッファに格納し、その中からデータ量が最も少ない符号化データを使用する
しかし上記1の方法ではデータを二度読み込む必要があり、符号化に時間がかかる(処理速度が遅い)という問題があった。また、上記2の方々では、複数の上限値によって符号化した全ての符号化データを保持するためのバッファが必要となり、符号化のためのメモリ容量が増大するという問題があった。
そこで本発明では、パックビッツ方式により符号化処理を行うパックビッツ符号化手段において、データを入力する入力手段、入力されたデータを符号化する第1の符号化手段、第1の符号化手段により符号化したデータを格納する格納手段、入力されたデータを符号化する複数の符号化手段、前記第1の符号化手段及び前記複数の符号化手段により符号化したデータのデータ量をカウントする複数のカウンタ、前期複数のカウンタのカウンタ値から所定の符号化手段を選択する選択手段、前記格納手段に格納された符号化データを前記選択手段で選択した符号化方式による符号化処理を行った符号化データに変換する再符号化処理手段、前記再符号間処理手段によって変換したデータを出力するデータ出力手段、を有するパックビッツ符号化手段により、複数のデータを同時に入力してパックビッツ符号化処理を行うことで符号化速度を上げる。
以上説明したように、本実施例のパックビッツ符合化装置では所定の上限値を用いてパック符号化を行う場合に、データを二度読みすることなく、また複数の上限値によって符号化した全ての符号化データを保持することなく符号化データを生成することが出来る。
(第一の実施例)
図1は本発明のパックビッツ符号化装置のブロック図である。図1において、101はパックビッツ符号化部であり、data_inから入力された生データ列に対してパックビッツ符号化処理を行って出力する。尚パックビッツ符号化部101における符号化処理では、長さ情報の上限値は通常通り8ビットデータの場合は128で符号化処理を行う。そのため、「同じ値のデータが連続する部分」及び「異なる値のデータが連続する部分」の上限値はそれぞれ128となる。
図1は本発明のパックビッツ符号化装置のブロック図である。図1において、101はパックビッツ符号化部であり、data_inから入力された生データ列に対してパックビッツ符号化処理を行って出力する。尚パックビッツ符号化部101における符号化処理では、長さ情報の上限値は通常通り8ビットデータの場合は128で符号化処理を行う。そのため、「同じ値のデータが連続する部分」及び「異なる値のデータが連続する部分」の上限値はそれぞれ128となる。
102、103、104は符号化データ量測定部であり、data_inから入力された生データ列に対して、所定の上限値を用いてパックビッツ符号化した場合の符号化データ量を算出する。尚、本実施例では符号化データ量測定部102では上限値を128(80h)で、103では上限値を96(60h)で、104では上限値を160(A0h)で符号化を行う。このため、符号化データ量測定部102,103,104で行われるパックビッツ符号化処理は、「同じ値のデータが連続する部分」及び「異なる値のデータが連続する部分」の上限値がそれぞれ以下の通りとなる。
符号化データ量測定部102
同じ値のデータが連続する部分の上限値:128
異なる値のデータが連続する部分の上限値:128
符号化データ量測定部102
同じ値のデータが連続する部分の上限値:160
異なる値のデータが連続する部分の上限値:96
符号化データ量測定部102
同じ値のデータが連続する部分の上限値:96
異なる値のデータが連続する部分の上限値:160
図1の実施例では符号化データ量測定部を3つ使用したが、さらに多くの符号化データ量測定部を用いて処理を行うことも可能である。
同じ値のデータが連続する部分の上限値:128
異なる値のデータが連続する部分の上限値:128
符号化データ量測定部102
同じ値のデータが連続する部分の上限値:160
異なる値のデータが連続する部分の上限値:96
符号化データ量測定部102
同じ値のデータが連続する部分の上限値:96
異なる値のデータが連続する部分の上限値:160
図1の実施例では符号化データ量測定部を3つ使用したが、さらに多くの符号化データ量測定部を用いて処理を行うことも可能である。
各符号化データ量測定部で算出した符号化データ量は、信号線border_valから上限値を出力すると共に信号線data_lengthから制御部へ出力される。
105はバッファメモリであり、パックビッツ符号化部101で符号化されたデータを格納するためのメモリである。また、制御部106からデータ出力要求があるとバッファメモリは格納した符号化データを再符号化処理部へ出力する。
106は制御部であり、各符号化データ量測定部から入力された符号化データ量を比較し、素の中から符号化データ量が最も小さくなるときの上限値を取得して再符号化処理部へ出力する。また、上限値を再符号化処理部へ出力して再符号化処理部による再符号化処理の準備が整うと、バッファメモリに対してデータ出力要求を出力する。
107は再符号化処理部であり、バッファメモリから入力されるパックビッツ符号化データを制御部から与えられた上限値を用いた符号化データに変換して出力する。
図2は符号化データ量測定部の動作を説明するフローチャートである。符号化データ量測定部では、以下の4つの変数を用いて符号化データの演算を行う。
・state
符号化データ量測定部の状態を表す変数で、データが何もない状態を表すnone、データが1つ残っている状態を表すonedata、同じ値が連続して入力されている状態を表すcontinue及び異なる値が入力されているuncontinueの4種類の状態を持つ。
・cnt
同じ値が連続して入力されている数、又は異なる値が続いて入力されている数を表す。
・length
符号化したデータ量を表す。
・border
それぞれの符号化データ量測定部における上限値を表し、「異なる値のデータが連続する部分」の上限値はborderの値、「同じ値のデータが連続する部分」の上限値は(256-border)となる。
・state
符号化データ量測定部の状態を表す変数で、データが何もない状態を表すnone、データが1つ残っている状態を表すonedata、同じ値が連続して入力されている状態を表すcontinue及び異なる値が入力されているuncontinueの4種類の状態を持つ。
・cnt
同じ値が連続して入力されている数、又は異なる値が続いて入力されている数を表す。
・length
符号化したデータ量を表す。
・border
それぞれの符号化データ量測定部における上限値を表し、「異なる値のデータが連続する部分」の上限値はborderの値、「同じ値のデータが連続する部分」の上限値は(256-border)となる。
符号化データ量測定部が動作を開始すると、始めにステップ201により初期設定を行う。初期設定ではstateはデータが何もない状態を表すnone、cnt及びlengthには0が設定される。
その後ステップ202によりデータの入力が終了したかを判定し、データの入力が終了した場合はステップ221により符号化データ量としてlengthの値を信号線data_lengthに出力して動作を終了する。データの入力が終了していない場合はステップ203でstateがnoneであるか判定を行う。
stateがnoneである場合は入力されたデータにより新たに符号化処理が行われることとなる。個の場合、入力されるデータはひとつ目であるためcntは1に、また新たに符号化処理が行われる場合は長さ情報とデータ部の2つのデータが出力されるため符号化データ量を表すlengthの値に2を加算する。また、符号化データ量測定部の状態はひとつ目のデータが入力された状態になるためstateにonedataを設定する(ステップ220)。その後、入力されたデータは符号化データ量測定部内のバッファに格納され(ステップ209)、再びステップ202においてデータの入力を待つ。
ステップ203においてstateがnoneでない場合、stateがonedataであるか判定を行う(ステップ204)。stateがonedataである場合は入力されたデータ(data)とバッファに格納されたデータ(buf)の比較を行う(ステップ217)。入力されたデータ(data)の値とバッファに格納されたデータ(buf)の値が等しい場合、符号化データ量測定部の状態は同じ値が連続して入力されているcontinueに設定され、cntの値に1を加算することにより、同じ値が入力された数を1加算する(ステップ219)。
また、ステップ217により入力されたデータ(data)の値とバッファに格納されたデータ(buf)の値が異なる場合、符号化データ量測定部の状態は異なる値が入力されているuncontinueに設定され、cntの値に1を加算することにより、異なる値が入力された数を1加算する(ステップ218)。
ステップ218及びステップ219の処理が終了すると、入力されたデータは符号化データ量測定部内のバッファに格納され(ステップ209)、再びステップ202においてデータの入力を待つ。
ステップ204においてstateがonedataでない場合、stateがcontinueであるか判定を行う(ステップ205)。stateがcontinueである場合は入力されたデータ(data)とバッファに格納されたデータ(buf)の比較を行う(ステップ212)。入力されたデータ(data)の値とバッファに格納されたデータ(buf)の値が等しい場合、cntに1を加算した値が、「同じ値が連続する数」の上限値である(256-border)と等しいかどうかを判定する(ステップ214)。cnt+1と(256-border)が等しい場合、符号化処理は一度入力されたデータまでを符号化処理し、再度データがない状態から符号化処理を開始する。そのためcntには0を、stateにはnoneを設定する(ステップ216)。
ステップ214においてcnt+1と(256-border)が等しくない場合、同じ値が入力された数を1加算するためcntの値に1を加算する(ステップ215)。
ステップ212により、入力されたデータ(data)の値とバッファに格納されたデータ(buf)の値が異なる場合、入力されたデータは符号化されるデータのひとつ目であるためcntは1に、新たに符号化処理が行われる場合は長さ情報とデータ部の2つのデータが出力されるため符号化データ量を表すlengthの値に2を加算する。また、符号化データ量測定部の状態はひとつ目のデータが入力された状態になるためstateにonedataを設定する(ステップ213)。
ステップ213、215、216の処理後、入力されたデータは符号化データ量測定部内のバッファに格納され(ステップ209)、再びステップ202においてデータの入力を待つ。
ステップ205においてstateがcontinueでない場合、stateはuncontinueとなる。
その後、処理はステップ206に進み入力されたデータ(data)とバッファに格納されたデータ(buf)の比較を行う。入力されたデータ(data)の値とバッファに格納されたデータ(buf)の値が異なる場合、cntに1を加算した値が、「異なる値が連続する数」の上限値であるborderと等しいかどうかを判定する(ステップ207)。cnt+1とborderが等しい場合、符号化処理は一度入力されたデータまでを符号化処理し、再度データがない状態から符号化処理を開始する。そのためcntには0を、stateにはnoneを設定する。また、入力されたデータは符号化処理された場合にデータ部として出力するためにlengthに1を加算する(ステップ210)。
ステップ214においてcnt+1とborderが等しくない場合、異なる値が入力された数を1加算するためcntの値に1を加算するとともに、入力されたデータが符号化処理された場合にデータ部として出力するためにlengthに1を加算する(ステップ208)。
ステップ206により、入力されたデータ(data)の値とバッファに格納されたデータ(buf)の値が等しい場合、入力されたデータは「同じ値が連続する部分」のデータの二つ目であるためcntは2に、また、新たに符号化処理が行われる場合は長さ情報とデータ部の2つのデータが出力されるが、データ部の分は既に前回のステップでlengthの値加算されているため、ここでは無さが情報の分の1を加算する。また、符号化データ量測定部の状態は同じ値のデータが入力された状態になるためstateにcontinueを設定する(ステップ211)。
ステップ208、210、211の処理後、入力されたデータは符号化データ量測定部内のバッファに格納され(ステップ209)、再びステップ202においてデータの入力を待つ。
以上説明した処理をステップ202によりデータ入力が終了するまで続けることにより、ステップ221において入力されたデータを設定した上限値borderを用いてパックビッツ符号化処理を行った際の符号化データ量がdata_lengthから出力される。
図3は再符号化処理部107のブロック図である。以下、同図のブロック図を用いて、その構成と処理内容を説明することとする。
図3において、301はデータ分割部であり、encode_data(図中の311)から入力されるパックビッツ符号化データの長さ情報とデータ部を判別し、入力された長さ情報を解析することにより、長さ情報に続いて入力されるデータ部のデータ値がいくつ連続しているのか(以下、連続個数と記す)をデータ値と同時に出力する。
本実施形態のデータ分割部301はパックビッツ符号化データを受け取るencode_dataの他にencode_dataからパックビッツ符号化データが入力されていることを表す有効信号であるdata_valid(310)及び符号化データの入力が終了したことを表す終了信号data_end(313)、及び、データ分割部が符号化データを入力可であることを通知するレディ信号data_ready(312)を用いてパックビッツ符号化データを取得する。
また、データ分割部301からの出力はdata(315)を用いてデータ値を、num(316)を用いて連続個数の出力を行う。本実施形態では、前述のdata、numのバスの他に前記data及びnumから出力されている値が有効であることを表す有効信号valid(314)、受け側がデータの受信が可能であることを表すレディ信号ready(317)及びデータの出力が終了したことを表す終了信号end(318)を用いてデータの授受を行う。
303はデータ結合部であり、データ分割部301から出力したデータ値及び連続個数、制御部106から出力した上限値border_valを参照して再符号化処理を行って新たな符号化データを生成する。
データ結合部で生成した符号化データは、v_out(333)を用いて出力される。しかしデータ結合部303から出力される符号化データは通常のパックビッツ符号化データとは異なり、先にデータ部のデータ値が、データ部に続いて長さ情報がv_outから出力される。
そのため本実施形態のデータ結合部では、v_outから出力しているデータが長さ情報であるかデータ部であるかを判別するために、長さ情報有効信号であるl_valid及びデータ部有効信号であるd_vald、データの出力が終了したことを表す終了信号v_end(334)を用いて符号化データの出力を行う。
304はデータ出力部であり、データ結合部303から取得した符号化データを、パックビッツ符号化データの順番になるように長さ情報とデータ部の並び順を入れ替えを行う。上記データ結合部303及びデータ出力部304により、パックビッツ符号化データを再構成することになる。
本実施形態では並び換えたパックビッツ符号化データを8データ分をまとめて64ビットとしてreencode_data(341)から出力すると共に、前記reencode_dataから出力したデータを格納する後段のメモリアドレスをaddress(342)から出力する。また、reencode_data及びaddressからデータ及びアドレスを出力する際には、前記データ及びアドレスが有効であることを表すように有効信号であるreencode_valdから1を出力する。
また、データ出力部からのアドレス及びデータの出力が終了すると、reencode_end(343)から1を出力することでデータの出力が終了したことを後段に知らせる。
データ分割部301の動作を手順として示すと、図4に示すフローチャートのようになる。
データ分割部301は動作を開始すると内部カウンタ(図2ではiと表記)を初期化する。具体的にはカウンタ i を0に設定し(ステップ401)、次にパックビッツ符号化データの入力が終了しているかどうかの判断を行う(ステップ402)。
データの入力終了の判断は先に説明したように「長さ情報として128(16進数表記で80h、以下数字に続く括弧内は16進数表記を表す)を入力する」という方法もあるが、本実施形態ではdata_endから「TRUE=1」を入力することによりデータの入力終了を表すこととする。
ステップ402においてデータ入力が終了していない(data_end = 0)と判断されると、データ分割部はencode_dataからデータが入力されるのを待つ。ここで、従来の技術で示した(3)及び(4)のようにパックビッツ符号化データは最初に長さ情報が入力されるため、具体的には長さ情報が入力されるのを待つことになる。
encode_dataから最初の符号化データである長さ情報(図4ではLと表す)が入力されると(ステップ403)、データ分割部では入力されたLの値を参照して長さ情報が「同じデータが連続する数」を表しているか「異なるデータが連続する数」を表しているのかを判断する。具体的には、入力された長さ情報Lを正負の符号無しデータとし、閾値「128(80h)」と比較し(ステップ404)、Lが128より大きい場合は「同じデータが連続する数」、128未満の場合は「異なるデータが連続する数」と判断する。
入力された長さ情報Lが128(80h)より大きい場合、データ分割部では長さ情報Lから同じデータの連続する数を求めて変数Nに代入する。本実施形態では同じデータが連続する数は2の補数により負の値として表現されているため、長さ情報Lから連続数の算出を行う(ステップ405)。具体的には
N=256−L+1
により連続数を求めてNに代入する。
N=256−L+1
により連続数を求めてNに代入する。
同じデータが連続する数を算出すると、データ分割部は再びencode_dataからパックビッツ符号化データが入力されるのを待つ。パックビッツ符号化データでは長さ情報が128以上の場合、次のデータは連続するデータの値が入力されるため、ここではデータ部(データ値)の入力を待つ。
encode_dataからデータ部(図4ではDと表す)が入力されると(ステップ406)、データ分割部はnum出力(316)からデータ連続数であるNを、data出力(315)からデータ値であるDを出力する(ステップ407)。
これにより、「データ値DがN個ある」という情報を後段に送り、再びステップ402によるデータ入力終了の判断に戻る。
また、入力された長さ情報Lが128(80h)未満の場合、データ分割部では長さ情報Lから異なるデータが連続する数を求めて変数N'に代入する(ステップ408)。本実施形態では異なるデータが連続する数は長さ情報に1を加えた値であるため、具体的には
N'=L+1
により異なるデータの数を求める。
N'=L+1
により異なるデータの数を求める。
異なるデータの数を算出すると、データ分割部は再びencode_dataからパックビッツ符号化データが入力されるのを待つ。パックビッツ符号化データでは長さ情報が128以下の場合、長さ情報に続いて先に算出したN'の数だけデータの値が入力される。従ってここではデータ部(データ値)の入力を待つ。
encode_dataからデータ部Dが入力されると(ステップ409)、データ分割部はnum出力(316)から1を、data出力(315)からデータ値Dを出力する(ステップ410)。これにより、「dataから出力したデータ値Dは1つである」という情報を後段に送る。
dataからデータ値Dを出力すると、データ分割部は内部カウンタ i に1を加算し(ステップ412)、N'との比較を行う(ステップ412)。カウンタ値iがN'より小さい場合は、引き続きデータ値が入力されるためステップ409に戻りencode_dataからデータ部が入力されるのを待つ。
またステップ412により比較した結果カウンタ値iとN'の値が等しい場合は、データ値がN'の個数入力されたため、カウンタiを0に初期化して(ステップ413)、ステップ402によるデータ入力終了の判断に戻る。
上記ステップ402〜413の動作を繰り返すことでパックビッツ符号化データの入力を行い、最後にステップ402においてdata_end=1が入力されてパックビッツ符号化データの入力終了が検出されると、データ分割部301はデータ出力を終了したことを表すためにend出力から1を出力して動作を終了する。
次に、実施形態におけるデータ結合部303の動作処理を図5乃至図10のフローチャートに従って説明する。
データ連結部303がその処理を開始すると、num及びdataから最初のデータ連続個数及びデータ値の入力を待つ。
データ連続個数及びデータ値が入力されると(ステップ501)、その値を初期値としてnumから入力されたデータ連続個数を内部変数cntに、dataから入力されたデータ値を内部変数data_bufに格納する(ステップ502)。
そしてcntに格納した値を参照し(ステップ503)、その値が1以外である場合はdataから入力されたデータ値が「同じデータ値が連続している」部分のデータ値であると判断し、その状態をデータ連続部で保持するために内部変数continueを1に設定する(ステップ504)。
また、cntに格納した値が1である場合は、dataから入力されたデータ値が「同じデータが連続していない」部分のデータ値であると判断し、この状態をデータ連続部で保持するために内部変数continueを0に設定する(ステップ505)。
以上により、次のデータを入力するための準備が終了する。
次にデータ結合部はデータ入力の終了を判断する(ステップ506)。本実施形態ではデータ分割部がend(318)が「1=high」にすることでデータの入力が終了したと判断し、図10の処理へと分岐する。end(318)から1が入力されていない場合には、データ分割部はnum(316)とdata(315)から次のデータ連続数及びデータ値が入力されるのを待つ。
データ連続数とデータ値が入力されると(ステップ507)、データ結合部は内部変数continueの値により分岐を行う(ステップ508)。continueの値が「同じデータが連続していない」部分を表す0である場合、さらにdataから入力されたデータ値と内部変数data_bufの値を比較する(ステップ509)。ここでdataから入力されたデータ値とdata_bufの値が異なる場合は図6の処理へ分岐する。また、dataから入力されたデータ値とdata_bufの値が等しい場合は、図7の処理へ分岐して「同じデータが連続していない部分」を終了するための処理と、新たに「同じデータが連続している部分」が始まるための処理を行う。
一方、ステップ508により内部変数continueの値が「同じデータが連続している」部分を表す1であった場合、同様にdataから入力されたデータ値と内部変数data_bufの値を比較し(ステップ510)、dataから入力されたデータ値とdata_bufの値が異なる場合は図8の処理へ分岐する。また、dataから入力されたデータ値とdata_bufの値が等しい場合は、図7へ分岐して「同じデータが連続している部分」を続けるための処理を行う。
図6はデータ結合部における、内部変数continueが0かつdataから入力されたデータ値と内部変数data_bufの値が異なる場合(図5におけるステップ509がyes)の処理を表すフローチャートである。
この場合、新たなパックビッツ符号化データを生成するためにdata_bufに格納されている値が必要であるためdata_bufに格納されている値をv_outから出力する(ステップ601)。そしてnumから入力されているデータ連続数を参照する(ステップ602)。
データ連続数が1以外であれば、それはdataから入力されている値が1つ以上連続している事を表しているため、「同じデータが連続していない」部分はここで終了する。そのため内部変数continueの値を「同じデータが連続している」部分を表す1に設定し(ステップ603)、それまで続いていた「異なるデータが連続している」部分のデータ数が格納されている内部カウンタcntから1を減ずることで「異なるデータが連続する数」を表す長さ情報を求め、その長さ情報をv_outから出力する(ステップ604)。
その後、内部変数cntを0に初期化して(ステップ605)から、numから入力されたデータ連続数をcntに加算し(ステップ606)、dataから入力されたデータ値を内部変数data_bufに格納し(ステップ607)、次のデータ受け取り準備を行った後で、図5のステップ506に戻る。
また、ステップ602においてnumから入力されたデータ連続数が1であった場合は、引き続き「同じデータが連続していない」部分であることを表している。この場合はまず内部変数cntの値を参照し、border_valであるかを判断する(ステップ608)。内部cntの値がborder_valの場合、「同じデータが連続していない部分」がborder_valで表される回続いているという情報を出力する必要が生ずる。そのためステップ604により長さ情報を算出して(この場合「異なるデータがborder_val個連続しているので」長さ情報としてborder_val-1が生成される)v_outから出力する。
その後、内部変数cntを0に初期化して(ステップ605)から、numから入力されたデータ連続数(ここでは1)をcntに加算し(ステップ606)、dataから入力されたデータ値を内部変数data_bufに格納し(ステップ607)、次のデータ受け取り準備を行った後で図5のステップ506に戻る。
ステップ608において内部変数cntの値がborder_valでない(border_valで表される値未満)である場合は、numから入力されたデータ連続数(ここでは1)をcntに加算し(ステップ606)、dataから入力されたデータ値を内部変数data_bufに格納して(ステップ607)、次のデータ受け取り準備を行った後で、図5のステップ506に戻る。
図7はデータ結合部における、内部変数continueが0かつdataから入力されたデータ値と内部変数data_bufの値が同じ場合(図5におけるステップ509でNo)の処理を表すフローチャートである。
この場合、一つ前の処理まではcontinueが0であるため「同じデータが連続しない」部分の処理を行っていたが、dataから入力されているデータ値と内部変数data_bufの値が同じであるため「同じデータが連続しない」部分は一つ前のデータで終了していたことになる。そこで内部変数continueの値を「同じデータが連続している」部分を表す1に設定し(ステップ701)、内部変数cntの値を参照する。cntの値が1でなければ、それまで続いていた「異なるデータが連続している」部分のデータ数を算出して出力する必要がある。
そのためには、現在data_bufに格納されている値は「同じデータが連続している」部分に含まれるため、実際に「同じデータが連続していない」部分のデータ数は内部カウンタcntから1を減した値となる。また、「異なるデータが連続する数」を表す長さ情報は「異なるデータが連続している」数から1を減じた値であるため、ここでは内部変数cntから2を減じて長さ情報を求め、その長さ情報をv_outから出力する(ステップ702)。
そしてdataから入力されるのデータ値と同じデータがdata_bufに入っているため内部変数cntを1に設定(ステップ703)してから、numより入力されたデータ連続数をcntに加算(ステップ704)して次のデータ受け取り準備を行い、図5におけるステップ506に戻る。
図8はデータ結合部における、内部変数continueが1かつdataから入力されたデータ値と内部変数data_bufの値が異なる場合(図5におけるステップ510がNo)の処理を表すフローチャートである。
この場合dataから入力されるデータ値をdta_bufの値が異なるため、「同じデータが連続している」部分はここで終了する。そのためdata_bufに格納されている値をv_outから出力する(ステップ801)。そしてnumから入力されているデータ連続数を参照する(ステップ802)。
データ連続数が1以外であれば、それはdataから入力されている値が1つ以上連続している事を表しているため、再び「同じデータが連続している」部分が開始される。そのため内部変数continueの値は「同じデータが連続している」部分を表す1のままにしておき、それまで続いていた「同じデータが連続している」部分のデータ数が格納されている内部カウンタcntから長さ情報を求め(256からcntの値を減じ、さらに1を加えることにより求める)、その長さ情報をv_outから出力する(ステップ803)。
その後、内部変数cntを0に初期化して(ステップ804)から、dataから新たなデータ値を取得してdata_bufに格納し(ステップ805)、さらにnumから入力されたデータ連続数をcntに加算する(ステップ806)。こうして次のデータ受け取り準備が終了すると、図5のステップS506に戻ることになる。
また、ステップ802においてnumから入力されたデータ連続数が1であった場合は「同じデータが連続していない」部分が始まる事を表している。この場合はまず内部変数continueの値を「同じデータが連続していない」部分を表す0に設定して(ステップ807)、内部変数cntの値を参照する(ステップ808)。
cntの値が1以外であれば、「同じデータが連続している」部分のデータ数が格納されている内部カウンタcntから長さ情報を求め(256からcntの値を減じ、さらに1を加えることにより求める)、その長さ情報をv_outから出力する(ステップ803)。
その後、内部変数cntを0に初期化して(ステップ804)から、dataから新たなデータ値を取得してdata_bufに格納し(ステップ805)、さらにnumから入力されたデータ連続数(ここでは1)をcntに加算する(ステップ806)。こうして次のデータ受け取り準備が終了すると、図5のステップ506に戻り、データ入力終了の判断を行うことになる。
また、ステップ808により内部変数cntの値が1であった場合は、ステップ801で出力したデータ値を「同じデータが連続しない」部分の最初のデータとして処理を行う。そのためdataから新たなデータ値を取得してdata_bufに格納し(ステップ805)、さらにnumから入力されたデータ連続数(ここでは1)をcntに加算する(ステップ806)。こうして次のデータ受け取り準備が終了すると、図5のステップS506に戻る。
図9はデータ結合部における、内部変数continueが1かつdataから入力されたデータ値と内部変数data_bufの値が同じ場合(図5におけるステップ510がyes)の処理を表すフローチャートである。
この場合dataから入力されるデータ値をdta_bufの値が同じため、「同じデータが連続している」部分はさらに続く。そのためデータが連続する数を求めるため内部変数cntにnumから入力されたデータ連続数を加算する(ステップ901)。
その結果、内部cntの値が(256-border_val+1)以上の場合、「同じデータが連続している」部分が(256-border_val)で表される値の回数分続いているという情報を出力する必要が生ずる。そのため内部変数cntの値を参照し(ステップ902)、その値が(256-border_val+1)以上である場合はdata_bufに格納されているデータ値をv_outから出力し(ステップ903)、それに続いて「同じデータが(256-border_val)個連続している」ことを表す長さ情報である(256-border_val+1)をv_outから出力する(ステップ904)。
ステップ904により長さ情報が出力されると、データ結合部は内部変数cntから後段にパックビッツ符号データとして出力した分の(256-border_val)を減じ(ステップ905)、次のデータ受け取り準備を行った後で、図5におけるステップ506に戻る。
また、ステップ902により内部変数cntが(256-border_val)以下の場合は、パックビッツ符号化に必要なデータは生成されないため、そのまま図3のステップ506に戻り、データ入力終了の判断を行うことになる。
尚、図9のフローチャートではパックビッツ符号化に必要なデータ値は既にdata_bufに格納されているのでdataから入力されたデータ値を内部変数data_bufに格納する必要は無いが、格納してもよい。
図10は図5のステップ506によりend(318)から1が入力され、データの入力が終了したと判断した場合のフローチャートを示す。
図10ではまず始めに内部変数data_bufに格納しているデータ値をv_outから出力し(ステップ1001)、その後内部変数continueの値を参照する(ステップ1002)。
continueの値が0の場合、ステップ1001で出力したデータ値は「データが連続していない」部分の最後のデータ値であるため、内部変数cntから「異なるデータが連続する」部分の長さ情報を生成して出力する。具体的には内部変数cntの値から1を減じてv_outから出力する(ステップ1003)。
そして後段にデータの出力終了を知らせるためにv_end(334)に1を出力して(ステップ1004)動作を終了する。
一方ステップ1002においてcontinueが1であった場合は、ステップ1001で出力したデータ値は「データが連続している」部分のデータ値であるため、内部変数cntから「同じデータが連続する」部分の長さ情報を生成して出力する。具体的には内部変数cntの値を用いて
256−cnt+1
の値を求め、v_outから出力する(ステップ1005)。
256−cnt+1
の値を求め、v_outから出力する(ステップ1005)。
そして後段にデータの出力終了を知らせるためにv_end(334)に1を出力して(ステップ1004)動作を終了する。
尚、本実施形態のデータ結合部303では、図5乃至図10において内部変数data_bufに格納したデータ値をv_outから出力する場合は同時にd_valid(331)から1を出力し、また内部変数cntから生成した長さ情報をv_outから出力する場合は同時にl_valid(332)から1を出力する。これによりv_out(333)から出力されるデータの有効信号、及びv_outから出力したデータがパックビッツ符号化データのデータ部であるか長さ情報であるかの区別を後段に知らせている。
また、図5乃至図10において、図8のステップ803や図9のステップ904の様に、num及びdataからデータ連続数及びデータ値の取得を行う事でv_outからデータ部および長さ情報の二つのデータを出力しなければならない場合は、v_outからの出力が終了するまでready(317)を0(すなわち、次のデータの入力要求をしない)にすることによりデータ結合部301からのデータ連続数及びデータ入力を停止させる必要がある。
Claims (2)
- パックビッツ方式により符号化処理を行うパックビッツ符号化手段において、
データを入力する入力手段、
入力されたデータを符号化する第1の符号化手段、
第1の符号化手段により符号化したデータを格納する格納手段、
入力されたデータを符号化する複数の符号化手段、
前記第1の符号化手段及び前記複数の符号化手段により符号化したデータのデータ量をカウントする複数のカウンタ、
前記複数のカウンタのカウンタ値から所定の符号化手段を選択する選択手段、
前記格納手段に格納された符号化データを前記選択手段で選択した符号化方式による符号化処理を行った符号化データに変換する再符号化処理手段、
前記再符号間処理手段によって変換したデータを出力するデータ出力手段、
を有するパックビッツ符号化手段。 - 請求項1のパックビッツ符号化手段において、
前記第一の符号化手段及び前記複数の符号化手段は、パックビッツ符号化を行うときの「同じ値が連続する数」の上限値及び「異なる値が続けて入力される数」の上限値をそれぞれ変更することができることを特徴とするパックビッツ符号化手段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007013918A JP2008182448A (ja) | 2007-01-24 | 2007-01-24 | パックビッツ符号化手段 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007013918A JP2008182448A (ja) | 2007-01-24 | 2007-01-24 | パックビッツ符号化手段 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008182448A true JP2008182448A (ja) | 2008-08-07 |
Family
ID=39726017
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007013918A Withdrawn JP2008182448A (ja) | 2007-01-24 | 2007-01-24 | パックビッツ符号化手段 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008182448A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012508522A (ja) * | 2008-11-10 | 2012-04-05 | アップル インコーポレイテッド | 整数値データのストリームを圧縮するシステム及び方法 |
-
2007
- 2007-01-24 JP JP2007013918A patent/JP2008182448A/ja not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012508522A (ja) * | 2008-11-10 | 2012-04-05 | アップル インコーポレイテッド | 整数値データのストリームを圧縮するシステム及び方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TW420908B (en) | Lossless encoding and decoding system | |
JP5602440B2 (ja) | ビットシーケンスを符号化するための方法及び装置 | |
US8908982B2 (en) | Image encoding device and image encoding method | |
JPH08162970A (ja) | 復号装置およびその方法 | |
JP2009105838A (ja) | 符号化方法及び装置、並びにプログラム | |
JP5521722B2 (ja) | 符号化装置、復号化装置、符号化・復号化システム、及び、プログラム | |
JP2005065168A (ja) | 画像圧縮装置及び画像圧縮方法 | |
US20170338834A1 (en) | Data compression apparatus, data decompression apparatus, data compression method, data decompression method, and computer readable medium | |
EP1158807B1 (en) | Data stream conversion apparatus and method, variable length coded data stream generation apparatus and method, and camera system | |
JP2008182448A (ja) | パックビッツ符号化手段 | |
JP2958742B2 (ja) | 波形データ圧縮装置、波形データ伸長装置、量子化装置および浮動小数点によるデータ作成方法 | |
US8175403B1 (en) | Iterative backward reference selection with reduced entropy for image compression | |
JP2003526986A (ja) | 算術的に符号化された情報信号の算術復号化 | |
USRE45300E1 (en) | Context-adaptive variable length coder with simultaneous storage of incoming data and generation of syntax elements | |
JP2010050697A (ja) | 画像圧縮伸張装置および画像圧縮伸張方法 | |
TWI491261B (zh) | 加速遊程長度編碼之影像編碼方法與影像編碼裝置 | |
JP5591838B2 (ja) | 画像符号化装置、及び方法 | |
JP3797458B2 (ja) | データ圧縮装置 | |
JP2009207064A (ja) | データ圧縮装置および画像読取装置 | |
KR100728918B1 (ko) | 이진영상을 고속 압축하는 방법 및 장치, 이진영상을 고속 복원하는 방법 및 장치, 이진영상을 고속 압축 및 복원하는 시스템 그리고 그 방법 | |
JP4883455B2 (ja) | 符号化装置、符号化方法および符号化プログラム | |
JP6613713B2 (ja) | データ処理システム及び圧縮デバイス | |
JP2003273746A (ja) | 可変長符号復号装置 | |
JP2956636B2 (ja) | 波形処埋装置 | |
JP2008252163A (ja) | データ圧縮装置、データ伸張装置、及び情報処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20100406 |