6 イメージ処理および仮想モザイク
この章では、GCP地理参照、再投影、幾何補正、オルソ補正、ワーピング、イメージのスケール変更、ストレッチ、フィルタリング、マスキング、セグメント化、NDVI計算、タッセルド・キャップ変換、イメージの追加、バンドのマージ、大規模な拡張イメージ・モザイク処理などの高度なイメージ処理機能について説明します。
この章では、大規模なイメージ・データベースとそれに対するオンザフライ空間問合せのコンテキスト内における仮想モザイクの概念および適用についても説明します。
この章の操作は、地理空間イメージ(特に衛星によるRAWイメージや航空写真)を処理するために最もよく使用されます。ただし、これらの操作は、GeoRasterラスター代数と同様にすべてのラスター・データ型に適用されます。
この章の内容は次のとおりです。
- 高度な地理参照
空間参照機能以外に、高度な地理参照機能を使用できます。 - イメージの再投影
イメージの再投影は、イメージをあるSRS (空間参照システム、または座標系)から別のSRSに変換するプロセスです。 - イメージの幾何補正
地上のリモート・センサーから取得されるほとんどのラスター・データは、通常、地形を原因とするひずみ、計器の視野角、および地球の不規則な形状の影響を受けます。この項で説明するイメージの幾何補正は、イメージを変換してそのひずみを低減するプロセスです。 - イメージのオルソ補正
オルソ補正は、地球の標高、地形および形状に関する情報を使用して出力幾何補正イメージの品質を向上する幾何補正変換プロセスです。Oracle GeoRasterでは、高さの平均値またはDEMを使用した単一のイメージ・オルソ補正がサポートされます。 - イメージのワーピング
イメージのワーピングでは、指定されたSDO_GEOR_SRSオブジェクトから空間参照情報を使用して、入力GeoRasterオブジェクトを出力GeoRasterオブジェクトに変換します。 - イメージのアファイン変換およびスケール変更
アファイン変換は、イメージの変換、スケーリング、回転、切断および反射のジオメトリ変換を使用するプロセスです。 - イメージのストレッチ、正規化、均等化、ヒストグラム一致および覆い焼き
イメージの色およびコントラストを拡張して視覚品質を改善できます。SDO_GEOR_IPパッケージ(イメージ処理の「IP」)は、イメージのストレッチ、イメージの正規化、イメージの均等化、ヒストグラム一致およびイメージの覆い焼きを含むイメージを拡張する一連のサブプログラムを提供します。 - イメージのフィルタ処理
イメージのフィルタ処理は、特定の目的を実現するためにイメージの畳込みフィルタを適用するプロセスです。たとえば、イメージの低域フィルタを適用すると、イメージのノイズを平滑にして減らすことができます。また、イメージの高域フィルタを適用すると、イメージの詳細を拡張したり、イメージ内部のエッジを検出することもできます。 - イメージのセグメント化
セグメント化は、単純なタイプの分類アルゴリズムで、一定のタイプのイメージをより大きい地表特徴カテゴリ(陸地、雲、水、雪など)に分類する場合に役立ちます。 - イメージのピラミッド化: パラレル生成および部分更新
イメージのピラミッド化は、大規模なイメージ・データベースの構築に最もよく使用されるプロセスの1つです。 - ビットマップのピラミッド化
ビットマップのピラミッド化では、従来のピラミッド化が適切でない特定の場合に高品質のピラミッドを作成できます。 - 植生指標計算
リモート・センシングで、正規化植生指標(NDVI)は、広く使用されている植生指標であり、植生領域を迅速に識別して植物の成長と状態を監視できます。 - タッセルド・キャップ変換
タッセルド・キャップ変換(TCT)は、リモート・センシングされたイメージを使用して物理的な地表特徴を分析する場合に役立つツールです。 - イメージのマスキング
イメージ・マスキングを実行するには、アプリケーションを使用してGeoRasterデータベースでビットマップ・マスクを問い合せ、目的となる1つ以上のビットマップ・マスクを取得して、オブジェクトの表示や他の処理を実行する目的でターゲットGeoRasterオブジェクトにマスキング操作を適用します。 - バンドのマージ
イメージ分類、時系列分析およびラスターGISモデリングでは、状況により、異なるGeoRasterオブジェクトの複数のバンドまたはレイヤーをマージして1つのGeoRasterオブジェクトにする必要があります。 - イメージの追加
2つのイメージに同じ数のバンドが含まれる場合、一方のイメージをもう一方のイメージに追加できます。 - 大規模イメージのモザイク処理
大規模な地理空間領域は、通常、多くの小さい航空写真または衛星イメージで構成されます。大規模イメージのモザイク処理では、それらの小さい地理空間イメージを貼り合せて1つの大きいイメージにし、空間領域全体のわかりやすいビューを取得します。 - 仮想モザイク
仮想モザイクでは、1つの大規模な仮想化されたモザイク・イメージとして一連のGeoRasterイメージが扱われます。 - イメージの提供
イメージおよびラスター・データのクライアントまたはアプリケーションへの提供は、GeoRaster PL/SQLおよびJava APIの多くの機能を通じてサポートされます。
6.1 高度な地理参照
空間参照機能以外に、高度な地理参照機能を使用できます。
GeoRasterでは、空間参照機能は空間参照システム(SRS)または地理参照と呼ばれます(これは地理または地理空間スキームに関連する場合としない場合があります)。地理参照は、GeoRasterの主要機能であり、地理空間イメージおよびグリッド・ラスター・データに対する空間問合せおよび操作の基盤です。SRSモデルの詳細は、「地理参照」を参照してください。
GeoRasterでは、座標系に関連付けられていない地理空間イメージ以外のイメージ、美術写真、および多次元配列がサポートされます。これらのイメージおよびラスターでは、通常は地理参照の必要はありませんが、ほとんどのGeoRaster操作(ピラミッド化、スケール変更、サブセット化、バンドのマージ、ストレッチ、代数操作など)はそれらに対して動作します。この場合、ラスターのセル空間座標(行、列およびバンド)を使用してピクセル(セル)をアドレッシングします。
地理に関連しないユーザー定義の座標系(新しいSRID)を作成することも可能で、そのSRIDをラスターのモデル座標系として使用できます。その後、そのSRIDを基準としてこれらのラスターを空間参照できます(SRSメタデータ構成要素がこれらのラスターごとに作成されます)。これを行うことで、各ラスターが空間参照され、そのユーザー定義のモデル座標系にともに配置されます。関連するすべてのラスターでこれを行った後、GeoRaster操作は、地理座標系を基準に地理参照する場合と同様にそれらのラスターで動作します。たとえば、ある芸術家が壁に描いた巨大な壁画があり、その壁の多数の高解像度写真を異なるタイルとして撮り、それらをまとめて貼り合せるとします。タイル・イメージを空間参照し、GeoRasterのモザイク処理機能を使用して貼合せを行うことができます。
新しい座標系を定義しない場合でも、セル空間にイメージをともに配置できます。つまり、イメージを同じ座標系に配置してモザイク処理できるように、SDO_GEOR.setULTCoordinateプロシージャをコールしてイメージ用に異なるULT座標を設定できます。
保持しているほとんどの地理空間イメージおよびラスター・ファイルは、通常、すでに他のソフトウェア・ツールによって地理参照されているため、それらには地理参照情報が付属している可能性があります。そのような場合、地理参照情報は、ラスターとともに直接ロードするか、後でSDO_GEOR.importFrom、SDO_GEOR.setSRS、GeoRasterローダー・ツール、GDAL、または他のサード・パーティETLツールを使用してロードできます。詳細は、「GeoRasterツール: ビューア、ローダー、エクスポータ」および「GeoRasterオブジェクトの地理参照」を参照してください。
地理空間イメージに空間参照情報が含まれない場合、GeoRasterの地上基準点(GCP)サポートを使用してイメージを地理参照できます。GCPは、リモート・センシング・システムによって自動的に、または後から手動で収集します。GCP情報のないイメージの場合、GeoRasterの視覚化ツールを使用してGeoRasterオブジェクトのGCPを収集できます。GCPについては、「地上基準点(GCP)地理参照モデル」を参照してください。
GCPを入手した後で、それらをGeoRasterメタデータに格納する場合、SDO_GEOR.getGCPGeorefModelファンクションおよびSDO_GEOR.setGCPGeorefModelプロシージャを使用してGCPベースの地理参照モードを取得および設定できます。GCPのみを取得、設定および編集するには、SDO_GEOR.getControlPoint ファンクションと、SDO_GEOR.setControlPointおよびSDO_GEOR.deleteControlPoint プロシージャを使用します。GCPは、SDO_GEOR.georeferenceをコールすると、GeoRasterメタデータにも格納できます。
ジオメトリ・モデルのみを取得および設定するには、SDO_GEOR.getGCPGeorefMethodファンクションおよびSDO_GEOR.setGCPGeorefMethodプロシージャを使用します。GeoRasterでは、チェック・ポイント(pointType
= 2)も格納できますが、それらは基準点(pointType
= 1)と同じように処理および操作されます(ただし、チェック・ポイントは、SDO_GEOR.georeferenceがGCPとともにコールされたときにSRS係数を作成するために使用されません)。
GeoRasterオブジェクトに格納されているか、格納されていない地上基準点(GCP)があり、関数フィッティング地理参照モデルを計算する場合、SDO_GEOR.georeferenceプロシージャをコールしてソリューションを検出します。関数フィッティング地理参照モデルでは、すべての係数をGeoRaster SRSに格納し、セル空間とモデル空間の間で座標変換が可能になります。GCPを使用して関数フィッティング地理参照モデルを生成するには、適切なジオメトリ・モデルを指定する必要があります。SDO_GEOR.georeferenceによってサポートされる特定のジオメトリ・モデルは、アフィン変換、二次多項式、三次多項式、DLT、二次有理およびRPCです。これらのモデルについては、「関数フィッティング地理参照モデル」を参照してください。
例6-1 GCP地理参照モデルの設定
たとえば、平面領域のランドサット・イメージがあり、それを地理参照する場合、二次多項式ジオメトリ・モデルを選択できます。この目的で、9つのGCP (この場合6つ以上のGCP)と3つのチェック・ポイントを収集済の場合、GCPを設定して、例6-1のコードを使用してGeoRasterのメタデータにそれらを格納できます。
DECLARE gr1 sdo_georaster; georefModel SDO_GEOR_GCPGEOREFTYPE; GCPs SDO_GEOR_GCP_COLLECTION; BEGIN SELECT georaster INTO gr1 from georaster_table WHERE georid=1 FOR UPDATE; GCPs := SDO_GEOR_GCP_COLLECTION( SDO_GEOR_GCP('1', '', 1, 2, sdo_number_array(25, 73), 2, sdo_number_array(237036.9, 897987.2), NULL, NULL), SDO_GEOR_GCP('2', '', 1, 2, sdo_number_array(100, 459), 2, sdo_number_array(237229.6, 897949.7), NULL, NULL), SDO_GEOR_GCP('3', '', 1, 2, sdo_number_array(362, 77), 2, sdo_number_array(237038.9, 897818.8), NULL, NULL), SDO_GEOR_GCP('4', '', 1, 2, sdo_number_array(478, 402), 2, sdo_number_array(237201.06, 897760.56), NULL, NULL), SDO_GEOR_GCP('5', '', 1, 2, sdo_number_array(167, 64), 2, sdo_number_array(237032.02, 897916.26), NULL, NULL), SDO_GEOR_GCP('6', '', 1, 2, sdo_number_array(101, 257), 2, sdo_number_array(237128.9, 897949.3), NULL, NULL), SDO_GEOR_GCP('7', '', 1, 2, sdo_number_array(235, 501), 2, sdo_number_array(237250.9, 897882.2), NULL, NULL), SDO_GEOR_GCP('8', '', 1, 2, sdo_number_array(423, 214), 2, sdo_number_array(237107.3, 897788.0), NULL, NULL), SDO_GEOR_GCP('9', '', 1, 2, sdo_number_array(127, 178), 2, sdo_number_array(237089.0, 897936.5), NULL, NULL), SDO_GEOR_GCP('10', '', 2, 2, sdo_number_array(131, 425), 2, sdo_number_array(237212.8, 897934.2), NULL, NULL), SDO_GEOR_GCP('11', '', 2, 2, sdo_number_array(299, 111), 2, sdo_number_array(237055.7, 897850.4), NULL, NULL), SDO_GEOR_GCP('12', '', 2, 2, sdo_number_array(329, 253), 2, sdo_number_array(237126.9,897835.4), NULL, NULL) ); georefModel := SDO_GEOR_GCPGEOREFTYPE('QuadraticPolynomial', GCPs.count, GCPs, NULL); -- Set and store the GCP georeference model into the GeoRaster object's metadata sdo_geor.setGCPGeorefModel(gr1, georefModel); UPDATE georaster_table SET georaster=gr1 WHERE georid=1; COMMIT; END; /
例6-2 GCPを使用した関数フィッティング・モデルの生成
例6-1のコードを使用した後、例6-2のコードを使用して関数フィッティング・モデルの係数を生成できます。
DECLARE gr1 sdo_georaster; rms sdo_number_array; BEGIN SELECT georaster INTO gr1 from georaster_table WHERE georid=1 FOR UPDATE; -- georeference the image using the GCPs stored in the image's metadata rms := sdo_geor.georeference(gr1, null, 26986, 0, 'TRUE'); UPDATE georaster_table SET georaster=gr1 WHERE georid=1; COMMIT; END; /
例6-1および例6-2のステップは、GeoRasterオブジェクトのメタデータにGCPを事前設定することなく、組み合せることができます(「SDO_GEORパッケージのリファレンス」のSDO_GEOR.georeferenceの例を参照)。例6-2のSDO_GEOR.georeferenceで戻される値の配列には、各GCPのRMS値と残差が含まれます。これらを使用して、ソリューションの精度を調査し、不適切なGCPを識別できます。精度に不満がある場合、すべてのGCPを再チェックしてそれらが正確であることを確認し、必要に応じて別のGCPを追加してから、1つ以上のスクリプトを再度実行します。
GeoRasterのGCPサポートでは、任意の非地理空間イメージおよびラスターも空間参照できます。
地理空間イメージを地理参照した後、幾何補正、再投影、モザイク処理の適用や、異なる座標系のジオメトリ・ポリゴンを使用したラスターの空間問合せおよびサブセット化などで、それらのイメージを処理できます。
親トピック: イメージ処理および仮想モザイク
6.2 イメージの再投影
イメージの再投影は、イメージをあるSRS (空間参照システム、または座標系)から別のSRSに変換するプロセスです。
再投影は、2つ以上のオブジェクトを結合する一定のGeoRaster操作では特に便利です(この場合、すべてのGeoRasterオブジェクトを同じSRSに含める必要があるため)。
GeoRasterの基本的な再投影は、SDO_GEOR.reprojectプロシージャによって実行されますが、ソースGeoRaster SRIDは、出力SRIDとは異なっている必要があります。
例6-3 イメージの再投影
例6-3では、SRID 4326のGeoRasterオブジェクトにロードされているラスター・イメージを再投影しますが、以前にSRID 23619で格納された他のイメージと同じSRIDを持つように再投影する必要があります。
DECLARE gr1 sdo_georaster; gr2 sdo_georaster; BEGIN select raster into gr1 from georaster_load_table where georid = 10; delete from georaster_table where georid = 54; insert into georaster_table values(54,'reprojected', sdo_geor.init()) returning georaster into gr2; sdo_geor.reproject(inGeoRaster => gr1, pyramidLevel => 0, cropArea => null, layerNumbers => null, resampleParam => 'resampling=BILINEAR', storageParam => null, outSRID => 32619, outGeoraster => gr2); update georaster_table set georaster = gr2 where georid = 54; commit; END;
同じ操作は、SDO_GEOR.rectifyプロシージャでも実行可能で、同様の結果が生成されます。SDO_GEOR.rectifyプロシージャでは、SDO_GEOR.reprojectより多くの機能と柔軟性が提供されます(たとえば、入力および出力のSRIDを同じにすることができ、ユーザーは出力の正確な解像度を指定できます(「イメージの幾何補正」を参照))。
GeoRasterオブジェクトにSRSが関連付けられていない場合、その地理参照と幾何補正のプロセスについては、「GeoRasterオブジェクトの地理参照」および「イメージの幾何補正」を参照してください。
パラレル再投影は、SDO_GEOR_AGGR.mosaicSubsetプロシージャでサポートされます。
親トピック: イメージ処理および仮想モザイク
6.3 イメージの幾何補正
地上のリモート・センサーから取得されるほとんどのラスター・データは、通常、地形を原因とするひずみ、計器の視野角、および地球の不規則な形状の影響を受けます。この項で説明するイメージの幾何補正は、イメージを変換してそのひずみを低減するプロセスです。
幾何補正は、SDO_GEOR.rectifyプロシージャによって実行されますが、ソースGeoRasterオブジェクトには1つ以上の関数フィッティング地理参照モデルが必要です。つまり、イメージは幾何補正する必要はありませんが、メタデータに地理参照情報を保持する必要があります(「GeoRasterオブジェクトの地理参照」を参照)。
SDO_GEOR.rectifyプロシージャでは、ソースGeoRasterオブジェクトで使用可能な情報を使用して、出力GeoRasterの空間エクステント、次元およびSRIDを自動的に確立でき、ユーザーも適切なパラメータを使用して異なる値を指定できます。
例6-4 イメージの幾何補正
例6-3では、GeoRasterにロードされてからGCPを使用して地理参照されている航空イメージを幾何補正します(項「高度な地理参照」を参照)。イメージは、出力GeoRasterオブジェクトが既存のGeoRasterオブジェクトと同じSRSおよび解像度となるように幾何補正されます。イメージは、既存のGeoRasterオブジェクトの領域に制限されます(ピクセルは既存のGeoRasterオブジェクトに完全に沿って配置される必要があります)。
DECLARE gr_src sdo_georaster; gr_ref sdo_georaster; gr_out sdo_georaster; BEGIN select raster into gr_src from georaster_load_table where georid = 15; select raster into gr_ref from georaster_table where georid = 1; delete from georaster_table where georid = 2; insert into georaster_table values(2, 'rectified', sdo_geor.init()) returning georaster into gr_out; sdo_geor.rectify(inGeoRaster => gr_src, pyramidLevel => null, elevationParam => null, dem => null, outSRID => sdo_geor.getModelSRID(gr_ref), outModelCoordLoc => null, cropArea => sdo_geor.generateSpatialExtent(gr_ref), polygonClip => null, layerNumbers => null, outResolutions => sdo_geor.getSpatialResolutions(gr_ref), resolutionUnit => 'unit=meters', referencePoint => sdo_geor.getModelCoordinate(gr_ref, 0, sdo_number_array(-0.5,-0.5)), resampleParam => null, storageParam => null, outGeoraster => gr_out); update georaster_table set georaster = gr_out where georid = 2; commit; END;
幾何補正の出力は、標高に関する情報がSDO_GEOR.rectifyプロシージャに渡されると大幅に改善される可能性があります。(標高の詳細は、「イメージのオルソ補正」を参照してください。)
パラレル幾何補正は、SDO_GEOR_AGGR.mosaicSubsetプロシージャでサポートされます。
親トピック: イメージ処理および仮想モザイク
6.4 イメージのオルソ補正
オルソ補正は、地球の標高、地形および形状に関する情報を使用して出力幾何補正イメージの品質を向上する幾何補正変換プロセスです。Oracle GeoRasterでは、高さの平均値またはDEMを使用した単一のイメージ・オルソ補正がサポートされます。
オルソ補正は、SDO_GEOR.rectifyプロシージャによって実行されますが、ソースGeoRasterには3D SRSが必要です。SDO_GEOR.rectifyプロシージャは、領域の平均の高さまたは詳細な数値標高モデル(DEM)を使用してオルソ補正を実行できます。
6.4.1 平均の高さを使用したオルソ補正
数値標高モデル(DEM)を使用したGeoRasterオブジェクトは、オルソ補正のオプションです。比較的平坦な地形では、3D SRSと高さの平均値を組み合せれば、通常、ソース・イメージのひずみを修正するために十分です。
例6-5 平均の高さを使用したオルソ補正
例6-5に、平均の高さを使用したオルソ補正を示します。この例の場合、ソース・イメージは、RPCを使用してDigitalGlobeから取得できました。DEMは使用できませんでしたが、領域の平均の標高は、1748.0mであるとわかっています。
DECLARE gr_src sdo_georaster; gr_out sdo_georaster; BEGIN select georaster into gr_src from georaster_table where georid = 1; delete from georaster_table where georid = 3; insert into georaster_table values(3, 'orthorectified without DEM', sdo_geor.init('rdt_4',3)) returning georaster into gr_out; sdo_geor.rectify(inGeoRaster => gr_src, pyramidLevel => null, elevationParam => 'average=1748.8', dem => null, outSRID => 32613, outModelCoordLoc => null, cropArea => null, polygonClip => null, layerNumbers => null, outResolutions => null, resolutionUnit => null, referencePoint => null, resampleParam => 'resampling=AVERAGE4', storageParam => null, outGeoraster => gr_out); update georaster_table set georaster = gr_out where georid = 3; commit; END;
例6-5では、dem
パラメータはNULLで、elevationParam
の平均の標高はSRSと同じ単位である必要があります。また、elevationParam
では、offset
およびscaleキーワード
は、DEMが指定されている場合にのみ関連するため、指定されていません。
親トピック: イメージのオルソ補正
6.4.2 DEMを使用したオルソ補正
数値標高モデル(DEM)・レイヤーの使用によって、幾何補正プロセスの精度が向上するため、より高品質な出力GeoRasterオブジェクトが生成されます。
DEMを使用したオルソ補正では、ソースGeoRasterに3D SRSが必要です。DEMは、すべてのターゲット出力領域を対象とし、出力と同じSRIDである必要があります。DEMの解像度は、出力GeoRasterオブジェクトの予測される解像度とほぼ同じである必要があります。
DEMを使用したオルソ補正では、elevationParam
のaverage
キーワードはオプションで、指定しない場合、プロシージャでは、ターゲット領域のDEMから抽出されたサンプル値に基づいて標高値が評価されます。
elevationParam
のoffset
およびscale
の値は、DEMからの値を変更するために使用できます。たとえば、scale
は、DEM値がソースGeoRaster SRSの単位とは異なる単位である場合の単位変換に使用でき、offset
はジオイド補正や他のオフセット設定を実行するために使用できます。ただし、これらの指定では、GeoRasterオブジェクトのDEM値に変更が適用されません。かわりの方法は、オルソ補正の前にDEMデータにスケール変更およびオフセット設定を適用して、DEM値を事前処理することです(「ラスター・データのスケール変更およびオフセット設定」を参照)。
例6-6 DEMを使用したオルソ補正
例6-6の例では、DEMを使用してオルソ補正を実行します。DEMは、出力GeoRasterの解像度に近似している解像度のすべての出力領域を対象とします。DEM値はm単位ですが、ソース・イメージSRSはフィート単位です。約-15.3mの該当領域に対するジオイド補正もあります。
DECLARE gr_src sdo_georaster; gr_dem sdo_georaster; gr_out sdo_georaster; BEGIN select georaster into gr_src from georaster_table where georid = 1; select georaster into gr_dem from georaster_table where georid = 5; delete from georaster_table where georid = 6; insert into georaster_table values(5, 'orthorectified with DEM', sdo_geor.init('rdt_4',6)) returning georaster into gr_out; sdo_geor.rectify(inGeoRaster => gr_src, pyramidLevel => null, elevationParam => 'average=1748.8 offset=-15.3', dem => gr_dem, outSRID => 32613, outModelCoordLoc => null, cropArea => null, polygonClip => null, layerNumbers => null, outResolutions => null, resolutionUnit => null, referencePoint => null, resampleParam => 'resampling=BILINEAR', storageParam => null, outGeoraster => gr_out); update georaster_table set georaster = gr_out where georid = 6; commit; END;
例6-7 クロッピング済のDEMを使用したオルソ補正
通常、DEMは、ターゲット領域よりずっと大きい領域を対象とし、解像度は出力GeoRasterオブジェクトのターゲット解像度よりも粗くなります。このDEMをそのまま使用すると、品質の低いオルソ補正になります。この一般的な問題に対するソリューションは、ターゲット領域までDEMをクロッピングし、目的の解像度になるまでそのスケールを変更することです(例6-7を参照)。この例では、SDO_GEOR.rectifyプロシージャを使用して、低解像度DEM GeoRasterオブジェクトを、SDO_GEOR.rectifyプロシージャに対する2番目のコールによって生成されるオルソ補正済GeoRasterオブジェクトと同じ解像度を持つ2番目のDEM GeoRasterオブジェクトに変換します。
DECLARE height number := 1748.8; gr_src sdo_georaster; gr_out sdo_georaster; gr_dem sdo_georaster; gr_dem2 sdo_georaster; gm_area sdo_geometry; begin select georaster into gr_src from georaster_table where georid = 1; select georaster into gr_dem from georaster_table where georid = 2; -- Calculate crop area gm_area := sdo_cs.make_2d( sdo_geor.generateSpatialExtent(gr_src,height), sdo_geor.getModelSRID(gr_dem)); -- Rectify dem ( re-project, crop area, re-escale and resample ) delete from georaster_table where georid = 4; insert into georaster_table values(4, 'rectified DEM', sdo_geor.init('rdt_4',4)) returning georaster into gr_dem2; sdo_geor.rectify(inGeoRaster => gr_dem, pyramidLevel => null, elevationParam => null, dem => null, outSRID => 32613, outModelCoordLoc => null, cropArea => gm_area, polygonClip => null, layerNumbers => null, outResolutions => sdo_number_array(0.6,0.6), resolutionUnit => null, referencePoint => null, resampleParam => 'resampling=CUBIC', storageParam => null, outGeoraster => gr_dem2); update georaster_table set georaster = gr_dem2 where georid = 4; commit; -- Orthorectification with DEM select georaster into gr_dem2 from georaster_table where georid = 4; delete from georaster_table where georid = 5; insert into georaster_table values(5, 'orthorectified', sdo_geor.init('rdt_4',5)) returning georaster into gr_out; sdo_geor.rectify(inGeoRaster => gr_src, pyramidLevel => null, elevationParam => 'average=' || height || ' offset=-15.588', dem => gr_dem2, outSRID => 32613, outModelCoordLoc => null, cropArea => gm_area, polygonClip => null, layerNumbers => null, outResolutions => sdo_number_array(0.6,0.6), resolutionUnit => null, referencePoint => null, resampleParam => 'resampling=average16', storageParam => null, outGeoraster => gr_out); update georaster_table set georaster = gr_out where georid = 5; commit; end; /
親トピック: イメージのオルソ補正
6.5 イメージのワーピング
イメージのワーピングでは、指定されたSDO_GEOR_SRSオブジェクトから空間参照情報を使用して、入力GeoRasterオブジェクトを出力GeoRasterオブジェクトに変換します。
参照SDO_GEOR_SRSオブジェクトを既存のGeoRasterオブジェクトからコピーしたり、コンストラクタを使用して作成できます。(詳細は、「SDO_GEOR_SRSオブジェクト型」を参照してください。)
ワーピングは、SDO_GEOR.warpプロシージャによって実行されますが、ソースGeoRasterオブジェクトには1つ以上の関数フィッティング地理参照モデルが必要です。つまり、イメージは幾何補正する必要はありませんが、メタデータに地理参照情報を保持する必要があります(「GeoRasterオブジェクトの地理参照」を参照)。
例6-8 イメージのワーピング
次の例では、1つのGeoRasterイメージ(gr1
)から、既存のGeoRasterオブジェクト(gr2
)から新しい(ワープした)GeoRasterオブジェクト(gr3
)に変換する参照として、SDO_GEOR_SRS情報を使用します。したがって、3番目のGeoRasterオブジェクトは2番目のオブジェクトの「コピー」(実際は変換)ですが、1番目のGeoRasterオブジェクトと同じ地理参照を反映します。
DECLARE srs sdo_geor_srs; gr1 sdo_georaster; gr2 sdo_georaster; gr3 sdo_georaster; BEGIN select georaster into gr1 from georaster_table where georid = 1; select georaster into gr2 from georaster_table where georid = 2; srs := sdo_geor.getSRS(gr1); -- get the SRS from image 1. insert into georaster_table values(3, 'Warped Object', sdo_geor.init('imagery_rdt')) returning georaster into gr3; sdo_geor.warp( inGeoRaster => gr2, pyramidLevel => null, outSRS => srs, -- apply SRS to warp transformation cropArea => null, dimensionSize => null, layerNumbers => null, elevationParam => null, resampleParam => ‘resampling=AVERAGE4’, storageParam => ‘pyramid=true’, outGeoRaster => gr3, bgValues => sdo_number_array(0,0,0), parallelParam => ‘parellel=4’ ); update georaster_table set georaster = gr3 where georid = 3; commit; END;
親トピック: イメージ処理および仮想モザイク
6.6 イメージのアファイン変換およびスケール変更
アファイン変換は、イメージの変換、スケーリング、回転、切断および反射のジオメトリ変換を使用するプロセスです。
詳細および例は、「SDO_GEOR.affineTransform」リファレンス・トピックを参照してください。
イメージのスケール変更は、イメージの行および列の次元に対応するピクセル・サイズを変更してイメージを拡大または縮小するプロセスです。イメージのスケール変更では、そのイメージのスケール変更したバージョンを作成するため、元のイメージからピクセル値をリサンプリングします。イメージのスケール変更は、次のいくつかの方法で実行できます。
-
SDO_GEOR.scaleCopyプロシージャを使用して、
scaleParam
およびscaleFactor
が入力イメージ次元または出力イメージのmaxDimSize
に適用されるように指定します。 -
SDO_GEOR.rectifyプロシージャを使用し、出力イメージの解像度を指定します。(このプロシージャをパラレルに実行できます。)
-
アファイン変換中に、SDO_GEOR.affineTransformプロシージャの
scales
パラメータを使用します。このプロシージャのscales
パラメータは、行および列に個別にスケール係数を指定できる2つの数値の配列です。(このプロシージャをパラレルに実行できます。)
例6-9 SDO_GEOR.scaleCopyを使用したイメージのスケール変更
この例では、SDO_GEOR.scaleCopyを使用してスケール変更を実行し、scaleFactor
値を2に指定します。入力イメージには、元のイメージと比較して2倍の行と2倍の列が含まれ、値はaverage16
アルゴリズムによってリサンプリングされます。イメージは、元のイメージと比較して4倍の大きさになることに注意してください。
DECLARE gr_src sdo_georaster; gr_out sdo_georaster; BEGIN select georaster into gr_src from georaster_table where georid = 7; -- Rescale delete from georaster_table where georid = 9; insert into georaster_table values(9, 're-scaled by scaleCopy', sdo_geor.init('rdt_4',9)) returning georaster into gr_out; sdo_geor.scaleCopy(inGeoRaster => null, scaleFactor => 'scaleFactor=2', resampleParam => 'resampling=AVERAGE16', storageParam => null, outGeoraster => gr_out); update georaster_table set georaster = gr_out where georid = 9; commit; END; /
例6-10 SDO_GEOR.rectifyを使用したイメージのスケール変更
この例では、SDO_GEOR.rectifyを使用してスケール変更を実行し、outResolutions
パラメータを指定します。入力イメージは、すでに幾何補正され、出力には入力と同じSRIDが含まれます。
DECLARE gr_src sdo_georaster; gr_out sdo_georaster; BEGIN select georaster into gr_src from georaster_table where georid = 7; -- Rescale delete from georaster_table where georid = 10; insert into georaster_table values(10, 're-scaled by rectify', sdo_geor.init('rdt_4',10)) returning georaster into gr_out; sdo_geor.rectify(inGeoRaster => null, pyramidLevel => null, elevationParam => null, dem => null, outSRID => null, outModelCoordLoc => null, cropArea => null, polygonClip => null, layerNumbers => null, outResolutions => sdo_number_array(1.2,1.2), resolutionUnit => null, referencePoint => null, resampleParam => 'resampling=CUBIC', storageParam => null, outGeoraster => gr_out, parallelParam => 'parallel=4'); update georaster_table set georaster = gr_out where georid = 10; commit; END; /
例6-11 SDO_GEOR.affineTransformを使用したスケール変更
この例では、SDO_GEOR.affineTransformプロシージャを使用し、scales
パラメータをイメージの行次元が2倍、列次元が2倍になるsdo_number_array(2, 2)
として指定するスケール変更を実行します。
DECLARE
gr1 sdo_georaster;
gr2 sdo_georaster;
BEGIN
select georaster into gr1 from georaster_table where georid = 1;
insert into georaster_table values(2, 'Rotated 90 left',
sdo_geor.init('rdt0',2)) returning georaster into gr2;
sdo_geor.affineTransform(inGeoRaster => gr1,
translation => null,
scales => sdo_number_array(2,2),
rotatePt => null,
rotateAngle => null,
shear => null,
reflection => null,
storageParam => null,
outGeoraster => gr2,
parallelParam => 'parallel=4');
update georaster_table set georaster = gr2 where georid = 2;
commit;
END;
親トピック: イメージ処理および仮想モザイク
6.7 イメージのストレッチ、正規化、均等化、ヒストグラム一致および覆い焼き
イメージの色およびコントラストを拡張して視覚品質を改善できます。SDO_GEOR_IPパッケージ(イメージ処理の「IP」)は、イメージのストレッチ、イメージの正規化、イメージの均等化、ヒストグラム一致およびイメージの覆い焼きを含むイメージを拡張する一連のサブプログラムを提供します。
線形ストレッチおよび区分ストレッチでは、適切な色およびコントラストを実現するために、最小および最大セル値または指定された値範囲に基づいて、すべてのセル値に対してイメージのセル値を線形にストレッチできます。イメージのストレッチを実行するには、次のプロシージャを使用できます。
-
SDO_GEOR_IP.stretchは、表示目的のためにサポートされているセル深度(1BITから64BIT_REAL)のGeoRasterオブジェクトをセル深度8BIT_Uにストレッチします。
-
SDO_GEOR_IP.piecewiseStretchは、任意のサポートされているセル深度のGeoRasterオブジェクトを8BIT_Uに制限せずに高いまたは低いセル深度にストレッチします。
イメージの正規化は、イメージのセル値の統計(平均値および標準偏差)に基づいてイメージを線形にストレッチします。イメージの正規化を実行するには、SDO_GEOR_IP.normalizeを使用します。
イメージの均等化は、ヒストグラムを均等化してイメージのコントラストを拡張します。均等化を実行するには、SDO_GEOR_IP.equalizeプロシージャを使用します。
イメージのヒストグラム一致は、指定されたヒストグラムまたは参照イメージのヒストグラムと一致するイメージをストレッチします。イメージのヒストグラム一致を実行するには、SDO_GEOR_IP.histogramMatchプロシージャを使用します。
イメージの覆い焼きは、グローバルではなくローカルでイメージのコントラストをストレッチしてイメージの色のバランスを取ります。イメージの覆い焼きを実行するには、SDO_GEOR_IP.dodgeプロシージャを使用します。
親トピック: イメージ処理および仮想モザイク
6.8 イメージのフィルタ処理
イメージのフィルタ処理は、特定の目的を実現するためにイメージの畳込みフィルタを適用するプロセスです。たとえば、イメージの低域フィルタを適用すると、イメージのノイズを平滑にして減らすことができます。また、イメージの高域フィルタを適用すると、イメージの詳細を拡張したり、イメージ内部のエッジを検出することもできます。
SDO_GEOR_IP.filterプロシージャは、低域フィルタ(LPF)、高域フィルタ(HPF)およびハイブースト・フィルタ(HBF)などの標準フィルタを提供します。イメージにカスタマイズしたフィルタも適用できます。
次の例では、エッジ検出のためにカスタマイズした3x3のラプラシアン・フィルタを提供して、イメージのフィルタ処理を実行します。
DECLARE
gr1 sdo_georaster;
gr2 sdo_georaster;
cropArea sdo_geometry;
BEGIN
INSERT INTO georaster_table (georid, georaster)
VALUES (41, sdo_geor.init('RDT_1'))
RETURNING georaster INTO gr2;
SELECT georaster INTO gr1 FROM georaster_table WHERE georid=4;
sdo_geor_ip.filter(gr1, 0, cropArea, null, ‘filtertype=CUSTOM, kernelsize=(3,3)’, sdo_number_array(0, 1, 0, 1, -4, 1, 0, 1, 0 ), null, gr2);
UPDATE georaster_table SET georaster=gr2 WHERE georid=41;
COMMIT;
END;
/
親トピック: イメージ処理および仮想モザイク
6.9 イメージのセグメント化
セグメント化は、単純なタイプの分類アルゴリズムで、一定のタイプのイメージをより大きい地表特徴カテゴリ(陸地、雲、水、雪など)に分類する場合に役立ちます。
SDO_GEOR_RA.classifyプロシージャを使用して、イメージにしきい値処理を適用できます。しきい値処理は、単一のセル値をしきい値として使用して、イメージを2つのカテゴリに分類する最も簡単なセグメント化です。結果のイメージは、2つの値のみを含み、同じプロセスで直接バイナリ・ビットマップ・マスクにキャストできます。
最初に複数のバンドに算術操作を適用し、次にその結果を複数のカテゴリに分類することで、SDO_GEOR_RA.classifyプロシージャを使用してより多くのイメージのセグメント化操作を適用することも可能です。
SDO_GEOR_RA.classifyプロシージャの使用例は、「分類操作」を参照してください。
親トピック: イメージ処理および仮想モザイク
6.10 イメージのピラミッド化: パラレル生成および部分更新
イメージのピラミッド化は、大規模なイメージ・データベースの構築に最もよく使用されるプロセスの1つです。
このトピックでは、ピラミッドのパラレル生成、ピラミッドの部分更新、バッチおよび同時処理などのいくつかの関連技術について説明します。
ピラミッドをより効率的に操作するため、ピラミッドをパラレルに生成することや、ピラミッドの部分更新を実行することができます。(この項では、読者が「ピラミッド」に説明されている概念を理解していると仮定します。)
例6-12 ピラミッドのパラレル生成
ピラミッドの生成を高速化するため、SDO_GEOR.generatePyramid
プロシージャでparallelParamパラメータを指定できます。例6-12で、並列度は4に設定されます。(ピラミッド生成のパフォーマンスが実際にどれぐらい向上するかは、Oracle Databaseで使用可能なCPUの数に応じて変化します。)
DECLARE
gr sdo_georaster;
BEGIN
SELECT georaster INTO gr
FROM georaster_table WHERE georid = 6 FOR UPDATE;
-- Generate pyramids.
sdo_geor.generatePyramid(gr, 'rLevel=5, resampling=NN', null, 'parallel=4');
-- Update the original GeoRaster object.
UPDATE georaster_table SET georaster = gr WHERE georid = 6;
COMMIT;
END;
/
ピラミッド生成のパラレル処理を有効化するには、SDO_GEOR.generatePyramidによって、暗黙的コミット操作を実行します。コール中にエラーが発生すると、GeoRasterオブジェクトは無効な状態になる可能性があります。それが発生した場合、SDO_GEOR.deletePyramidを使用して、GeoRasterオブジェクトで新しく生成された上位のピラミッド・レベルを削除します。
例6-13 ピラミッドの部分更新
SDO_GEOR.updateRasterプロシージャを使用して、ピラミッドを部分的に更新できます。例6-13では、指定した領域のターゲットGeoRasterオブジェクト(targetArea
がarea
として指定される)が、別のGeoRasterオブジェクトによって更新されます。updateUpperPyramids
パラメータはtrue
に設定されるため、ターゲットGeoRasterオブジェクトの上位のピラミッドは、指定した領域で部分的にのみ更新されます。つまり、上位のピラミッド・レベルは完全には再生成されませんが、そのtargetAreaのセルのみが再生成されるため、パフォーマンスが向上します。
DECLARE gr1 sdo_georaster; gr2 sdo_georaster; area sdo_number_array := sdo_number_array(-200,-50,201,162); BEGIN SELECT georaster INTO gr2 FROM georaster_table WHERE georid=0 FOR UPDATE; SELECT georaster INTO gr1 FROM georaster_table WHERE georid=1; SDO_GEOR.updateRaster(gr2, 0, null, area, gr1, 0, null, 'true'); UPDATE GEORASTER_TABLE SET georaster=gr2 WHERE georid=0; COMMIT; END; /
ピラミッド化プロセスを高速化および自動化する他の技術にはバッチ処理が含まれ、同時処理を使用できます。特定の領域の多くのイメージを一括してピラミッド化するには、「GeoRasterオブジェクトの問合せと検索」の例を参照してください。多くのバッチを同時に処理するため、異なるデータベース・セッションを開始できます。
親トピック: イメージ処理および仮想モザイク
6.11 ビットマップのピラミッド化
ビットマップのピラミッド化では、従来のピラミッド化が適切でない特定の場合に高品質のピラミッドを作成できます。
ほとんどのラスター・データ型で、イメージのピラミッド化(「イメージのピラミッド化: パラレル生成および部分更新」を参照)によって、高品質のピラミッドが生成されます。ただし、通常は1ビットのセル深度で格納される点、行または多角形のビットマップ・ラスターの場合、同じピラミッド化アプローチでは、高品質なピラミッドが作成されない可能性があります。これらのピラミッドでは、ゆがんだ点のパターンや破線がよく見られます。
このような問題を解決するには、SDOGEOR.generatePyramidのかわりにSDO_GEOR.generateBitmapPyramidプロシージャを使用して、ビットマップGeoRasterオブジェクトのピラミッド化を実行できます。SDO_GEOR.generateBitmapPyramidプロシージャでは、ビットマップ・ラスター(道路ラスター地図やユーティリティ・ネットワーク・ラスター地図など)での特に破線または線の欠落といったゆがんだパターンを避けることで、ピラミッドの品質が大幅に向上されます。
親トピック: イメージ処理および仮想モザイク
6.12 植生指標計算
リモート・センシングで、正規化植生指標(NDVI)は、広く使用されている植生指標であり、植生領域を迅速に識別して植物の成長と状態を監視できます。
ランドサットTMイメージを使用した標準のNDVI計算式は(TM4 - TM3) / (TM4 + TM3)です。
例6-14 植生指標計算
例6-14は、ランドサット7 ETM+イメージを取得し、並列性を使用してNDVIを計算します。結果は、浮動小数点数のデータ型の別のラスターとして格納されます。GeoRaster代数言語で、バンド番号は0から始まるため、計算式は({3}-{2})/({3}+{2})という式に変換されることに注意してください。
DECLARE geor1 SDO_GEORASTER; geor2 SDO_GEORASTER; EBGIN -- Source ETM+ image select georaster into geor1 from georaster_table where georid = 2; -- Store NDVI select georaster into geor2 from georaster_table where georid = 3 for update; sdo_geor_ra.rasterMathOp(geor1, SDO_STRING2_ARRAY('({3}-{2})/({3}+{2})'), 'celldepth=32bit_real',geor2, null, null, ‘parallel=4’); update georaster_table set georaster = geor2 where georid = 3; commit; end; /
NDVIに加え、リモート・センシングの領域には他の多くの植生指標があります。それらの多くは、GeoRasterラスター代数を使用して同様に計算できます。
親トピック: イメージ処理および仮想モザイク
6.13 タッセルド・キャップ変換
タッセルド・キャップ変換(TCT)は、リモート・センシングされたイメージを使用して物理的な地表特徴を分析する場合に役立つツールです。
これは、様々なランドサット・イメージに基づいて、元のデジタル番号(DN)または反射率データの5つのバンドを使用して、6つの新しいバンドを生成します(そのそれぞれが異なる地表特徴を表します)。結果の6つのバンドは、一般的に、(土壌の)明るさ、(植生の)緑度、(土壌およびキャノピーの)湿度、煙霧、TC5およびTC6です。これらの各要素または組合せは、作物生育の監視と分析、バイオマス研究、農業計画などの異なるアプリケーションに役立ちます。
例6-15 タッセルド・キャップ変換
例6-15では、ランドサット5 TMイメージのDNデータを入力として取得し、並行性とともにGeoRasterラスター代数を使用してTCTを実行して、結果を含む新しいイメージを作成します。
DECLARE gr1 sdo_georaster; gr2 sdo_georaster; ret varchar2(32); BEGIN select georaster into gr1 from georaster_table where georid = 2; select georaster into gr2 from georaster_table where georid = 4 for update; sdo_geor_ra.rasterMathOp( gr1, SDO_STRING2_ARRAY( '0.3561*{0}+0.3972*{1}+0.3904*{2}+0.6966*{3}+0.2286*{4}+0.1596*{6}', '(-0.3344)*{0}-0.3544*{1}-0.4556*{2}+0.6966*{3}-0.0242*{4}-0.2630*{6}', '0.2626*{0}+0.2141*{1}+0.0926*{2}+0.0656*{3}-0.7629*{4}-0.5388*{6}', '0.0805*{0}-0.0498*{1}+0.1950*{2}-0.1327*{3}+0.5752*{4}-0.7775*{6}', '(-0.7252)*{0}-0.0202*{1}+0.6683*{2}+0.0631*{3}-0.1494*{4}-0.0274*{6}', '0.4000*{0}-0.8172*{1}+0.3832*{2}+0.0602*{3}-0.1095*{4}+0.0985*{6}' ), 'celldepth=32BIT_REAL', gr2, null, null, ‘parallel=4’); update georaster_table set georaster = gr2 where georid = 4; commit; END; /
また、同じラスター代数言語を使用して、例6-15にコードを追加し、32ビットの浮動小数点数イメージを8ビットの整数イメージに変換し、結果のTCTイメージにイメージのストレッチ(「イメージのストレッチ」を参照)を適用して視覚化および分析のために新しいGeoRasterオブジェクトを生成できます。
ラスター代数アルゴリズムおよび埋込みパラレル処理の最適化された実装を使用する以外に、さらにOracleのグリッド・コンピューティング・インフラストラクチャを利用して、迅速にNDVIを計算したり、GeoRasterデータベースに格納されている数千のイメージに対してTCTを適用できます。
親トピック: イメージ処理および仮想モザイク
6.14 イメージのマスキング
イメージ・マスキングを実行するには、アプリケーションを使用してGeoRasterデータベースでビットマップ・マスクを問い合せ、目的となる1つ以上のビットマップ・マスクを取得して、オブジェクトの表示や他の処理を実行する目的でターゲットGeoRasterオブジェクトにマスキング操作を適用します。
ビットマップ・マスク(「ビットマップ・マスク」を参照)は、独立したGeoRasterオブジェクトとして格納できます(また、GeoRasterオブジェクト内のメタデータとして格納し、1つのバンドまたはGeoRasterオブジェクト全体に関連付けることもできます)。
SDO_GEOR.maskプロシージャを使用して、データベース内でマスキング操作を実行し、新しいGeoRasterオブジェクトを生成することも可能です。
親トピック: イメージ処理および仮想モザイク
6.15 バンドのマージ
イメージ分類、時系列分析およびラスターGISモデリングでは、状況により、異なるGeoRasterオブジェクトの複数のバンドまたはレイヤーをマージして1つのGeoRasterオブジェクトにする必要があります。
この操作は、GeoRasterでバンドまたはレイヤーのマージと呼ばれ、SDO_GEOR.mergeLayersプロシージャまたはSDO_GEOR_RA.rasterMathOpプロシージャを使用して実行できます。ソースGeoRasterオブジェクトの指定したバンドをターゲットGeoRasterオブジェクトに追加するか、2つのGeoRasterオブジェクトの異なるバンドを1つの新しいGeoRasterオブジェクトにマージできます。このマージや追加を反復実行することで、無制限の数のバンドを1つのGeoRasterオブジェクトにマージできます。
例6-16 バンドのマージ
例6-16に、2つの例を示します。最初の例では、8つのGeoRasterオブジェクトがあり、そのそれぞれにGeoTIFF形式の単一バンド・ランドサットETM+イメージ・ファイルからロードされたただ1つのバンドが含まれると仮定します。各GeoRasterオブジェクトのバンドの数は、そのGeoRasterオブジェクトのGEORID列の値と同じです。例では、すべてのバンドを1つのGeoRasterオブジェクトにマージして、完全なETM+シーンを作成します。
DECLARE
gr1 sdo_georaster;
BEGIN
select georaster into gr1 from georaster_table where georid = 1 for update;
for rec in (select georaster from georaster_table
where georid >= 2 and georid <= 8
order by georid)
loop
sdo_geor.mergelayers(gr1, rec.georaster);
end loop;
update georaster_table set georaster = gr1 where georid = 1;
commit;
END;
/
2番目の例では、8つのGeoRasterオブジェクトがあり、そのそれぞれに3つのバンドが含まれると仮定します。例では、各GeoRasterオブジェクトから1つのバンドを選択し、パラレルに単一の8つのバンドのGeoRasterオブジェクトにマージします。
DECLARE geor SDO_GEORASTER; geo_array SDO_GEORASTER_ARRAY; BEGIN SELECT georaster INTO geor FROM georaster_table WHERE georid = 0 for update; geo_array:=SDO_GEORASTER_ARRAY(); for rec in (select georaster from georaster_table where georid >= 1 and georid <= 8 order by georid) loop geo_array.extend(1); geo_array(geo_array.last):=rec.georaster; end loop; sdo_geor_ra.rasterMathOp(geo_array,SDO_STRING2_ARRAY('{0,0}','{1,1}','{2,2}','{3,0}','{4,1}','{5,2}','{6,0}','{7,1}',),null,geor,'false',null,'parallel=4'); UPDATE georaster_table SET georaster = geor WHERE georid = 0; COMMIT; END; /
親トピック: イメージ処理および仮想モザイク
6.16 イメージの追加
2つのイメージに同じ数のバンドが含まれる場合、一方のイメージをもう一方のイメージに追加できます。
イメージの追加は、地理空間イメージを定期的に収集し、取得したイメージを後で既存のイメージに追加して空間領域全体の大規模イメージを作成する必要がある場合に役立ちます。イメージの追加は、新しいイメージで既存のイメージを更新する場合にも役立ちます。
SDO_GEOR_AGGR.appendプロシージャは、既存のGeoRasterオブジェクトを別のGeoRasterオブジェクトで部分的に更新することで、イメージの追加を実行します。既存のGeoRasterオブジェクトにピラミッドが含まれる場合、ブロックのあるピラミッドは、新しいデータで部分的に更新されます。
例6-17では、あるイメージを別のイメージに追加します(ブロックのあるピラミッドが同時に更新されます)。appendParam
パラメータで'nodata=true'
を指定しているため、重複する領域のNODATA値は透過的であるとみなされます。
例6-17 あるイメージの別のイメージへの追加
DECLARE
gr1 sdo_georaster;
gr1 sdo_georaster;
BEGIN
select georaster into gr1 from georaster_table where georid = 1 for update;
select georaster into gr2 from georaster_table where georid = 2;
sdo_geor_aggr.append(gr1, gr2, 0, 'nodata=true');
update georaster_table set georaster = gr1 where georid= 1;
commit;
END;
/
親トピック: イメージ処理および仮想モザイク
6.17 大規模イメージのモザイク処理
大規模な地理空間領域は、通常、多くの小さい航空写真または衛星イメージで構成されます。大規模イメージのモザイク処理では、それらの小さい地理空間イメージを貼り合せて1つの大きいイメージにし、空間領域全体のわかりやすいビューを取得します。
GeoRasterには、切れ目、重複、欠落したソースGeoRasterオブジェクトに対応できる大規模モザイク処理ファンクションがあります。これによって、幾何補正されたイメージと幾何補正されないイメージの両方がサポートされます。これは、内部的再投影と幾何補正、共通ポイント・ルール、および簡易カラー・バランスに対応します。特定のピラミッド・レベルでモザイク処理することも可能です。このモザイク処理プロセスでは、仮想モザイクに対して物理モザイクとも呼ばれる1つのGeoRasterオブジェクトが生成されます(仮想モザイクの詳細は、「仮想モザイク」を参照してください)。
SDO_GEOR.mosaicプロシージャおよびSDO_GEOR_AGGR.mosaicSubsetプロシージャはイメージのモザイク処理をサポートしますが、SDO_GEOR_AGGR.mosaicSubsetの方がより多くの高度な機能とオプションを備えており、パラレル処理も実装されているため、このプロシージャの使用を強くお薦めします。SDO_GEOR_AGGR.mosaicSubsetは、ソース・イメージとして仮想モザイク(GeoRaster表のリスト、GeoRaster列のあるデータベース・ビュー、REF CURSORなど)を使用できます。
SDO_GEOR.mosaicプロシージャは、幾何補正され、同じSRIDに基づいて地理空間的に配置され、同じ解像度を持つソースGeoRasterイメージのセットをモザイク処理します。モザイクの結果は、別のGeoRasterオブジェクトです。ソース・イメージ間に重複がある場合、モザイクの結果は、重複する領域にある最後のソース・イメージの内容を含みます。このプロシージャは、事前処理されて完全に配置されたソース・イメージに対して適切に動作します。
この項の例では、ソース・イメージは、次の列を使用して定義されたソースGeoRaster表のGRTAB、GRTAB1およびGRTAB2に格納されます。
(id NUMBER PRIMARY KEY, cloud_cover NUMBER -- percentage of cloud coverage last_update TIMESTAMP -- GeoRaster object's last update time grobj SDO_GEORASTER )
これらの表で、GeoRasterオブジェクトのspatialExtent
属性に対してOracle Spatial and Graphの空間索引が作成されています。
次の例で、モザイク処理されたイメージは、「記憶域パラメータ」で定義されているGEORASTER_TABLEに格納されます。
例6-18 SDO_GEOR.mosaic (表および列名)
例6-18に、SDO_GEOR.mosaicプロシージャを示します。
DECLARE
gr sdo_georaster;
BEGIN
INSERT INTO georaster_table (georid, georaster)
VALUES (12, sdo_geor.init('rdt_1'))
RETURNING georaster INTO gr;
sdo_geor.mosaic('grtab', 'grobj', gr, 'blocking=optimalpadding blocksize=(512,512,1)');
UPDATE georaster_table SET georaster=gr WHERE id=12;
END;
/
ただし、実際のソース・イメージは、通常、異なる解像度や大規模な重複領域を持つ異なる環境下で、または異なる地理参照システムを使用して収集されます。この場合、SDO_GEOR_AGGR.mosaicSubsetプロシージャを使用して、これらのソース・イメージを1つの均一なモザイク・イメージにモザイク処理できます。SDO_GEOR.mosaicと比較して、SDO_GEOR_AGGR.mosaicSubsetプロシージャではより多くの機能とオプションが提供されます。
-
ソース・イメージは、同じ座標系(SRID)にある必要はなく、同じ地理参照情報または解像度を持ちます。
-
ソース・イメージは、ユーザーが指定したピラミッド・レベルでモザイク処理されます。
-
ソース・イメージは、ユーザーが指定したバンドでモザイク処理されます。
-
出力イメージは、入力イメージとは異なる座標系および解像度を持つことができます(
outSRID
およびoutResolutions
パラメータ)。 -
mosaicParam
パラメータを通じて重複する領域の出力を詳細に制御できます(commonPointRule
では重複する領域での出力のために使用するセル値を指定でき、NODATA
では重複する領域でのNODATA値を考慮するかどうかを指定できます)。 -
出力モザイク・イメージを指定した点に配置できます(参照点)。ソース・イメージは、
mosaicParam
に指定されたresampleTolerance
値より多くずれている場合、参照点に揃えるためにリサンプリングできます。 -
fillGap
がmosaicParam
でtrue
である場合、ソース・イメージ間に2ピクセル未満の小さい切れ目があっても、周囲のピクセル値を使用して埋めることができます。 -
制限付きのカラー・バランス(線形ストレッチおよび正規化)がサポートされます。
-
モザイク処理プロセスを高速化するためにパラレル処理がサポートされます。
例6-19 SDO_GEOR_AGGR.mosaicSubset
例6-19では、SDO_GEOR_AGGR.mosaicSubsetを使用して、2つのGeoRaster表(GRTAB1およびGRTAB2)のすべてのソース・イメージを、XおよびY次元で30mの解像度を持つSRID 4326の大規模なモザイク・イメージにモザイク処理します。
DECLARE resolutions sdo_number_array; gr sdo_georaster; BEGIN insert into georaster_table (georid, georaster) values (10, sdo_geor.init('RDT_1',10)) returning georaster into gr; resolutions := sdo_number_array(30, 30); sdo_geor_aggr.mosaicSubset('grtab1, grtab2', 'grobj, grobj', 0, 4326, null, null, null, null, null, null, resolutions, 'unit=meter', 'commonPointRule = end, nodata=true, resampleTolerance=0.2, resampling=bilinear, fillGap=true', 'blocking=optimalpadding blocksize=(512, 512, 3)', gr, null, 'parallel=4'); update georaster_table set georaster = gr where georid=10; commit; END; /
次に、例6-19について説明します。
-
幾何補正されていないソース・イメージは幾何補正され、SRID 4326ではないソース・イメージはSRID 4326に再投影されます。
-
30m以外の解像度を持つソース・イメージは、30mの解像度にスケール変更されます。
-
mosaicParam
パラメータのnodata
キーワードはtrue
に指定されているため、重複する領域のNODATA値は考慮されません。 -
mosaicParam
パラメータのresampleTolerance
キーワードは0.2に指定されているため、ソース・イメージがターゲットから0.2ピクセルより多くオフセットされる場合、ソース・イメージはリサンプリングされます。 -
リサンプリング・メソッドは、
mosaicParam
パラメータでbilinear
に指定されています。 -
並列度は、
parallelParam
パラメータで4に指定されています。
SDO_GEOR_AGGR.getMosaicSubsetをコールする前にSDO_GEOR_AGGR.validateForMosaicSubsetをコールして、ソース・イメージがモザイク処理可能であることを確認できます。
6.17.1 モザイク処理中のカラー・バランス
モザイク処理操作のソース・イメージは、イメージを取得したときの照明条件、時間または他の要素の違いのために、異なる輝度または色を持つ可能性があります。カラー・バランスは、周囲のイメージとの色の違いを最小限に抑えて、結果のモザイクをシームレスに表示します。
SDO_GEOR_AGGR.mosaicSubsetおよびSDO_GEOR_AGGR.getMosaicSubsetは、モザイク処理中の基本的なカラー・バランス・メソッドを提供します。いくつかのカラー・バランス・メソッドが提供されます。mosaicParam
パラメータのキーワードcolorbalance
で識別されます。
-
LINEARSTRETCHING
: 参照の最小および最大範囲にソース・イメージの各バンドの最小-最大ストレッチを実行します。 -
STATISTICSMATCHING
: ソース・イメージの各バンドの平均および標準偏差をストレッチして参照の平均値および標準偏差値と一致するように、イメージのストレッチを実行します。 -
HISTOGRAMMATCHING
: 結果のイメージのヒストグラムが参照のヒストグラムと一致するように、イメージのストレッチを実行します。
カラー・バランス・メソッドの参照値を指定するいくつかの方法があります。キーワードcbreference
(mosaicParam
パラメータ内)で識別されます。
-
VALUE: 参照値は、
referenceValue1
、referenceValue2
またはrefHistograms
パラメータで直接提供されます。 -
IMAGE: 参照値は、
referenceImage
パラメータで指定されるイメージから導出されます。参照イメージは、ソース・イメージと同じ数のバンドを持つ必要があります。 -
OVERLAP: 参照値は、周囲のイメージの重複した領域で周囲のイメージによって決定されます。このオプションでは、参照値を重複した領域から導出できるように、ソース・イメージに十分に大きい重複が含まれる必要があります。線形ストレッチ方法はこのオプションに適切な結果を提供しないため、重複した領域の参照は線形ストレッチ・メソッドでサポートされていないことに注意してください。
例6-20 LINEARSTRETCHINGカラー・バランス
この例では、SDO_GEOR_AGGR.mosaicSubsetプロシージャでソース・イメージのLINEARSTRETCHING
カラー・バランス・メソッドを使用する方法を示します。参照の最小値および最大値は、referenceValue1
およびreferenceValue2
パラメータで指定されます。例では、各バンドに異なる参照値が含まれています。
DECLARE
gr sdo_georaster;
resolutions sdo_number_array;
ref_min sdo_number_arrray;
ref_max sdo_number_array;
BEGIN
-- create the new GeoRaster object for mosaic
insert into georaster_table (georid, georaster)
values (10, sdo_geor.init('RDT_1',10))
returning georaster into gr;
-- set the output resolution
resolutions := sdo_number_array(30, 30);
-- Set the reference values, there are 3 values, one for each band
ref_min := sdo_number_array(10, 10, 10);
ref_max := sdo_number_array(200, 255, 230);
-- Mosaic
sdo_geor_aggr.MosaicSubset('georaster_table_1',
'georaster', null, 32610, null, null, null, null,
null, null, null, resolutions, null,
'colorBalance=linearstretching, cbreference=value',
'blocking=optimalpadding, blocksize=(512,512,3)',
gr, null, 'parallel=4', referenceValue1=>ref_min,
referenceValue2=>ref_max);
update georaster_table set georaster = gr where georid=10;
commit;
END;
/
例6-21 HISTOGRAMMATCHINGカラー・バランス
この例では、SDO_GEOR_AGGR.mosaicSubsetプロシージャでソース・イメージのHISTOGRAMMATCHINGカラー・バランス・メソッドを使用する方法を示します。参照のヒストグラムは、参照イメージから導出されます。参照イメージは、ソース・イメージと同じ数のバンドを持つ必要があります。
DECLARE
gr sdo_georaster;
resolutions sdo_number_array;
ref_gr sdo_georaster;
BEGIN
-- create the new GeoRaster object for mosaic
insert into georaster_table (georid, georaster)
values (10, sdo_geor.init('RDT_1',10))
returning georaster into gr;
-- set the output resolution
resolutions := sdo_number_array(30, 30);
-- retrieve the reference image
Select georaster into ref_gr from georaster_table where georid = 1;
-- Mosaic
sdo_geor_aggr.MosaicSubset('georaster_table_1',
'georaster', null, 32610, null, null, null, null,
null, null, null, resolutions, null,
'colorBalance=histogramMatching, cbreference=image',
'blocking=optimalpadding, blocksize=(512,512,3)',
gr, null, 'parallel=4', refereneImage=>ref_gr);
update georaster_table set georaster = gr where georid=10;
commit;
END;
/
例6-22 STATISTICSMATCHINGカラー・バランス
この例では、SDO_GEOR_AGGR.mosaicSubsetプロシージャでソース・イメージのSTATISTICSMATCHING
カラー・バランス・メソッドを使用する方法を示します。参照の統計値は、周囲のイメージの重複した領域から計算されます。これには、重複した領域が周囲のイメージとの色の違いを反映できるように、ソース・イメージに大きな重複が含まれる必要があります。
DECLARE
gr sdo_georaster;
resolutions sdo_number_array;
BEGIN
-- create the new GeoRaster object for mosaic
insert into georaster_table (georid, georaster)
values (10, sdo_geor.init('RDT_1',10))
returning georaster into gr;
-- set the output resolution
resolutions := sdo_number_array(30, 30);
-- Mosaic
sdo_geor_aggr.MosaicSubset('georaster_table_1',
'georaster', null, 32610, null, null, null, null,
null, null, null, resolutions, null,
'colorBalance=statisticsMatching, cbreference=overlap',
'blocking=optimalpadding, blocksize=(512,512,3)',
gr, null, 'parallel=4');
update georaster_table set georaster = gr where georid=10;
commit;
END;
/
親トピック: 大規模イメージのモザイク処理
6.17.2 パラレル圧縮、コピーおよびサブセット化
幾何補正、オルソ補正および再投影をパラレル化するには、SDO_GEOR.rectifyを使用します。ワーピングをパラレル化するには、SDO_GEOR.warpをコールします。すべてのラスター代数操作もパラレル化されます。
SDO_GEOR_AGGR.mosaicSubsetプロシージャを使用すると、様々なタイプのパラレル操作、たとえばパラレル圧縮と解凍、パラレル・コピーまたは形式変更コピー、パラレル・サブセット化、パラレル再投影、パラレル幾何補正を実行できます。コピー操作およびサブセット化操作は直接パラレル化されません。JPEGおよびDEFLATEでは、再フォーマットが必要ない場合にSDO_GEOR.changeFormatCopyプロシージャをコールしてパラレル圧縮と解凍を実行できます。このトピックでは、パラレル化された圧縮、コピーおよびサブセット化操作の例を示します。これらのどのケースでも、SDO_GEOR_AGGR.mosaicSubsetプロシージャは単一のGeoRasterオブジェクトに作用します。
パラレル化操作をわかりやすく説明するために、この項の例ではほとんどのパラメータにnull値を使用しています。実際のアプリケーションでは、SDO_GEOR_AGGR.mosaicSubsetプロシージャのその他のパラメータすべてを適用できますが、mosaicParam
パラメータは、入力が単一GeoRasterオブジェクトのときは効果を持ちません。
例6-23 パラレル圧縮
例6-23に、SDO_GEOR_AGGR.mosaicSubsetプロシージャを使用するパラレル圧縮を示します。これは、DEFLATEとJPEGの両方の圧縮および解凍に適用されます。
DECLARE gr sdo_georaster; cur sys_refcursor; crop_area sdo_geometry := null; BEGIN -- create a new georaster object with georid = 2 -- to hold the compressed image delete from georaster_table where georid = 2; insert into georaster_table(georid, georaster) values (2, sdo_geor.init('RDT2', 2)) returning georaster into gr; -- reblock and compress the image with georid = 1 into JPEG using parallel degree of 8 open cur for 'select georaster from georaster_table where georid = 1'; sdo_geor_aggr.mosaicSubset(cur, 0, null, null, null, crop_area, null, null, null, null, null, null, 'compression=JPEG-F, blocking=optimalpadding, blocksize=(512,512,3)', gr, null, 'parallel=8'); update georaster_table set georaster = gr where georid = 2; commit; END; /
前述の例では、storageParamパラメータを調整すると、圧縮と解凍を含むパラレル化したSDO_GEOR.changeFormatCopy操作として機能するようになります。
例6-24 パラレル・サブセット化およびコピー
例6-24に、SDO_GEOR_AGGR.mosaicSubsetプロシージャを使用するパラレル・サブセット化およびコピーを示します。
DECLARE gr sdo_georaster; cur sys_refcursor; crop_area sdo_geometry := null; BEGIN -- create a new georaster object with georid = 2 to hold the copy delete from georaster_table where georid = 2; insert into georaster_table(georid, georaster) values (2, sdo_geor.init('RDT2', 2)) returning georaster into gr; -- set the crop_area for subsetting. crop_area := sdo_geometry(2003, 26986, null, sdo_elem_info_array(1,1003,1), sdo_ordinate_array(237040, 897924, 237013.3, 897831.6, 237129, 897840, 237182.5, 897785.5, 237239.9, 897902.7, 237223, 897954, 237133, 897899, 237040, 897924)); -- subset from the image with georid = 1 using parallel degree of 8 -- and do polygon clipping -- If the crop_area is set to null, the same call will do a simple parallelized copying without subsetting. open cur for 'select georaster from georaster_table where georid = 1'; sdo_geor_aggr.mosaicSubset(cur, 0, null, null, null, crop_area, 'true', null, null, null, null, null, 'pyramid=true', gr, null, 'parallel=8'); update georaster_table set georaster = gr where georid = 2; commit; END; /
例6-24では、storageParam
パラメータを調整すると、圧縮と解凍を含むパラレル化したコピーまたはSDO_GEOR.changeFormatCopy操作として機能するようになります。
親トピック: 大規模イメージのモザイク処理
6.18 仮想モザイク
仮想モザイクでは、1つの大規模な仮想化されたモザイク・イメージとして一連のGeoRasterイメージが扱われます。
一部のアプリケーションでは、イメージのコレクションをモザイク処理して1つの物理モザイクにする必要はないか、推奨されません。たとえば、モザイクを個別に格納する十分なディスク領域がない場合や、単にディスク領域を節約する場合です。別の例としては、同じデータ・セットの同一の2つのコピーを維持せずに、元のデータ・セット(DEMデータ・セットなど)を現状のまま格納するが、このデータ・セットに対してシームレスに問合せを実行する場合があげられます。また別の例としては、ソース・イメージをモザイク処理するときに、同じ領域に異なる処理ルールとモザイク処理ルールを適用する場合があげられます(物理モザイクにはこのような柔軟性はありません)。
このような場合、GeoRasterイメージのセットを1つの大きいGeoRasterイメージにモザイク処理してそれをGeoRaster表に格納するかわりに、仮想モザイクを作成できます。仮想モザイクでは、GeoRasterイメージのセットは、GeoRaster表には格納されず、1つの大規模な仮想化されたモザイク・イメージとして扱われます。
GeoRasterでは、仮想モザイクは、1つのGeoRasterオブジェクトの場合と同様に扱われる1つ以上のGeoRaster表またはビューに基づく、幾何補正の有無を問わない地理参照されたGeoRasterオブジェクトの大規模コレクションとして定義されます。仮想モザイクのピラミッドはサポートされます。仮想モザイクには、無制限の数のイメージを含むことが可能で、GeoRasterデータベース全体を仮想モザイクとして扱うことができます。対象領域(サブセット化またはクロッピング)に基づいて仮想モザイクを問い合せる1つのコールを発行し、クロッピングされたイメージが異なる解像度を持つ異なる座標系に配置されるようにリクエストできます。問合せプロセス中に、ユーザー・リクエストに基づいて、共通ポイント・ルールを使用したリサンプリングおよびモザイク処理のオンザフライ変換が内部的および自動的に実行されます。
仮想モザイクを定義する方法は次のとおりです。
-
GeoRaster表またはGeoRaster表のリストとして(「GeoRaster表のいずれか1つまたはリストとしての仮想モザイク」を参照)
-
GeoRaster列を含むデータベース・ビューとして(「GeoRaster列を含むビューとしての仮想モザイク」を参照)
-
GeoRasterオブジェクトのコレクションが生成されるSQL問合せ文(カーソル) (「SQL問合せ文またはカーソルとしての仮想モザイク」を参照)
仮想モザイクの定義方法にかかわらず、GeoRaster表のGeoRasterオブジェクトには生成または設定されたspatialExtent
属性が含まれる必要があり、そうでない場合、SDO_GEOR_AGGR.getMosaicSubsetおよびSDO_GEOR_AGGR.mosaicSubsetプロシージャによって空のLOBロケータまたは空のGeoRasterオブジェクトが戻されます。一般的な使用方法で最高の問合せパフォーマンスを実現するため、あらかじめ常にspatialExtent
属性に対して空間索引を作成する必要があります。
仮想モザイクを定義した後、次のプロシージャを使用してそれを問い合せるか、処理できます。
-
SDO_GEOR_AGGR.getMosaicSubsetは、仮想モザイクに対してオンザフライ問合せを実行します。
仮想化されたモザイク・イメージの任意の部分の空間問合せで、SDO_GEOR_AGGR.getMosaicSubsetプロシージャは、問合せ対象領域に対して動的にモザイク操作を実行し、物理的に格納されたモザイク・イメージをサブセット化する場合と同様に、必要な結果をBLOBでオンザフライで戻します。
-
SDO_GEOR_AGGR.mosaicSubsetは、モザイク処理されたサブセットをGeoRasterオブジェクトとしてデータベースに格納します。
SDO_GEOR_AGGR.mosaicSubsetプロシージャは、問合せ対象領域に対してモザイク操作を実行し、必要な結果を別のGeoRasterオブジェクトに永続的に格納します。
仮想モザイクを使用する場合の典型的なワークフローは、「アプリケーションでの仮想モザイクの使用」、「大規模な仮想モザイクに関する特別な考慮事項」および関連トピック「MIN_X_RES$およびMAX_X_RES$を使用した問合せパフォーマンスの向上」を参照してください。
- GeoRaster表のいずれか1つまたはリストとしての仮想モザイク
- GeoRaster列を含むビューとしての仮想モザイク
- SQL問合せ文またはカーソルとしての仮想モザイク
- アプリケーションでの仮想モザイクの使用
- 大規模な仮想モザイクに関する特別な考慮事項
親トピック: イメージ処理および仮想モザイク
6.18.1 GeoRaster表のいずれか1つまたはリストとしての仮想モザイク
仮想モザイクは、1つのGeoRaster表として、またはGeoRaster表のリストとして定義できます。アプリケーションでは、各表とそのGeoRaster列を指定します。このアプローチでは、それらのGeoRaster表に含まれる指定されたGeoRaster列のすべてのGeoRasterオブジェクトが、仮想モザイクの一部となります。
例6-25では、GeoRaster表のリスト(GRTAB1、GRTAB2およびGRTAB3で、これらは「大規模イメージのモザイク処理」のGRTABと同じ定義を持ちます)で仮想モザイク処理のためのソース・イメージを指定します。
例6-25 GeoRaster表のリストとしての仮想モザイク
DECLARE lb blob; cropArea sdo_geometry; outArea sdo_geometry := null; outWin sdo_number_array:=null; resolutions sdo_number_array; BEGIN dbms_lob.createTemporary(lb, TRUE); cropArea := sdo_geometry(2003, 32610, null, sdo_elem_info_array(1, 1003, 3), sdo_ordinate_array(399180, 4247820, 496140,4353900) ); resolutions := sdo_number_array(30, 30); sdo_geor_aggr.getMosaicSubset('grtab1, grtab2, grtab3', 'grobj, grobj, grobj', 0, 32610, null, null, cropArea, null, null, null, resolutions, null, 'commonPointRule = end, nodata=true', lb, outArea, outWin); dbms_lob.freeTemporary(lb); if outWin is not null then dbms_output.put_line('output window: (' || outWin(1) || ',' || outWin(2) ||', ' || outWin(3) || ', ' || outWin(4) || ')'); end if; END; /
親トピック: 仮想モザイク
6.18.2 GeoRaster列を含むビューとしての仮想モザイク
仮想モザイクは、GeoRaster列を含む1つのデータベース・ビューとして定義できます。アプリケーションでは、ビュー名とそのGeoRaster列を指定します。このアプローチでは、ビューに含まれる指定されたGeoRaster列のすべてのGeoRasterオブジェクトが、仮想モザイクの一部となります。このアプローチでは、空間索引や他の任意の関連索引を使用して、任意の数のGeoRaster表から複雑な方法で仮想モザイクのイメージを選択できます。
仮想モザイクは、GeoRasterビューとGeoRaster表を組み合せたリストとして定義することも可能です。
仮想モザイクをデータベース・ビューとして定義する場合、そのビューは問合せ時にgeorasterTableNames
パラメータで指定できます。例6-26では、ビューとして定義された仮想モザイクを問い合せます。この例では、問合せによって、イメージが作成時刻に基づいてソートされ、重複する領域での結果となるモザイクに対して最新のイメージが選択されることに注意してください。
例6-26 仮想モザイクのためのGeoRaster表に対するビューの使用
Create or replace view grview as select * from (
Select grobj, last_update from grtab1 where cloud_cover=0 union all
Select grobj, last_update from grtab2 where cloud_cover=0 union all
Select grobj, last_update from grtab3 ) order by last_update;
DECLARE
lb blob;
cropArea sdo_geometry;
outArea sdo_geometry := null;
outWin sdo_number_array:=null;
resolutions sdo_number_array;
BEGIN
dbms_lob.createTemporary(lb, TRUE);
cropArea := sdo_geometry(2003, 32610, null,
sdo_elem_info_array(1, 1003, 3),
sdo_ordinate_array(399180, 4247820,
496140,4353900) );
resolutions := sdo_number_array(30, 30);
sdo_geor_aggr.getMosaicSubset('grview', 'grobj',
0, 32610, null, null, cropArea,
null, null, null, resolutions, null,
'commonPointRule = end, nodata=true',
lb, outArea, outWin);
dbms_lob.freeTemporary(lb);
if outWin is not null then
dbms_output.put_line('output window: (' || outWin(1) || ',' || outWin(2) ||', ' || outWin(3) || ', ' || outWin(4) || ')');
end if;
END;
/
親トピック: 仮想モザイク
6.18.3 SQL問合せ文またはカーソルとしての仮想モザイク
ビューを作成するかわりに、データベースからGeoRasterオブジェクトのコレクションを選択するSQL文または実行時データベース・カーソルとして仮想モザイクを定義できます。アプリケーションでは、SQL文からカーソルを作成して、そのカーソルを仮想モザイクとして使用します。この定義では、カーソルのすべてのGeoRasterオブジェクトが仮想モザイクの一部となります。このアプローチでは、任意の数のGeoRaster表から複雑な方法で仮想モザイクのイメージを選択できます。ただし、空間索引は、このタイプの仮想モザイクに対する問合せで自動的に使用されません。空間索引を利用するには、SQL文に対する問合せウィンドウを直接使用して動的に空間問合せ条件を追加し、その問合せウィンドウのすべてのイメージをより迅速に特定できるようにします。
SDO_GEOR_AGGR.getMosaicSubsetおよびSDO_GEOR_AGGR.mosaicSubsetプロシージャは、仮想モザイクとしてGeoRasterオブジェクトのカーソルを取得します(例6-27を参照)。この例では、問合せによって、イメージが作成時刻に基づいてソートされ、重複する領域での結果となるモザイクに対して最新のイメージが選択されることに注意してください。表に多くのGeoRasterオブジェクトが存在する場合に最高のパフォーマンスを実現するため、カーソルの問合せでは、空間問合せウィンドウを使用して、前述の段落に記載されている無関係のGeoRasterオブジェクトを除外する必要があります。
例6-27 仮想モザイクのためのカーソルの使用
DECLARE
lb blob;
outArea sdo_geometry := null;
outWin sdo_number_array:=null;
resolutions sdo_number_array;
mosaic_stmt varchar2(1000);
condition varchar2(1000);
BEGIN
dbms_lob.createTemporary(lb, TRUE);
resolutions := sdo_number_array(30, 30);
-- Define the query window (cropArea)
cropArea := sdo_geometry(2003, 32610, null,
sdo_elem_info_array(1, 1003, 3),
sdo_ordinate_array(399180, 4247820, 496140,4353900) );
-- Define the virtual mosaic
mosaic_stmt := 'select grobj from (select grobj, last_update from grtab1 ' ||
'where cloud_cover=0 union all select grobj, last_update from grtab2 ' ||
'where cloud_cover=0) t ';
-- Apply filtering using the query window (cropArea) to speed up query performance
condition := 'where sdo_anyinteract(t.grobj.spatialExtent,:1) = ''true'' ' ||
' order by last_update';
-- Open the virtual mosaic for query
open cur for mosaic_stmt || condition using cropArea;
-- Query the virtual mosaic (make sure the cropArea used here is the same
-- as the one used at opening the cursor)
sdo_geor_aggr.getMosaicSubset(cur,
0, 32610, null, null, cropArea,
null, null, null, resolutions, null,
'commonPointRule=end, nodata=true',
lb, outArea, outWin);
dbms_lob.freeTemporary(lb);
close cur;
if outWin is not null then
dbms_output.put_line('output window: (' || outWin(1) || ',' || outWin(2) ||', ' || outWin(3) || ', ' || outWin(4) || ')');
end if;
END;
/
親トピック: 仮想モザイク
6.18.4 アプリケーションでの仮想モザイクの使用
仮想モザイクは、イメージ提供エンジンとして、他の様々なアプリケーション・シナリオで使用できます。仮想モザイクの定義は、文字列または他の形式として個別にアプリケーションによって格納できます。主な問合せプロシージャのSDO_GEOR_AGGR.getMosaicSubsetおよびSDO_GEOR_AGGR.mosaicSubset以外に、GeoRasterでは、SDO_GEOR_AGGRパッケージでアプリケーション開発に役立つ他のサブプログラムを提供しています。
SDO_GEOR_AGGR.validateForMosaicSubset、SDO_GEOR_AGGR.getMosaicExtentおよびSDO_GEOR_AGGR.getMosaicResolutionsをアプリケーションでコールして、仮想モザイクが有効であり、空間問合せが仮想モザイク内に含まれることを確認できます。次のステップでは、アプリケーションの仮想モザイクで使用可能なワークフローについて説明します。
親トピック: 仮想モザイク
6.18.5 大規模な仮想モザイクに関する特別な考慮事項
仮想モザイクには、数個のイメージを含めることができますが、何万または何千万ものイメージを含めることも可能です。SDO_GEOR_AGGR.getMosaicSubsetとSDO_GEOR_AGGR.mosaicSubsetの両方で、cropArea
に接するかまたはその内部にあるすべてのイメージの仮想モザイクを(ネイティブ空間索引を使用して)自動的に検索し、それらのイメージおよびピラミッドの解像度を確認できます。cropArea
に接するかまたはその内部にあり、リクエストされた解像度に近い解像度を持つそれらのイメージまたは適切なピラミッド・レベルが、モザイク処理プロセスで使用されます。つまり、ソース・イメージとそのピラミッドの構成は、結果の品質と問合せパフォーマンス全体にとって非常に重要になります。
ガイドラインは、リクエストされた解像度のリクエストされたクロッピング領域に含まれる異なるソース・イメージまたはそのピラミッドから、小さいイメージをあまり多く取得しないようにすることです。
限られた数のみのイメージを含む小さい仮想モザイクでは、ソース・イメージごとに完全なピラミッドが生成され、ほとんどのアプリケーションで良好な問合せパフォーマンスが実現します。
多数のイメージ(数百を超えるイメージ)を含む大規模な領域では、アプリケーションによって、ソース・イメージごとに一定数のピラミッド・レベルのみを生成し、それらの最上位のピラミッドを新しいGeoRasterオブジェクトにモザイク処理して、それらのモザイクのピラミッドを生成できます。大規模なWeb視覚化プロジェクトの場合、ソース解像度のすべてのイメージと、より低い解像度レベルのすべてのイメージは、それらに対して構築されたピラミッドなしでGeoRasterオブジェクトとして格納される可能性があります。
これらの場合(多数のイメージや大規模Web視覚化)、各ソース・イメージが小さく、仮想モザイク内に多くの解像度レベルが存在すると、低い解像度レベルに対する問合せには、高い解像度レベルの多くの不要なイメージに対するメタデータ解像度の問合せが含まれるため、問合せが遅くなります。パフォーマンスを向上するには、アプリケーションで多くの仮想モザイクを定義し、そのそれぞれに特定の解像度または数個の解像度レベルのイメージのみをすべて含めます。次に、アプリケーションで、最初のステップとしてリクエストされた解像度に基づいて1つ以上の適切な仮想モザイクを検出し、選択したそれらの仮想モザイクにのみ空間問合せを実行します。このアプローチによって、パフォーマンスが大幅に向上する可能性があります。
前述の考慮事項に加え、同じ領域に対して多くの異なる解像度レベルが含まれる問合せの詳細は、「MIN_X_RES$およびMAX_X_RES$を使用した問合せパフォーマンスの向上」を参照してください。
6.18.5.1 MIN_X_RES$およびMAX_X_RES$を使用した問合せパフォーマンスの向上
同じ領域に多くの異なる解像度レベルが含まれる場合に(複数の仮想モザイクを定義すること以外で)仮想モザイクの問合せを高速化するより一般的なソリューションは、GeoRaster表またはビューのMIN_X_RES$およびMAX_X_RES$列を使用することです。仮想モザイクのGeoRaster表でこれらの列(NUMBERデータ型)を定義して、ソースGeoRasterオブジェクトの最小および最大の空間解像度の値をそれぞれ指定する必要があります。これらの列を追加して適切な解像度データを移入したら、SDO_GEOR_AGGR.getMosaicSubsetプロシージャによって、これらの列に格納されている解像度の範囲を使用して(georasterTableNames
パラメータ付きの形式を使用している場合)、outResolutions
パラメータで指定されているリクエストされた解像度ではないソースGeoRasterオブジェクトを除外します。これによって、cropArea
の各GeoRasterオブジェクトのメタデータの解析が回避されるため、パフォーマンスが大幅に向上します。
このアプローチを使用するには、次のステップを実行します。
仮想モザイクをビューとして定義する場合、ビューにも2つの列を含める必要があります。たとえば、例6-26のビュー定義は、次のように変更する必要があります。
Create or replace view grview as select * from ( Select grobj, min_x_res$, max_x_res$, last_update from grtab1 where cloud_cover=0 union all Select grobj, min_x_res$, max_x_res$, last_update from grtab2 where cloud_cover=0 union all Select grobj, min_x_res$, max_x_res$, last_update from grtab3 ) order by last_update;
この項の説明に従って仮想モザイクを定義した後、アプリケーションでは、他のすべての仮想モザイクと同じ方法でそれを問い合せて使用できますが、多くの解像度レベルを含む大規模な仮想モザイクではパフォーマンスが向上します。詳細は、SDO_GEOR_AGGR.getMosaicSubsetおよびSDO_GEOR_AGGR.mosaicSubsetのリファレンスの項を参照してください。
親トピック: 大規模な仮想モザイクに関する特別な考慮事項
6.19 イメージの提供
イメージおよびラスター・データのクライアントまたはアプリケーションへの提供は、GeoRaster PL/SQLおよびJava APIの多くの機能を通じてサポートされます。
直接イメージ提供には、ラスターの検索とそれに続くサブセット化またはクロッピング(SDO_GEOR.getRasterSubset)、イメージのクロッピング中の再投影および幾何補正のオンザフライでの適用(SDO_GEOR.reprojectおよびSDO_GEOR.rectify)、およびファイルへの直接エクスポート(SDO_GEOR.exportTo)が含まれます。
仮想モザイクは、特に大規模な物理モザイクの作成を希望しない場合に、様々なアプリケーションにイメージ・データベースを提供するために主として(効率的に)使用されます。仮想モザイクでは、ソース・イメージを事前処理したり、前もってモザイク処理する必要はありません。かわりに、すべてのイメージは現状のまま格納され、イメージ・データ・セット全体を1回のコール(SDO_GEOR_AGGR.getMosaicSubset)を使用して小さい対象領域に基づいてサーバーに提供できます。
通常、1つまたは一連の事前処理操作が複数のGeoRasterオブジェクトに適用され、結果のGeoRasterオブジェクトが作成されて、アプリケーションにラスター・データを直接提供するために、この項で説明されている機能が結果のGeoRasterオブジェクトに対して使用されます。つまり、GeoRasterイメージ操作とラスター代数機能の豊富なセット(「GeoRasterのデータ問合せおよび操作」、「ラスター代数および分析」およびこの章を参照)を、複雑なイメージ提供要件を満たすためにワークフローに統合できます。
親トピック: イメージ処理および仮想モザイク