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の空間索引が作成されています。
次の例で、モザイク処理されたイメージは、「記憶域パラメータ」で定義されている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操作として機能するようになります。
親トピック: 大規模イメージのモザイク処理