Görüntüleri gdal ile mozaiklerken solma alfa katmanını koruyabilir miyim?


12

Bazı görüntüleri gdal ile mozaikliyorum ve mozaiğin ortasındaki keskin kenarları kaldırmak için her görüntünün kenarına doğru solma / kademeli bir alfa katmanı kullanarak nihai sonucu iyileştirmek istiyorum. Yaşadığım sorun, her bir görüntünün aşamalı alfa katmanıyla bölümünün, aşağıda gösterildiği gibi yarı saydam olmak yerine, altındaki mozaikin altındaki görüntüleri maskelemesi:

kademeli alfa katmanları görüntüleri maskeleme ile mozaik

İdeal olarak, bu kademeli saydamlığı kullanarak bir görüntünün bir sonrakine geçmesini istiyorum.

Mozaiği oluşturmak için gerçekleştirdiğim adımlar aşağıdaki gibidir:

Coğrafi konum belirlemek ve düzgün bir şekilde yönlendirmek için orijinal görüntülere gcps ekleyin (sırayla her görüntüye yapılır):

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

Görüntüleri düzgün bir şekilde yönlendirilmiş yeni geotiff'lere dönüştürün (sırayla her görüntüye yapılır):

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

Tüm çarpık görüntüleri tek bir mozaikte birleştirin:

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

Bağlantı verdiğim görüntü mosaic.tif.

örnek bir girdi dosyası için gdalinfo:

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

kademeli alfa katmanlı çarpık geotiff için gdalinfo:

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

son mozaik için gdalinfo:

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

Sürecin her aşamasından sonra bir örnek resim ve son mozaik burada bir dropbox bağlantıda dahil ettik - gerekirse tüm görüntü kümesi sağlayabilir.


2
Gdal_warp'ta alfa kanallarında bilinen bir hata var. Her bir rasterin alfa bandını ayrı ayrı bükmeyi deneyin ve daha sonra tekrar birleştirin (bkz. Gis.stackexchange.com/questions/49706/… )
Michael Stimson

harika, hızlı yanıt için teşekkürler! gdalwarp gerçekleştirmeden önce alfa katmanını rgb bantlarından ayırmayı mı, sonra yeniden birleştirmeyi mi kastediyorsunuz?
jeremyeastwood

Bu kadar. gdal_warp, alfa ile çözülme sorunlarına sahiptir, bu yüzden RGBA yerine RGB olarak davranın. GTFF -b 1 -b 2 -b 3'ü gdal_translate -f ayırmak için (RGBA'dan bir RGB görüntüsü oluşturur).
Michael Stimson

Tamam serin, sonra bağlantınıza göre bir vrt ile yeniden birleştirmek? gdalbuildvrt -separate kullanarak yeniden birleştirirken, ilk görüntüden 3 ve ikinci görüntüden 1 bant almanın bir yolu var mı, yoksa birleştirmek için bir gdalbuildvrt seçeneği mi kullanmalıyım?
jeremyeastwood

1
Hayır, komut satırı araçlarının hiçbirinin alfa karıştırma yapabileceğini sanmıyorum. QGIS (veya ArcGis) her ikisinde de çözgü işleminden sonra bu işlevi yerine getirebilecek tarama hesaplayıcıları var mı? Onları bir VRT'ye bırakmak kadar kolay olmayacaktır ... VRT'nin Alpha karışımının değil, alttaki piksellerin tamamen üzerine yazdığına inanıyorum; belki de bu geliştiricilere bir iyileştirme talebi olarak konabilecek bir şeydir.
Michael Stimson

Yanıtlar:


1

İş akışınızla ilgili sorun alfa katmanına bağlı değildir, ancak bir vrt oluşturduğunuzda yalnızca son görüntünün kullanılmasıdır.

gdalmerge doktor

Çakışan alanlarda, son görüntü önceki resimlere kopyalanır.

gdalbuildvrt doc:

Dosyalar arasında bir miktar uzamsal çakışma varsa, kaynak madde listesinde görünen dosyaların sırası: sonunda listelenen dosyalar içeriğin getirileceği dosyalardır. Daha az öncelikli veri kümelerinden potansiyel olarak veri almak için nodata'nın dikkate alınacağına dikkat edin, ancak şu anda alfa kanalı alfa birleştirme yapmak için dikkate alınmamaktadır (bu nedenle başka bir kaynağın üstünde görünen alfa = 0 olan bir kaynak geçersiz kılınacaktır) . Bu, sonraki sürümlerde değiştirilebilir.

Aslında şeffaf alan basitçe saydamdır ve altında görülecek hiçbir şey yoktur.

Biraz karıştırma kullanmak istiyorsanız, gdalwarp kullanarak yapmanız gerekir: alfa bantlarını ve piksel cinsinden belirli bir mesafeye (-cblend mesafe) dayalı olarak harmanlamayı işler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.