ฉันจะรักษาเลเยอร์ที่จางหายไปเมื่อทำการโมเสคภาพด้วย gdal ได้หรือไม่?


12

ฉันกำลังทำการโมเสกภาพบางภาพด้วย gdal และต้องการปรับปรุงผลลัพธ์ขั้นสุดท้ายโดยใช้เลเยอร์อัลฟาที่ค่อยเป็นค่อยไป / ค่อยเป็นค่อยไปไปที่ขอบของภาพแต่ละภาพเพื่อลบขอบคมที่อยู่ตรงกลางของโมเสก ปัญหาที่ฉันมีอยู่ก็คือส่วนของภาพแต่ละภาพที่มีเลเยอร์ทีละส่วนกำลังปิดบังภาพที่อยู่ด้านล่างในโมเสกสุดท้ายแทนที่จะเป็นกึ่งโปร่งใสดังที่แสดงด้านล่าง:

กระเบื้องโมเสคที่มีเลเยอร์ภาพเป็นขั้นเป็นตอน

เป็นการดีที่ฉันต้องการภาพหนึ่งภาพที่จะจางหายไปในครั้งต่อไปโดยใช้ความโปร่งใสแบบค่อยเป็นค่อยไป

ขั้นตอนที่ฉันดำเนินการเพื่อสร้างโมเสกมีดังนี้:

เพิ่ม gcps ให้กับภาพต้นฉบับเพื่อระบุตำแหน่งทางภูมิศาสตร์และปรับทิศทางให้เหมาะสม (ทำกับแต่ละภาพตามลำดับ):

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

วางภาพลงใน geotiffs ใหม่ที่วางอย่างเหมาะสม (ทำตามแต่ละภาพ):

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

รวมภาพที่บิดเบี้ยวทั้งหมดเข้าด้วยกันเป็นภาพโมเสคเดียว:

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

ภาพที่ฉันเชื่อมโยงคือ mosaic.tif

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

gdalinfo สำหรับ geotiff ที่บิดเบี้ยวด้วยเลเยอร์ alpha แบบค่อยเป็นค่อยไป:

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 สำหรับโมเสกสุดท้าย:

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

ฉันได้รวมภาพตัวอย่างหลังจากแต่ละขั้นตอนของกระบวนการและโมเสกสุดท้ายที่ในลิงก์ดรอปบ็อกซ์ที่นี่ - ฉันสามารถจัดเตรียมรูปภาพทั้งหมดหากจำเป็น


2
มีข้อผิดพลาดที่รู้จักกับช่องอัลฟาใน gdal_warp ลองแปรปรวนวงอัลฟาของแต่ละแรสเตอร์แยกกันแล้วรวมกันอีกครั้งในภายหลัง (ดูgis.stackexchange.com/questions/49706/ … )
Michael Stimson

ดีมากขอบคุณสำหรับการตอบสนองอย่างรวดเร็ว! คุณหมายถึงการแยกชั้นอัลฟาออกจากแถบ rgb ก่อนที่จะแสดง gdalwarp แล้วรวมอีกครั้งหลังจากนั้นหรือไม่
jeremyeastwood

แค่นั้นแหละ. gdal_warp มีปัญหาการแปรปรวนกับอัลฟาดังนั้นถือว่าเป็น RGB และไม่ใช่ RGBA หากต้องการแยก gdal_translate -of GTIFF -b 1 -b 2 -b 3 (สร้างภาพ RGB จาก RGBA)
Michael Stimson

โอเคเย็นแล้วรวมกันอีกครั้งผ่าน vrt ตามลิงค์ของคุณ? เมื่อรวมกันอีกครั้งโดยใช้ gdalbuildvrt - แยกกันมีวิธีที่จะใช้ 3 วงดนตรีจากภาพแรกและ 1 จากที่สองหรือฉันควรจะใช้ตัวเลือก gdalbuildvrt เพื่อรวม?
jeremyeastwood

1
ไม่ฉันไม่คิดว่าเครื่องมือบรรทัดคำสั่งใด ๆ สามารถผสมอัลฟาได้ คุณมี QGIS (หรือ ArcGis) ทั้งคู่มีเครื่องคำนวณแรสเตอร์ที่สามารถใช้งานฟังก์ชั่นนี้หลังจากแปรปรวน แน่นอนว่ามันจะไม่ง่ายอย่างนั้นเพียงแค่วางมันลงใน VRT ... ฉันเชื่อว่า VRT เขียนทับพิกเซลพื้นฐานทั้งหมดไม่ใช่การผสมผสานแบบอัลฟ่า บางทีนั่นอาจเป็นสิ่งที่นักพัฒนาสามารถขอให้ปรับปรุงได้
Michael Stimson

คำตอบ:


1

ปัญหาเกี่ยวกับเวิร์กโฟลว์ของคุณไม่ได้เชื่อมโยงกับเลเยอร์อัลฟา แต่ความจริงที่ว่าจะใช้เฉพาะภาพสุดท้ายเมื่อคุณสร้าง vrt

gdalmerge doc

ในพื้นที่ทับซ้อนภาพสุดท้ายจะถูกคัดลอกไปก่อนหน้านี้

gdalbuildvrt doc:

หากมีจำนวนของการซ้อนทับเชิงพื้นที่ระหว่างไฟล์ลำดับของไฟล์ที่ปรากฏในรายการของแหล่งข้อมูล: ไฟล์ที่อยู่ในตอนท้ายจะเป็นไฟล์ที่จะดึงเนื้อหามา โปรดทราบว่าจะมีการนำโนดาต้าเข้ามาเพื่อดึงข้อมูลจากชุดข้อมูลที่มีลำดับความสำคัญน้อยกว่า แต่ปัจจุบันช่องอัลฟาไม่ได้ถูกนำมาพิจารณาเพื่อทำการผสมแบบอัลฟา (ดังนั้นแหล่งที่มี alpha = 0 ปรากฏอยู่ด้านบนของแหล่งอื่น ๆ . สิ่งนี้อาจมีการเปลี่ยนแปลงในรุ่นที่ใหม่กว่า

ในความเป็นจริงพื้นที่โปร่งใสนั้นโปร่งใสและไม่มีอะไรให้ดูใต้

หากคุณต้องการใช้การผสมบางอย่างคุณจะต้องใช้ gdalwarp: มันจะจัดการกับแถบอัลฟาและการผสมตามระยะทางที่กำหนดเป็นพิกเซล (ระยะทางที่ผสม)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.