Kann ich eine verblassende Alpha-Ebene beibehalten, wenn ich Bilder mit gdal mosaikiere?

12

Ich habe einige Bilder mit GDAL mosaikiert und möchte das Endergebnis verbessern, indem ich eine verblassende / allmähliche Alpha-Ebene in Richtung der Bildkante verwende, um die scharfen Kanten in der Mitte des Mosaiks zu entfernen. Das Problem, das ich habe, ist, dass der Teil jedes einzelnen Bildes mit der graduellen Alpha-Ebene die Bilder darunter im endgültigen Mosaik maskiert, anstatt halbtransparent zu sein, wie unten gezeigt:

Mosaik mit schrittweisen Alpha-Ebenen, die Bilder maskieren

Idealerweise möchte ich, dass ein Bild mit dieser schrittweisen Transparenz in das nächste übergeht.

Die Schritte zum Generieren des Mosaiks lauten wie folgt:

Fügen Sie gcps zu den Originalbildern hinzu, um sie zu geolokalisieren und richtig auszurichten (wird nacheinander für jedes Bild ausgeführt):

gdal_translate -of GTiff -a_srs EPSG:4326 -a_srs EPSG:4326 -gcp 1616 0 -88.2728612066 40.5175787437 -gcp <etc., etc.> <original_image_with_gradual_alpha>.tif <image_with_gradual_alpha_and_gcps>.tif

Warpen Sie die Bilder zu neuen Geotiffs, die richtig ausgerichtet sind (nacheinander für jedes Bild):

gdalwarp -s_srs EPSG:4326 -t_srs EPSG:4326 -dstnodata 0 <image_with_gradual_alpha_and_gcps>.tif <warped_geotiff_with_alpha>.tif

Kombinieren Sie alle verzerrten Bilder zu einem Mosaik:

gdalbuildvrt -srcnodata 0 mosaic.vrt <warped_geotiff_with_alpha_root>*.tif
gdal_translate mosaic.vrt mosaic.tif

Das Bild, das ich verlinkt habe, ist mosaic.tif.

gdalinfo für eine Beispieleingabedatei:

Driver: GTiff/GeoTIFF
Files: dsc00562.tif
Size is 1616, 1080
Coordinate System is `'
Metadata:
  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
  TIFFTAG_XRESOLUTION=350
  TIFFTAG_YRESOLUTION=350
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0, 1080.0)
Upper Right ( 1616.0,    0.0)
Lower Right ( 1616.0, 1080.0)
Center      (  808.0,  540.0)
Band 1 Block=1616x1 Type=Byte, ColorInterp=Red
  Mask Flags: PER_DATASET ALPHA 
Band 2 Block=1616x1 Type=Byte, ColorInterp=Green
  Mask Flags: PER_DATASET ALPHA 
Band 3 Block=1616x1 Type=Byte, ColorInterp=Blue
  Mask Flags: PER_DATASET ALPHA 
Band 4 Block=1616x1 Type=Byte, ColorInterp=Alpha

gdalinfo für den verzogenen Geotiff mit schrittweiser Alpha-Ebene:

Driver: GTiff/GeoTIFF
Files: geo_dsc00603.tif
Size is 1944, 1356
Coordinate System is:
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0],
    UNIT["degree",0.0174532925199433],
    AUTHORITY["EPSG","4326"]]
Origin = (-88.275727919349990,40.518829195724997)
Pixel Size = (0.000001599004942,-0.000001599004942)
Metadata:
  AREA_OR_POINT=Area
  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
  TIFFTAG_XRESOLUTION=350
  TIFFTAG_YRESOLUTION=350
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  ( -88.2757279,  40.5188292) ( 88d16'32.62"W, 40d31' 7.79"N)
Lower Left  ( -88.2757279,  40.5166609) ( 88d16'32.62"W, 40d30'59.98"N)
Upper Right ( -88.2726195,  40.5188292) ( 88d16'21.43"W, 40d31' 7.79"N)
Lower Right ( -88.2726195,  40.5166609) ( 88d16'21.43"W, 40d30'59.98"N)
Center      ( -88.2741737,  40.5177451) ( 88d16'27.03"W, 40d31' 3.88"N)
Band 1 Block=1944x1 Type=Byte, ColorInterp=Red
  NoData Value=0
Band 2 Block=1944x1 Type=Byte, ColorInterp=Green
  NoData Value=0
Band 3 Block=1944x1 Type=Byte, ColorInterp=Blue
  NoData Value=0
Band 4 Block=1944x1 Type=Byte, ColorInterp=Alpha
  NoData Value=0

gdalinfo für das endgültige Mosaik:

Driver: GTiff/GeoTIFF
Files: mosaic.tif
Size is 5702, 6846
Coordinate System is:
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0],
    UNIT["degree",0.0174532925199433],
    AUTHORITY["EPSG","4326"]]
Origin = (-88.278946072799997,40.524561377550008)
Pixel Size = (0.000001509761581,-0.000001509761581)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  ( -88.2789461,  40.5245614) ( 88d16'44.21"W, 40d31'28.42"N)
Lower Left  ( -88.2789461,  40.5142255) ( 88d16'44.21"W, 40d30'51.21"N)
Upper Right ( -88.2703374,  40.5245614) ( 88d16'13.21"W, 40d31'28.42"N)
Lower Right ( -88.2703374,  40.5142255) ( 88d16'13.21"W, 40d30'51.21"N)
Center      ( -88.2746417,  40.5193935) ( 88d16'28.71"W, 40d31' 9.82"N)
Band 1 Block=5702x1 Type=Byte, ColorInterp=Red
  NoData Value=0
Band 2 Block=5702x1 Type=Byte, ColorInterp=Green
  NoData Value=0
Band 3 Block=5702x1 Type=Byte, ColorInterp=Blue
  NoData Value=0
Band 4 Block=5702x1 Type=Byte, ColorInterp=Alpha
  NoData Value=0

Ich habe bei in einem Dropbox - Link ein Beispielbild nach jeder Stufe des Prozesses und dem endgültigen Mosaik enthalten hier - ich das gesamte Bild Satz bei Bedarf zur Verfügung stellen kann.

jeremyeastwood
quelle
2
Es gibt einen bekannten Fehler mit Alphakanälen in gdal_warp. Versuchen Sie, das Alpha-Band jedes Rasters separat zu verziehen und später erneut zu kombinieren (siehe gis.stackexchange.com/questions/49706/… )
Michael Stimson,
super, danke für die schnelle antwort! Meinen Sie, trennen Sie die Alpha-Ebene von den RGB-Bändern, bevor Sie GDALWARP ausführen, und rekombinieren Sie sie anschließend?
Jeremyeastwood
Das ist es. gdal_warp hat Probleme beim Warping mit Alpha. Behandeln Sie das als RGB und nicht als RGBA. So trennen Sie gdal_translate -of GTIFF -b 1 -b 2 -b 3 (erstellt ein RGB-Bild aus RGBA).
Michael Stimson
ok cool, dann rekombiniere via vrt wie bei deinem link? Gibt es eine Möglichkeit, beim erneuten Kombinieren mit gdalbuildvrt -separate 3 Bänder aus dem ersten und 1 aus dem zweiten Bild zu nehmen, oder sollte ich eine gdalbuildvrt-Option zum Kombinieren verwenden?
Jeremyeastwood
1
Nein, ich glaube nicht, dass eines der Befehlszeilen-Tools Alpha-Blending ausführen kann. Haben Sie QGIS (oder ArcGis), verfügen beide über Rasterrechner, die diese Funktion nach dem Warping ausführen können. Es wäre sicherlich nicht so einfach, sie einfach in eine VRT zu ziehen ... Ich glaube, dass die VRT die darunter liegenden Pixel vollständig überschreibt, nicht die Alpha-Mischung. Vielleicht ist das etwas, das den Entwicklern als Verbesserungswunsch vorgelegt werden könnte.
Michael Stimson

Antworten:

1

Das Problem mit Ihrem Workflow hängt nicht mit der Alpha-Ebene zusammen, sondern mit der Tatsache, dass nur das letzte Bild verwendet wird, wenn Sie eine vrt erstellen.

gdalmerge doc

In Überlappungsbereichen wird das letzte Bild über frühere kopiert.

gdalbuildvrt doc:

Bei räumlichen Überlappungen zwischen Dateien wird die Reihenfolge der Dateien in der Liste der Quellen angegeben: Die am Ende aufgelisteten Dateien sind diejenigen, aus denen der Inhalt abgerufen wird. Beachten Sie, dass Knoten berücksichtigt werden, um möglicherweise Daten aus weniger prioritären Datensätzen abzurufen. Derzeit wird der Alphakanal jedoch nicht für das Alpha-Compositing berücksichtigt. . Dies kann in späteren Versionen geändert werden.

Tatsächlich ist der transparente Bereich also einfach transparent, und es ist nichts darunter zu sehen.

Wenn Sie eine Überblendung verwenden möchten, müssen Sie dies mit gdalwarp tun: Es behandelt die Alphabänder sowie die Überblendung basierend auf einem bestimmten Abstand in Pixeln (-cblend distance).

radouxju
quelle