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プロシージャを使用し、イメージの行次元が2倍、列次元が2倍になるsdo_number_array(2, 2)としてscalesパラメータを指定して、スケール変更を実行します。

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;