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を使用したオルソ補正では、elevationParamaverageキーワードはオプションで、指定しない場合、プロシージャでは、ターゲット領域のDEMから抽出されたサンプル値に基づいて標高値が評価されます。

elevationParamoffsetおよび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;
/