【文献】
上倉 一人 ほか1名,ハイパースペクトル画像圧縮符号化おける局所的重み付き予測の性能評価,情報処理学会研究報告 オーディオビジュアル複合情報処理(AVM),情報処理学会,2016年 2月19日,Vol.2016-AVM-92 No.3,p.1〜4
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0013】
図1は、画像処理装置100の構成を表す構成図である。画像処理装置100は、取得部110、導出部120、出力部130、及び復元部140を備える。取得部110は、画像データとしてハイパースペクトルデータ10を取得する。ハイパースペクトルデータは、複数の波長ごとに、位置情報と波長の強度を示す強度情報とが対応付けられたデータであり、詳細は後述する。導出部120は、取得部110により取得されたハイパースペクトルデータ10から、同一の位置情報に対応する異なる波長の強度の差分を導出し、出力部130に出力する。
【0014】
出力部130は、導出部120により導出された差分を、強度情報のデータサイズ以下のデータサイズで出力する。出力部130は、差分を差分データ20として出力する。この差分データ20は、元のハイパースペクトルデータを復元可能なデータである。復元部140は、出力部130により出力された差分から、ハイパースペクトルデータを復元し、ハイパースペクトルデータ30として出力する。
【0015】
画像処理装置100は、メインフレームやワークステーションやパーソナルコンピュータなどの情報処理装置を用いて構成される。画像処理装置100は、バスで接続されたCPU(Central Processing Unit)やメモリや補助記憶装置などを備える。画像処理装置100は、プログラムを実行することによって、取得部110、導出部120、出力部130、及び復元部140を備える装置として機能する。なお、画像処理装置100の各機能の全て又は一部は、ASIC(Application Specific Integrated Circuit)やPLD(Programmable Logic Device)やFPGA(Field Programmable Gate Array)等のハードウェアを用いて実現されても良い。
【0016】
図2は、ハイパースペクトルデータのデータ構造を示す図である。本実施形態におけるハイパースペクトルデータは、波長350nmから1100nmまでの範囲を測定波長域とし、5nmの波長分解能のハイパースペクトルカメラにより得られたハイパースペクトルデータとしている。従って、波長数は151バンドである。
【0017】
ハイパースペクトルデータは、
図2に示されるように、波長ごとに1240×2000の画素値で構成される。本実施形態では、この画素値を1240×2000個の配列として処理する。画素値は、波長の強度を示す強度情報であり、本実施形態において、強度情報のデータサイズは12ビットである。従って、1つの波長に対応する画像のデータサイズは、1240×2000×12ビット(3.72Mバイト)である。波長数は151バンドであるので、全波長の画像データのデータサイズは、3.72M×151バイト(561.72Mバイト)となる。
【0018】
ハイパースペクトルデータにおける位置情報は、画素値の配列番号である。配列番号の範囲は、1〜1240×2000(2480000)である。この配列番号から、XY座標が定まる。具体的には、配列番号がnの場合、n=2000×q+r(q、rは0以上の整数でr<2000)を算出する。このとき、q、rは、一意に定まる。この算出されたq、rが座標を示す。すなわち、配列番号nは、座標(r、q)を示している。配列番号がnの画素値は、この座標(r、q)での画素値を示している。このように、配列番号は位置情報を示しているため、
図2における縦方向の画素値は、同一の位置情報に対応する異なる波長の強度を示している。例えば、配列番号3の縦方向の矢印Sに示される画素値は、同一の位置情報に対応する異なる波長の強度を示している。
【0019】
図3は、同一の位置情報に対応する異なる波長の強度の差分を示す図である。
図3に示されるように、同一の位置情報に対応する異なる波長の強度をa(0)〜a(150)とする。また、
図3に示されるbは、b(n)=a(n)−a(n+1)で定義される。すなわち、b(0)〜b(149)は、各々の波長において隣接する波長の強度の差分である。
【0020】
同一の位置情報に対応する異なる波長の強度は、近似しているか同じ値となる可能性が高い。さらに、隣接する波長の強度は、より近似しているか同じ値となる可能性が非常に高いため、差分は非常に小さくなることから、b(n)はa(n)と比較して非常に小さいデータサイズとなる。従って、本実施形態では、ハイパースペクトルデータの特徴を生かした有効な圧縮方法を実現することができる。
【0021】
なお、波長Aと波長Bとが隣接しているとは、波長Aと波長Bの間に、測定で用いられた他の波長が存在しないことである。本実施形態における波長分解能は5nmであるため、波長をλとしたとき、この波長に隣接する波長は、λ−5nm、またはλ+5nmである。
図3に示される例では、350nmと355nmは、隣接する波長であり、355nmと360nmなども隣接する波長である。
【0022】
本実施形態では、b(0)〜b(149)の中で絶対値が最も大きい値を格納可能なビット数に応じて、圧縮を行うか否かを判定する。これは、b(0)〜b(149)の中で絶対値が最も大きい値を格納可能なビット数に、符号を示す1ビットを加えたビット数にb(0)〜b(149)の各々を格納するためである。例えば、b(0)〜b(149)の中で絶対値が最も大きい値が10000000000(11ビット、2進数表示)以上の場合、これに符号ビットを加えると、12ビットまたは13ビットとなり、元のデータのデータサイズ以上のデータサイズとなるためである。このように、差分をとってもデータサイズが小さくならない場合があることから、差分データ20には、圧縮を行った場合の圧縮データと、圧縮を行わない場合の非圧縮データ、すなわちa(0)〜a(150)そのものの2つのデータが混在することがある。本実施形態では、非圧縮データも便宜上差分データと表現する。
【0023】
図4は、a(0)〜a(150)を圧縮した圧縮データを示す図である。圧縮データは、圧縮したか否かを示す圧縮フラグ、a(0)、ビット数N、b(0)〜b(149)で構成される。
図4における圧縮フラグは、圧縮を行ったか否かを示すフラグであり、圧縮を行った場合は1となり、圧縮を行っていない場合は0となる。
図4の場合は、圧縮を行っているので1となる。ビット数Nは、4ビット割り当てられており、b(0)〜b(149)が格納されるビット数を示す。上述したように、b(0)〜b(149)の中で絶対値が最も大きい値を格納可能なビット数に符号を示す1ビットを加えたビット数がNである。
【0024】
図5は、圧縮を行わなかった場合の非圧縮データを示す図である。非圧縮データは、上述した圧縮フラグ、及びa(0)〜a(150)で構成される。すなわち、a(0)〜a(150)の先頭1ビットに圧縮フラグ加えたデータである。
図5における圧縮フラグは、圧縮を行っていないので0となる。以上説明した圧縮データまたは非圧縮データが、差分データとして配列番号順に1240×2000個作成される。以上説明した
図4、
図5に示されるように、差分は、強度情報のデータサイズ以下のデータサイズで出力される。
【0025】
図6は、圧縮例及び復元例を示す図である。
図6では、簡単のため、波長A〜Bの4つの波長の例を示している。まず、波長Aの強度と波長Bの強度の差分は「3」である。波長Bの強度と波長Cの強度の差分は「−2」である。波長Cの強度と波長Dの強度の差分は「1」である。従って、絶対値が最も大きいものは「3」であり、「3」を格納可能なビット数は2であり、これに符号を示す1ビットを加えたビット数は3となる。従って、ビット数Nは「3」となる。なお、差分「−2」の「110」は、「2」(=「010」)の「2の補数」(=101+1=110)である。
【0026】
以上より、圧縮後のデータサイズは、
図6に示されるように、1(圧縮フラグ)+12(a(0))+4(ビット数N)+3(bのサイズ)×3(波長数)=26ビットとなる。もともとのデータサイズは、12×4=48ビットであるので、圧縮率は約54%となり、非常に高圧縮であることが分かる。
【0027】
次に、復元について説明する。上述したように、b(n)=a(n)−a(n+1)であるので、a(n+1)=a(n)−b(n)である。圧縮データには、a(0)とb(n)とが示されているため、上記漸化式により、a(1)〜a(150)が復元される。具体的に
図6の場合、波長Bについては、3218−3=3215、波長Cについては、3215−(−2)=3217、波長Dについては、3217−1=3216と復元される。このように、復元のための演算は、減算のみのため、非常に高速に復元することができる。
【0028】
図7は、圧縮処理の流れの具体例を示すフローチャートである。取得部110は、ハイパースペクトルデータを取得する(ステップS101)。取得部110は、ハイパースペクトルカメラのような外部機器から通信によってハイパースペクトルデータを取得してもよいし、画像処理装置100に備わる記憶装置からハイパースペクトルデータを取得してもよい。
【0029】
導出部120は、カウンタkを1で初期化する(ステップS102)。このカウンタkは、画素値の配列番号をカウントするカウンタであるので、1から1240×2000までカウントされる。導出部120は、カウンタjを0で初期化する(ステップS103)。このカウンタjは、波長数をカウントするカウンタであるので、0から150までカウントされる。導出部120は、変数Mを0で初期化する(ステップS104)。この変数Mは、b(j)の絶対値の最大値を保持しておくための変数である。
【0030】
導出部120は、a(j)−a(j+1)を算出することで、b(j)を導出する(ステップS105)。ここでのa(j)は、
図3に示したように、配列番号kにおける各波長の強度を示す。導出部120は、導出されたb(j)の絶対値が、Mより大きいか否かを判定する(ステップS106)。b(j)の絶対値が、M以下の場合には(ステップS106:NO)、導出部120は、ステップS109に進む。
【0031】
b(j)の絶対値が、Mより大きい場合には(ステップS106:NO)、導出部120は、b(j)の絶対値を表現するためのビット数が11以上か否かを判定する(ステップS107)。ここでの判定は、差分をとっても圧縮できないか否かの判定である。b(j)の絶対値を表現するためのビット数が11以上の場合には(ステップS107:YES)、出力部130は、
図5に示した非圧縮データを作成し(ステップS115)、非圧縮データを差分データ20として出力する(ステップS112)。
【0032】
b(j)の絶対値を表現するためのビット数が11未満の場合には(ステップS107:NO)、導出部120は、Mにb(j)の絶対値を代入し(ステップS108)、カウンタjを1だけ増分する(ステップS110)。導出部120は、カウンタjが150を超過しているか否かを判定する(ステップS110)。カウンタjが150以下の場合には(ステップS110:NO)、導出部120は、ステップS105に戻る。
【0033】
カウンタjが150を超過している場合には(ステップS110:YES)、配列番号kにおける各波長の強度の差分が全て導出されたので、出力部130は、
図4に示した圧縮データを作成し(ステップS111)、圧縮データを差分データとして出力する(ステップS112)。次いで、導出部120は、カウンタkを1だけ増分する(ステップS113)。導出部120は、カウンタkが1240×2000を超過しているか否かを判定する(ステップS114)。カウンタkが1240×2000以下の場合には(ステップS114:NO)、導出部120は、ステップS103に戻る。カウンタkが1240×2000を超過している場合には(ステップS114:YES)、導出部120は、本処理を終了する。
【0034】
図8は、復元処理の流れの具体例を示すフローチャートである。上述したように、差分データ20として、圧縮データまたは非圧縮データが1240×2000個作成されている。
【0035】
復元部140は、カウンタkを1で初期化する(ステップS201)。このカウンタkは、画素値の配列番号をカウントするカウンタであるので、1から1240×2000までカウントされる。復元部140は、k番目の差分データを取得する(ステップS202)。復元部140は、差分データの先頭ビットの圧縮フラグが1か否かを判定する(ステップS203)。
【0036】
圧縮フラグが1ではない場合には(ステップS203)、
図5に示したように、圧縮フラグより後のデータは、a(0)〜a(150)であるので、復元部140は、k番目の差分データから圧縮フラグを取り除いたデータを出力し(ステップS211)、ステップS209に進む。
【0037】
圧縮フラグが1の場合には(ステップS203)、復元部140は、カウンタjを0で初期化する(ステップS204)。このカウンタjは、波長数をカウントするカウンタであるので、0から150までカウントされる。復元部140は、a(j)−b(j)を算出することで、a(j+1)を導出する(ステップS205)。復元部140は、カウンタjを1だけ増分する(ステップS206)。復元部140は、カウンタjが150を超過しているか否かを判定する(ステップS207)。カウンタjが150以下の場合には(ステップS207:NO)、復元部140は、ステップS205に戻る。
【0038】
カウンタjが150を超過している場合には(ステップS207:YES)、配列番号kにおける各波長の強度が全て復元されたので、復元部140は、a(0)〜a(150)を出力し(ステップS208)、カウンタkを1だけ増分する(ステップS209)。復元部140は、カウンタkが1240×2000を超過しているか否かを判定する(ステップS210)。カウンタkが1240×2000以下の場合には(ステップS114:NO)、復元部140は、ステップS202に戻る。カウンタkが1240×2000を超過している場合には(ステップS210:YES)、復元部140は、本処理を終了する。
【0039】
以上説明した実施形態では、隣接した波長の強度の差分をとるための演算として、減算を用いたが、排他的論理和を用いるようにしてもよい。具体的に、「xor」を排他的論理和の演算子とし、上述したa(n)やb(n)を用いて説明すると、差分b(n)を、a(n) xor a(n+1)で導出する。これを式1とする。
b(n)=a(n) xor a(n+1)…式1
【0040】
このようにして得られたb(0)〜b(149)が差分データとなる。排他的論理和を用いた場合の圧縮データのデータ構造を
図4を用いて説明すると、
図4のデータ構造において、b(0)〜b(149)は、符号ビットが不要なる。それに伴い、ビット数Nも、符号ビット分の1ビットを考慮する必要はない。なお、排他的論理和を用いてもデータサイズが小さくならない場合は、
図5に示したデータ構造と同じデータ構造となる。
【0041】
次に、演算として排他的論理和を用いた場合の復元について説明する。復元は、排他的論理和の性質((P xor Q) xor Q)=Pを用いて、式1の両辺に対してa(n)の排他的論理和をとることで、以下の式2が得られる。
a(n) xor b(n)=a(n+1)…式2
【0042】
圧縮データには、a(0)とb(n)とが示されているため、上記式2により、a(1)〜a(150)が復元される。
【0043】
具体的に、
図6のデータを用いて排他的論理和を用いた場合の圧縮例及び復元例について説明する。まず、各波長の強度の排他的論理和は、以下の通りである。
波長Aと波長B 3218 xor 3215=29(11101 2進表示)
波長Bと波長C 3215 xor 3217=30(11110 2進表示)
波長Cと波長D 3217 xor 3216=1 (00001 2進表示)
【0044】
従って、b(0)=29、b(1)=30、b(2)=1となる。これを用いて復元する。
波長B 3218 xor 29=3215
波長C 3215 xor 30=3217
波長D 3217 xor 1=3216
このように、排他的論理和を用いた場合にも復元されることが分かる。
【0045】
上述したように、隣接する波長の強度は、より近似しているか同じ値となる可能性が非常に高い。このことは、上位ビットほど一致している可能性が高いことを意味する。一致している場合、排他的論理和は「0」となるため、上位ビットは軒並み「0」となることから、圧縮データは下位数ビットで表現可能となるので、非常に高い圧縮率が期待できる。
【0046】
本実施形態で説明した圧縮処理、復元処理は、ハイパースペクトルデータの特徴に着目することで、加減算または排他的論理和というCPUが高速に演算可能な演算で処理が可能となっただけではなく、他の圧縮アルゴリズムにみられるテーブル等を作成する必要もないため、非常に効率よく高速に処理を行うこと可能となる。
【0047】
以上説明した実施形態では、隣接した波長の強度の差分を用いているが、これに限るものではない。例えば、ある波長の強度を基準とした差分を用いてもよい。この場合、例えば、全波長の強度の平均値に一致するか最も近似している波長の強度を基準とし、その基準との差分を用いるようにしてもよい。さらに、ハイパースペクトルデータを本実施形態で示した圧縮処理で圧縮し、そのデータをさらに既存の圧縮アルゴリズムによって圧縮するようにしてもよい。
【0048】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【解決手段】複数の波長ごとに、位置情報と波長の強度を示す強度情報とが対応付けられた画像データを取得し、取得された画像データから、同一の位置情報に対応する異なる波長の強度の差分を導出し、導出された差分を、強度情報のデータサイズ以下のデータサイズで出力する。