Làm cho khu vực nốt của một tổng quan orthophoto được ghép lại thành màu trắng?


9

Tôi có một tập hợp các hình ảnh orthophoto, mỗi hình chứa đầy dữ liệu, nhưng khi được đặt cùng nhau, vùng phủ sóng không tạo thành một hình chữ nhật nên có các vùng gật đầu.

Trong MapGuide, tôi cần có thể hiển thị các vùng gật đầu này thành màu trắng để người dùng của tôi không phải lãng phí mực đen khi in.

Ở quy mô lớn, nơi tôi hiển thị trực tiếp hình ảnh độ phân giải đầy đủ ban đầu, điều này không có vấn đề gì. Tôi chỉ đặt màu nền của bản đồ thành màu trắng và các khu vực không có chỉnh hình hiển thị nền.

Để thực hiện, tôi cần có thể hợp nhất tất cả các hình ảnh nguồn này thành một hình ảnh tổng quan tổng hợp được ghép lại để hiển thị ở tỷ lệ nhỏ hơn, nơi có thể xem được nhiều hình ảnh trực quan hơn cùng một lúc.

Tôi đã cố gắng sử dụng GDAL để hợp nhất và lấy mẫu lại tổng quan, nhưng theo mặc định, nó dường như tạo ra khối GeoTIFF được ghép lại với màu đen trong các khu vực gật đầu và MapGuide không cho phép tôi đặt màu đen trong suốt trên các trình quét màu.

Có cách nào để tôi có được hiệu quả những gì tôi muốn không?

Tôi đã cung cấp câu trả lời tôi đã kết thúc bằng cách sử dụng GDAL, nhưng rất thích xem các giải pháp sử dụng các tiện ích xử lý hình ảnh và ứng dụng GIS khác, cả nguồn mở và độc quyền.

Câu trả lời:


15

Cách dễ nhất để tôi giải quyết vấn đề này là sử dụng Định dạng ảo GDAL . Định dạng này cho phép tôi coi toàn bộ tập hợp hình ảnh là một đối tượng hình ảnh duy nhất và biến đổi nó theo ba bước tương đối đơn giản.

Tạo bộ dữ liệu ảo

GDAL (bao gồm các tệp nhị phân Windows của Tamas Szekeres và các phiên bản gần đây của OSGeo4W ) bao gồm một tiện ích có tên gdalbuildvrt có thể được sử dụng để xây dựng bộ dữ liệu ảo ban đầu.

Một cách đơn giản để sử dụng điều này là thêm tất cả các hình ảnh của bạn vào một tệp văn bản, sau đó sử dụng tệp văn bản đó làm đầu vào cho gdalbuildvrt. Đây là một ví dụ (bạn sẽ cần đặt lại lệnh thứ hai trên một dòng):

dir /b *.tif > my_images.txt
gdalbuildvrt 
  -hidenodata 
  -vrtnodata "255 255 255" 
  -resolution highest 
  -input_file_list my_images.txt 
  my_image.vrt

Điều này sẽ để lại cho bạn một tệp XML mà bạn có thể coi là một hình ảnh duy nhất cho tất cả các hoạt động GDAL. Nó cũng thể hiện bên trong gật đầu là màu trắng, nhưng ẩn định nghĩa về nốt từ các công cụ đọc từ nó.

Tạo Tổng quan về mẫu

Tiếp theo, bạn sẽ thực hiện việc lấy mẫu lại và đầu ra của hình ảnh tổng quan. Bạn có thể làm điều này với gdal_translate hoặc gdalwarp . Đối với một trong hai điều này, hãy nhớ rằng kích thước kết quả sẽ là width * height * 3(số lượng băng tần 8 bit) Byte. Nếu giá trị này lớn hơn 4GB, bạn sẽ muốn xem các tùy chọn GeoTIFF cho cú pháp để chỉ định BigTIFF làm đầu ra của bạn (-co "BIGTIFF = CÓ").

Đối với gdal_translate, bạn sẽ cần xác định kích thước của hình ảnh ảo bằng cách sử dụng lệnh gdalinfo tiện dụng . Lấy các kích thước này và chia từng kích thước cho một số yếu tố nhất quán để xác định chiều rộng và chiều cao đầu ra của tệp theo pixel.

Lệnh sẽ trông giống như (trên một dòng):

gdal_translate
  -outsize 53120 14000
  -co "TILED=YES"
  -co "PROFILE=GEOTIFF"
  -co "BLOCKXSIZE=256"
  -co "BLOCKYSIZE=256"
  my_image.vrt
  my_image.tif

Đối với gdalwarp, bạn sẽ cần biết kích thước pixel kết quả; trong trường hợp này tôi đang sử dụng 0,5 mét. Bạn cũng sẽ muốn thực hiện một cuộc gọi về phương pháp lấy mẫu lại. Tôi thích cubicspline cho tổng quan orthophoto. Nó mềm hơn, nhưng bạn sẽ không sử dụng những độ phân giải này đến độ phân giải đầy đủ và theo kinh nghiệm của tôi, nó sẽ tạo ra một hình ảnh có thể nén hơn nếu bạn đang sử dụng một cái gì đó như JPEG hoặc ECW.

gdalwarp 
  -r cubicspline 
  -of GTiff 
  -dstnodata "255 255 255" 
  -tr 0.5 0.5 
  -co "PROFILE=GEOTIFF" 
  -co "BIGTIFF=YES" 
  -co "TILED=YES" 
  -co "BLOCKXSIZE=256"
  -co "BLOCKYSIZE=256"
  my_image.vrt 
  my_image.tif

Bạn cũng có thể muốn xem xét sử dụng các tùy chọn nén JPEG cho các tổng quan GeoTIFF được chia lại này; nó thu nhỏ tệp đầu ra đáng kể với ( theo Frank ) chỉ là một hình phạt hiệu suất cận biên.

  -co "COMPRESS=JPEG" 
  -co "JPEG_QUALITY=80" 
  -co "PHOTOMETRIC=YCBCR"

Tổng quan

Bạn cũng sẽ muốn chạy lệnh gdaladdo tiện dụng trên hình ảnh kết quả để xây dựng "kim tự tháp" bên trong, để yêu cầu độ phân giải thấp hơn kích thước hình ảnh đầy đủ có thể được đáp ứng với một tập hợp con dữ liệu. Sự gia tăng hiệu suất là nhiều hơn giá trị không gian đĩa trong hầu hết các trường hợp. Bạn sẽ muốn chơi xung quanh với các cấp độ mà bạn sử dụng ở đây; Đối với hình ảnh rất lớn, bạn có thể có thể thả một số. Lệnh gdaladdo trông giống như thế này:

gdaladdo 
  -r average 
  my_image.tif 
  2 4 8 16 32 64 128 256

Tôi sẽ đề nghị thử nghiệm với các cấp độ này để có hiệu suất tối ưu. Bạn có thể thấy rằng một khoảng thời gian lấy mẫu khác nhau sẽ tốt hơn cho ứng dụng của bạn hoặc, dựa trên kích thước hình ảnh của bạn, rằng bạn có thể bỏ một số số cao hơn (hoặc cần nhiều hơn)

Ngoài ra, nếu bạn đang tạo tổng quan bên ngoài (sử dụng tùy chọn -ro), hãy xem xét thêm các dòng cấu hình nén JPEG:

  --config COMPRESS_OVERVIEW JPEG 
  --config PHOTOMETRIC_OVERVIEW YCBCR 
  --config INTERLEAVE_OVERVIEW BAND 

(Tôi tin rằng những thứ này được kế thừa từ GeoTIFF gốc cho các tổng quan được nhúng)

Ghi chú

Khi gặp vấn đề này, tôi đã hỏi trên kênh #gdal trên freenode.irc.net. Đây là một nguồn tài nguyên tuyệt vời và tôi hoàn toàn mang ơn Howard Butler, Frank Warmerdam và thậm chí cả Rouault vì đã giúp tôi giải quyết vấn đề này.


Cảm ơn bạn đã hoàn thành, đã dành thời gian và tôi chắc chắn rằng đã đến lúc, để bao quát toàn bộ quy trình công việc và không chỉ là bit cụ thể đã trả lời câu hỏi.
matt wilkie

1
Sẽ rất thú vị nếu xem gdalsetnull.py hoạt động trên VRT, sau đó "chỉnh sửa tệp VRT trong trình chỉnh sửa văn bản, thêm một thực thể <NoDataValue />" là không cần thiết.
matt wilkie

1
@matt wilkie, nó chắc chắn là một chút công việc viết lại và định dạng cho trang web này, nhưng tôi cũng đã đề cập đến điều này trước đây như là một phần của quy trình làm việc lớn hơn trong blog của tôi: jasonbirch.com/nodes/2009/08/11/290/fwtools- ftw-gdal Gợi ý đó chắc chắn đáng để thử!
JasonBirch

Lưu ý chung về cửa sổ cmd: sử dụng dấu mũ ^để ngắt dòng sẽ được nối khi được thực thi (ví dụ: thêm ^vào cuối mỗi ví dụ dòng mã ở trên để giữ cả mức độ dễ đọc và khả năng chạy). Thông báo quan trọng: không bao giờ kết thúc tệp hoặc dòng lệnh bằng dấu mũ trừ khi bạn muốn gọi tiêu thụ hết bộ nhớ
matt wilkie

3

Có, nhưng thông qua thử nghiệm và lỗi tôi đã có thể ngăn chặn rằng -vrtnodata 255 có tác dụng gắn cờ mọi thứ có màu trắng như một nốt, không chỉ trên bản đồ, mà gdal2tiles sau đó xử lý với độ trong suốt alpha theo cờ -a.

Vì vậy, bạn kết thúc với một số hình ảnh nguồn của bạn được đặt thành trong suốt, trong trường hợp của tôi là các phần màu trắng của đường đứt nét. Đây không phải là thiết bị đầu cuối nhưng chắc chắn sẽ rất tốt khi có thể chỉ định cho gdal2tiles màu "không có hình ảnh src", do kết quả của các khoảng trống gốc trong vrt hoặc là kết quả của sự cong vênh. Đối với thiết lập của tôi, một màu xanh nhạt sẽ là điều.

Sau khi thử nghiệm nhiều hơn và lỗi, có vẻ như hidenodata là chìa khóa. Tôi không biết tại sao các công cụ này được ghi lại tối thiểu. Đây là những gì làm việc cho tôi, gdal 1.8.

gdalbuildvrt test.vrt -vrtnodata "209 231 245" -hidenodata BX*.tif BY*.tif
gdal2tiles -p raster -s nztm.prj test.vrt out

cũng xem tiện ích gdal nearblack gdal.org/programs/gầnblack.html , chỉ xử lý các pixel xung quanh rìa của hình ảnh và bỏ qua phần giữa
wilkie

0

Tôi không quá quen thuộc với GDAL, nhưng tôi đoán rằng một phương thức hoặc lệnh có sẵn trong đó bạn có thể đặt một pixel có giá trị nhất định với một giá trị khác?

Không có gì để làm với nó, nhưng trong SQL đơn giản giống như (chỉ để minh họa - đây là mã giả nhiều hơn nhiều):

CẬP NHẬT raster SET pixel = 255 WHERE pixel = NoData;

Tôi muốn biết câu trả lời!


GDAL bao gồm một số phương pháp để thay thế màu bằng các màu khác trong quá trình xử lý theo cách tương tự như mã giả của bạn và một tiện ích độc lập có tên là nearblack cho phép bạn dọn sạch các cạnh hình ảnh có chứa các thành phần nén và biến chúng thành màu trắng nếu muốn. Không ai trong số này làm việc tốt với khối lượng dữ liệu tôi đang làm việc cùng lúc đó.
JasonBirch
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.