1.11 圧縮と解凍

GeoRasterには、GeoRasterオブジェクトに必要な記憶領域を縮小するために、JPEG (JPEG-F)、JPEG 2000およびDEFLATEの3つのネイティブの圧縮タイプがあります。

  • JPEG(JPEG-F)およびDEFLATE圧縮を使用する場合、GeoRasterオブジェクトのそれぞれのブロックは明確なラスター表現として個別に圧縮されます。圧縮されたGeoRasterオブジェクトを解凍すると、各ブロックは個別に解凍されます

  • JPEG 2000圧縮を使用する場合、各GeoRasterオブジェクトはJP2ファイルとしてラスターを内部的にブロック化できる単一のBLOBに格納されます。

JPEG(JPEG-F)およびDEFLATE圧縮の場合、解凍された(圧縮されていない)GeoRasterオブジェクトで実行できるすべてのGeoRaster操作は、圧縮されたGeoRasterオブジェクトでも実行できます。GeoRasterでなんらかの操作が行われる場合、ソースGeoRasterオブジェクトが圧縮されていれば、必要に応じてそのソース・オブジェクトのブロックが内部的に解凍されてから、指定された操作が実行され、次に、その操作によって得られたオブジェクトがcompressionキーワードで指定された形式で圧縮されるか、または、compressionキーワードが指定されていない場合は、ソース・オブジェクトの圧縮形式で圧縮されます。このため、特定の操作では、その実行前に圧縮されているGeoRasterオブジェクトを解凍する必要はありませんが、実行前にオブジェクトを解凍しておくと、全体のパフォーマンスが向上する操作もあります。

JPEG 2000圧縮の場合、ほとんどのGeoRaster操作は、操作の実行中にJP2圧縮したGeoRasterオブジェクトを内部的に解凍できます。

データベース・ユーザーがGeoRasterオブジェクトを圧縮または解凍する前には、データベースがデフォルトの一時表領域で作成されていること、あるいはユーザーが一時表領域または表領域グループに割り当てられていることを確認してください。これ以外の場合、デフォルトでは、一時表領域としてSYSTEM表領域が使用され、GeoRasterの操作で生成された大容量の一時LOBデータがSYSTEM表領域に格納されるため、データベース全体のパフォーマンスに影響を与える可能性があります。一時表領域の管理については、『Oracle Database管理者ガイド』を参照してください。

GeoRasterオブジェクトの圧縮または解凍を指定するには、storageParamパラメータのcompressionキーワードを使用します(「記憶域パラメータ」を参照)。すべてのGeoRasterプロシージャとともにstorageParamパラメータのcompressionキーワードを使用できます。(JPEG(JPEG-F)およびDEFLATE圧縮の場合、GeoRasterオブジェクトを圧縮および解凍するための個別のプロシージャはありません。)

ソースGeoRasterオブジェクトが空白の場合は、SDO_GEOR.getRasterSubsetファンクションおよびSDO_GEOR.getRasterDataファンクションを除き、compressionキーワードは無視されます。つまり、空白のGeoRasterオブジェクトが圧縮されることはなく、メタデータの圧縮タイプは常にNONEになります。(空白のGeoRasterオブジェクトの詳細は、「空白のGeoRasterオブジェクトと空のGeoRasterオブジェクト」を参照してください)。

この項の内容は、次のとおりです。

1.11.1 GeoRasterオブジェクトのJPEG(JPEG-F)圧縮

JPEG(JPEG-F)圧縮がサポートされているのは、cellDepth値が8BIT_Uで、ブロック当たりのバンド数が3以下(ただし、各ブロックでのバンド数が1または3であること)のGeoRasterオブジェクトのみです。(ブロック当たりのバンド数が2は、JPEG圧縮ではサポートされません。)バンド数が3より大きいGeoRasterオブジェクトの場合は、GeoRasterオブジェクトを1つまたは3つのバンドのバンド・ブロック・サイズで再ブロック化するとJPEG圧縮できます。JPEG圧縮は、カラーマップを含むGeoRasterオブジェクトではサポートされていません。

JPEG圧縮は、あらゆるサイズのGeoRasterオブジェクトに対してサポートされていますが、GeoRasterオブジェクトの各ブロックの合計サイズ(columnsPerBlock * rowsPerBlock * bandsPerBlock * cellDepth / 8)は、50MB以下である必要があります。容量の大きいGeoRasterオブジェクトに対しては、SDO_GEOR.changeFormatCopyプロシージャをコールし、50MB未満のブロックになるようにGeoRasterオブジェクトをブロック化してからGeoRasterオブジェクトを圧縮するか、またはSDO_GEOR.changeFormatCopyプロシージャへの同じコールの中で、ブロック化および圧縮を実行できます。

GeoRasterでは、フルフォーマット基準のJPEG形式でオブジェクトを圧縮するJPEG-F圧縮モードがサポートされます。

JPEG-F圧縮については、CCITT Rec.T.81 JPEG Specification(またはICO/IEC IS 10918-1)を参照してください。GeoRasterは、CCITT Rec.T.81 JPEG Specificationの表K.2の量子化表と、(ハフマン表として)この仕様の表K.4およびK.6の標準クロミナンス表を使用します。量子化表は、圧縮プロセスでこの表がデータに適用される前に、圧縮品質によってスケール変更されます。

JPEG-Fは、不可逆圧縮形式です。storageParamパラメータにqualityキーワードを指定して、劣化の程度を制御できます。qualityキーワードには、0から100の整数値を指定できます。値に0 (ゼロ)を指定すると圧縮率は最高になりますが、データの消失が大きくなります。値に75 (GeoRasterのデフォルト)を指定すると、高圧縮率ではありますが、ほとんどの人が品質には劣化がないと感じる程度の画像になります。値に100を指定すると、圧縮率は最低になりますが品質は最高になります。

1.11.1.1 非推奨となったJPEG-Bサポート

簡易基準のJPEG形式でオブジェクトを圧縮するJPEG-B圧縮に対するGeoRasterのサポートは、非推奨となったため、将来のリリースではサポートされません。JPEG-BがGeoRasterサブプログラムのパラメータに指定されている場合、かわりにJPEG-F圧縮が使用されます。JPEG-Fサポートを使用することをお薦めします。

1.11.2 GeoRasterオブジェクトのJPEG 2000圧縮

GeoRasterは、標準ISO/IEC 15444-1に準拠するセル深度8BIT_Uおよび16BIT_Uのラスター・イメージのJPEG 2000(JP2)圧縮をサポートします。JPEG 2000圧縮したGeoRasterオブジェクトは、1つのラスター・ブロックに格納されます。標準ISO/IEC 15444-1 Annex Iに示されているように、このラスター・ブロックのデータはJP2ファイル形式です。JPEG 2000圧縮されたGeoRasterオブジェクトに含まれるイメージを内部的にタイル化できます。

JPEG 2000圧縮を使用する場合、ピラミッドがJP2圧縮したデータに暗黙的に埋め込まれるため、JP2圧縮したGeoRasterオブジェクトに個別の明示的なピラミッド記憶域はありません。JP2圧縮したGeoRasterオブジェクトから取得できるピラミッドの最大レベルは、log2(min(tile_width, tile_height))です。tile_widthおよびtile_heightは、それぞれ内部的なタイルの幅および高さです。不可逆圧縮と可逆圧縮の両方がサポートされます。

SDO_GEOR.compressJP2プロシージャを使用して、GeoRasterオブジェクトをJP2圧縮したGeoRasterオブジェクトに圧縮します。SDO_GEOR.decompressJP2プロシージャを使用して、JP2圧縮したGeoRasterオブジェクトを別のGeoRasterオブジェクトに明示的に解凍できます。幾何補正、モザイク処理、ラスター代数などの他のGeoRaster操作(SDO_GEOR.changeCellValueSDO_GEOR.reprojectSDO_GEOR.scaleScopyおよびSDO_GEOR.mosaicを除く)は、操作の実行中にJP2圧縮したGeoRasterオブジェクトを内部的に解凍できます。

大きいイメージを圧縮できますが、サイズがメモリーおよびタイルの最大数(max_mem_size / 20 * 65535)に制限されます。スケーラビリティとパフォーマンスを向上させるには、常に内部的なタイル処理を適用します。SDO_GEOR.compressJP2プロシージャのtileSizeキーワード(compressParamパラメータ内)を使用して、タイル・サイズを指定できます。サポートされているタイルの最大数は65535です。

1.11.3 GeoRasterオブジェクトのDEFLATE圧縮

DEFLATE圧縮は、Deflate Compressed Data Format Specification (Network Working Group RFC 1951)に従ってオブジェクトを圧縮し、圧縮したデータをZLIB形式で格納します。詳細は、ZLIB Compressed Data Format Specification (Network Working Group RFC 1950)を参照してください。ZLIBのヘッダーおよびチェックサムのフィールドは、圧縮されたGeoRasterオブジェクトに含まれます。

DEFLATE圧縮は、あらゆるサイズのGeoRasterオブジェクトに対してサポートされていますが、GeoRasterオブジェクトの各ブロックの合計サイズ(columnsPerBlock * rowsPerBlock * bandsPerBlock * cellDepth / 8)は、1GB以下である必要があります。容量の大きいGeoRasterオブジェクトに対しては、SDO_GEOR.changeFormatCopyプロシージャをコールし、1GB未満のブロックになるようにGeoRasterオブジェクトをブロック化してからGeoRasterオブジェクトを圧縮するか、またはSDO_GEOR.changeFormatCopyプロシージャへの同じコールの中で、ブロック化および圧縮を実行できます。

DEFLATE圧縮は可逆圧縮であるため、圧縮品質は適用されません。圧縮品質を指定しても無視されます。

1.11.4 GeoRasterオブジェクトの解凍

storageParamパラメータでcompression=NONEを指定すると、圧縮されたGeoRasterオブジェクトを解凍できます。JPEG-F圧縮の場合、記憶域パラメータとして圧縮品質を指定しないでください。

PL/SQL、Oracle Call Interface (OCI)などの既存のApplication Programming Interface (API)を使用すると、圧縮されたGeoRasterオブジェクトを、データベースの外(つまりクライアント側)で解凍して、GeoRasterオブジェクトのブロックに対応するBLOBオブジェクトを取得し、該当する圧縮形式の仕様に従って、圧縮されたそれぞれのブロックを個別にデコードできます。たとえば、GeoRasterオブジェクトがJPEG-Fモードで圧縮されている場合、デコーディング・プロセスでは最初にJPEGヘッダーが解析され、表およびブロック次元が取得されます。次に、ハフマンのデコーディングが適用され、イメージ・データが量子化されます。

JPEGの解凍をすべてユーザー自身で実装するのは、複雑で、細部まで気を配る必要のあるプロセスです。アプリケーションによっては、既存の実装を使用する方が適切な場合があります。Cのjpeglibなどのライブラリ、およびJavaのいくつかのイメージングAPI (Oracle J2SE、JAIなど)では、すでにJPEGの解凍を実装しており、それらを使用して、JPEGで圧縮されたGeoRasterオブジェクトに対しデコーディング・プロセスを実行することができます。DEFLATE圧縮に対しては、ZLIB CライブラリまたはJava APIを使用して、基本的に同様の方法を適用できます。

1.11.5 圧縮に使用するサード・パーティのプラグイン

GeoRasterは、サード・パーティの圧縮ソリューションのプラグイン・アーキテクチャを提供します。LizardTech社は、MrSIDおよびJPEG 2000の圧縮タイプで、ラスター・イメージをネイティブでOracle Spatial GeoRasterに圧縮して格納できるプラグインを提供しています。

LizardTechプラグインをインストールする前に、次のステップに従う必要があります。

  1. $ORACLE_HOME/md/adminディレクトリに移動します。

  2. SYS AS SYSDBAとしてデータベースに接続します。

  3. 次のSQL文を入力します。

    SQL> @prvtgrlt.plb
    

LizardTechプラグインとその関連情報の入手については、LizardTech Corporationに問い合せてください。

1.11.6 拡張LOB圧縮

Oracle Database Advanced LOB Compression (概要は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照)を使用して、GeoRasterラスター・データ表(RDT)の可逆圧縮を実現し、GeoRasterオブジェクトを圧縮することができます。表の作成時に、LOB記憶域(RDTのrasterBlock列など)に拡張LOB圧縮を指定すると、その表のすべての行のSecureFiles LOBが拡張LOB圧縮を使用して圧縮されます。圧縮はGeoRasterに対して透過的になるため、アプリケーションの変更は必要ありません。ただし、RDTラスター・ブロック上で任意のGeoRaster固有の圧縮タイプ(JPEG、DEFLATEまたはサード・パーティのプラグインなど)も使用している場合は、これらのブロック上で拡張LOB圧縮を使用しないようにする必要があります。

拡張LOB圧縮を使用するには、Oracle Database Advanced Compression Optionのライセンス(『Oracle Databaseライセンス情報』を参照)が必要です。ただし、拡張LOB圧縮を使用しないGeoRaster圧縮操作には、Oracle Database Advanced Compression Optionは必要ありません