Tôi có thể bảo vệ lớp alpha mờ khi ghép ảnh với gdal không?


12

Tôi đang ghép một số hình ảnh với gdal và muốn cải thiện kết quả cuối cùng bằng cách sử dụng lớp alpha mờ dần dần về phía cạnh của mỗi hình ảnh để loại bỏ các cạnh sắc nét ở giữa bức tranh. Vấn đề tôi gặp phải là phần của mỗi hình ảnh riêng lẻ với lớp alpha dần dần che lấp các hình ảnh bên dưới nó trong bức tranh ghép cuối cùng, thay vì bán trong suốt, như được hiển thị bên dưới:

khảm với các lớp mặt nạ alpha dần dần

Lý tưởng nhất là tôi muốn một hình ảnh mờ dần sang hình ảnh tiếp theo bằng cách sử dụng độ trong suốt dần dần này.

Các bước tôi thực hiện để tạo khảm như sau:

Thêm gcps vào ảnh gốc để định vị chúng và định hướng chúng đúng cách (lần lượt thực hiện cho từng ảnh):

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

Warp các hình ảnh đến các geotiff mới được định hướng đúng (lần lượt được thực hiện cho từng hình ảnh):

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

Kết hợp tất cả các hình ảnh bị cong vênh với nhau thành một khảm:

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

Hình ảnh tôi liên kết là khảm.tif.

gdalinfo cho một tệp đầu vào mẫu:

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 cho geotiff bị cong vênh với lớp alpha dần dần:

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 cho khảm cuối cùng:

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

Tôi đã bao gồm một hình ảnh mẫu sau mỗi giai đoạn của quy trình và khảm cuối cùng trong liên kết hộp thả ở đây - Tôi có thể cung cấp toàn bộ bộ ảnh nếu cần.


2
Có một lỗi đã biết với các kênh alpha trong gdal_warp. Hãy thử uốn cong dải alpha của từng raster riêng biệt và sau đó kết hợp lại sau (xem gis.stackexchange.com/questions/49706/ trộm )
Michael

thật tuyệt, cảm ơn vì đã phản hồi nhanh chóng bạn có nghĩa là tách lớp alpha khỏi các dải rgb trước khi thực hiện gdalwarp, sau đó kết hợp lại sau?
jeremyeastwood

Đó là nó. gdal_warp có vấn đề cong vênh với alpha, vì vậy hãy coi là RGB và không phải RGBA. Để tách gdal_translate -of GTIFF -b 1 -b 2 -b 3 (tạo hình ảnh RGB từ RGBA).
Michael Promotionson

ok tuyệt, sau đó kết hợp lại thông qua một vrt theo liên kết của bạn? khi kết hợp lại bằng gdalbuildvrt -separate, có cách nào để lấy 3 dải từ hình ảnh đầu tiên và 1 từ hình ảnh thứ hai, hay tôi nên sử dụng tùy chọn gdalbuildvrt để kết hợp?
jeremyeastwood

1
Không, tôi không nghĩ rằng bất kỳ công cụ dòng lệnh nào có thể thực hiện trộn alpha. Bạn có QGIS (hoặc ArcGis) cả hai đều có máy tính raster có thể thực hiện chức năng này sau khi cong vênh. Chắc chắn sẽ không dễ dàng như việc thả chúng vào VRT ... Tôi tin rằng VRT sẽ ghi đè hoàn toàn các pixel bên dưới, chứ không phải Alpha pha trộn; có lẽ đó là một cái gì đó có thể được đưa cho các nhà phát triển như một yêu cầu cải tiến.
Michael Promotionson

Câu trả lời:


1

Vấn đề với quy trình làm việc của bạn không được liên kết với lớp alpha, nhưng thực tế là chỉ hình ảnh cuối cùng được sử dụng khi bạn tạo vrt.

tài liệu gdalmerge

Trong các khu vực chồng lấp, hình ảnh cuối cùng sẽ được sao chép so với những hình ảnh trước đó.

gdalbuildvrt doc:

Nếu có một số lượng chồng chéo không gian giữa các tệp, thứ tự các tệp xuất hiện trong danh sách các vấn đề nguồn: các tệp được liệt kê ở cuối là những tệp mà nội dung sẽ được tìm nạp. Lưu ý rằng gật đầu sẽ được tính đến để có khả năng tìm nạp dữ liệu từ các bộ dữ liệu ít ưu tiên hơn, nhưng hiện tại, kênh alpha không được tính đến để tổng hợp alpha (do đó, một nguồn có alpha = 0 xuất hiện trên đầu nguồn khác sẽ ghi đè lên nội dung) . Điều này có thể được thay đổi trong các phiên bản sau.

Vì vậy, trên thực tế, khu vực trong suốt chỉ đơn giản là trong suốt, và không có gì để xem bên dưới nó.

Nếu bạn muốn sử dụng một số pha trộn, bạn cần phải sử dụng gdalwarp: nó xử lý các dải alpha cũng như trộn dựa trên một khoảng cách nhất định tính bằng pixel (khoảng cách -cblend)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.