Yeniden örneklenen bir ortofoto genel bakışının nodata alanını beyaz yapın mı?


9

Her biri tamamen veri ile doldurulmuş ortophoto görüntüleri bir dizi var, ama birlikte yerleştirildiğinde kapsama bir dikdörtgen oluşturmaz böylece nodata alanlar vardır.

MapGuide'da, bu nodata alanlarını beyaz olarak gösterebilmem gerekiyor, böylece kullanıcılarım yazdırırken siyah mürekkep harcamak zorunda kalmıyor.

Orijinal tam çözünürlüklü görüntüleri doğrudan görüntülediğim büyük ölçekte bu sorun değil. Haritanızın arka plan rengini beyaza ayarladım ve ortofoto olmayan alanların arka planı görüntüleniyor.

Performans için, tüm bu kaynak görüntüleri, aynı anda daha fazla orto fotoğrafın görülebildiği daha küçük ölçeklerde görüntülemek için yeniden örneklenmiş bir kompozit genel bakış görüntüsüyle birleştirebilmem gerekiyor.

Genel görünümü birleştirmek ve yeniden örneklemek için GDAL kullanmaya çalışıyorum, ancak varsayılan olarak, nodata alanlarında siyahla yeniden örneklenen kompozit GeoTIFF döşemesini oluşturduğu görülüyor ve MapGuide, siyahları renk rasterlerinde saydam olarak ayarlamama izin vermiyor.

İstediğimi verimli bir şekilde almamın bir yolu var mı?

GDAL kullanarak bulduğum yanıtı sağladım, ancak hem açık kaynak hem de tescilli diğer görüntü işleme yardımcı programları ve CBS uygulamalarını kullanarak çözümler görmek isterim.

Yanıtlar:


15

Bu sorunla başa çıkmanın en kolay yolu GDAL Sanal Formatını kullanmaktı . Bu biçim, tüm görüntü kümesini tek bir görüntü nesnesi olarak ele almamı ve göreceli olarak basit üç adımda dönüştürmemi sağladı.

Sanal Veri Kümesi Oluşturma

GDAL ( Tamas Szekeres'in GISInternals Windows ikili dosyaları ve OSGeo4W'nin son sürümleri dahil ), ilk sanal veri kümesini oluşturmak için kullanılabilecek gdalbuildvrt adlı bir yardımcı program içerir .

Bunu kullanmanın basit bir yolu, tüm resimlerinizi bir metin dosyasına eklemek ve daha sonra bu metin dosyasını gdalbuildvrt dosyasına girdi olarak kullanmaktır. İşte bir örnek (ikinci komutu tekrar bir satıra koymanız gerekir):

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

Bu, tüm GDAL işlemleri için tek bir görüntü olarak değerlendirebileceğiniz bir XML dosyası bırakır. Ayrıca dahili olarak nodatayı beyaz olarak temsil eder, ancak nodata tanımını ondan okunan araçlardan gizler.

Yeniden Örneklenen Genel Bakış Oluşturma

Daha sonra, genel bakış görüntüsünün yeniden örneklenmesini ve çıktısını alacaksınız. Bunu gdal_translate veya gdalwarp ile yapabilirsiniz . Bunlardan herhangi biri için, ortaya çıkan boyutun width * height * 3(8 bit bant sayısı) Bayt olacağını unutmayın . Bu 4 GB'den büyük olacaksa sözdiziminin çıktı olarak BigTIFF'i belirtmesi için GeoTIFF seçeneklerine bakmak isteyeceksiniz (-co "BIGTIFF = YES").

Gdal_translate için, kullanışlı gdalinfo komutunu kullanarak sanal görüntünün boyutlarını belirlemeniz gerekir . Dosyanızın çıktı genişliğini ve yüksekliğini piksel cinsinden belirlemek için bu boyutları alın ve her birini tutarlı bir faktöre bölün.

Komut şuna benzer görünecektir (bir satırda):

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

Gdalwarp için elde edilen piksel boyutunu bilmeniz gerekir; bu durumda .5 metre kullanıyorum. Ayrıca, yeniden örnekleme yöntemiyle de arama yapmak istersiniz. Ortofoto incelemeleri için cubicspline'ı tercih ediyorum. Daha yumuşak, ancak bunları tam çözünürlüğe kadar kullanmayacaksınız ve deneyimlerime göre, JPEG veya ECW gibi bir şey kullanıyorsanız daha sıkıştırılabilir bir görüntü oluşturuyor.

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

Bu yeniden örneklenen GeoTIFF genel bakışları için JPEG sıkıştırma seçeneklerini kullanmayı da düşünebilirsiniz; çıktı dosyasını ( Frank'e göre ) yalnızca marjinal bir performans cezası ile önemli ölçüde daraltır .

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

Genel Bakış

Ayrıca, dahili "piramitler" oluşturmak için elde edilen görüntü üzerinde kullanışlı gdaladdo komutunu çalıştırmak isteyeceksiniz , böylece tam görüntü boyutlarından daha düşük çözünürlük talepleri bir veri alt kümesiyle karşılanabilir. Performanstaki artış çoğu durumda disk alanından daha fazladır. Burada kullandığınız seviyelerle oynamak isteyeceksiniz; çok büyük görüntüler için bazılarını düşürebilirsiniz. Gdaladdo komutu şuna benzer:

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

En iyi performans için bu seviyeleri denemenizi öneririm. Uygulamanız için farklı bir yeniden örnekleme aralığının daha iyi olduğunu veya resim boyutunuza bağlı olarak, daha yüksek sayılardan bazılarını düşürebileceğinizi (veya daha fazlasının gerekli olduğunu) görebilirsiniz.

Ayrıca, harici bir genel bakış oluşturuyorsanız (-ro seçeneğini kullanarak) JPEG sıkıştırma yapılandırma satırlarını eklemeyi düşünün:

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

(Bunların gömülü genel bakışlar için üst GeoTIFF'den miras alındığına inanıyorum)

notlar

Bu sorunla karşılaştığımda, freenode.irc.net üzerindeki #gdal kanalında sordum. Bu inanılmaz bir kaynak ve bu konuda bana yardımcı oldukları için Howard Butler, Frank Warmerdam ve Even Rouault'a borçluyum.


Tamamladığınız için teşekkür ederiz, zaman ayırdığınız için teşekkür ederim ve eminim, sadece soruyu cevaplayan belirli bir biti değil, tüm iş akışını kapsama zamanı gelmişti.
matt wilkie

1
gdalsetnull.py'ın VRT'lerde çalışıp çalışmadığını görmek ilginç olacaktır , ardından "VRT dosyasını bir metin düzenleyicide düzenleyin, bir <NoDataValue /> varlık ekleyerek" gereksiz olur.
matt wilkie

1
@matt wilkie, bu site için kesinlikle biraz yeniden çalışma ve biçimlendirme oldu, ancak bunu daha önce blogumdaki daha büyük bir iş akışının bir parçası olarak ele aldım: jasonbirch.com/nodes/2009/08/11/290/fwtools- ftw-gdal Bu öneri kesinlikle denemeye değer!
JasonBirch

genel windows cmd notu: ^yürütüldüğünde birleştirilecek bir satır sonu için düzeltme işareti kullanın (örn. ^hem okunabilirliği hem de çalıştırılabilirliği korumak için yukarıdaki her kod satırı örneğinin sonuna ekleyin ). Önemli uyarı: tüm belleği tüketmek istemiyorsanız, bir dosyayı veya komut satırını bir caret ile asla sonlandırmayın
matt wilkie

3

Evet, ancak deneme yanılma yoluyla -vrtnodata 255'in beyaz olan her şeyi sadece haritadan değil, bir nodata olarak işaretleme etkisi olduğunu , gdal2tiles'ın -a bayrağına göre alfa saydamlığıyla muamele ettiğini belirleyebildim.

Sonuçta kaynak görüntünüzün bir kısmını saydam olarak ayarladınız, benim durumumda kesik yolların beyaz kısımları. Bu terminal değil, ancak vdal'daki orijinal boşlukların bir sonucu olarak veya çözgü sonucu gdal2tiles'a "src görüntüsü yok" rengini belirtebileceğinizden emin olabilirsiniz. Benim setim için soluk mavi bir ton sadece bir şey olurdu.

Hatta daha fazla deneme yanılma hidenodata anahtarı gibi görünüyor. Bu araçların neden bu kadar minimal belgelendiğini bilmiyorum. Benim için işe yarayan heres, gdal 1.8.

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

Ayrıca gdal bkz nearblack yardımcı gdal.org/programs/nearblack.html , görüntünün kenarından etrafında sadece muamele piksel ve orta göz ardı
mat Wilkie

0

GDAL ile çok aşina değilim, ama başka bir değer ile belirli bir değer bir piksel ayarlayabilirsiniz nerede bir yöntem veya komut kullanılabilir sanırım?

Bununla bir ilgisi yok, ama düz SQL'de böyle bir şey (sadece göstermek için - bu çok daha sahte bir kod):

GÜNCELLEME raster SET piksel = 255 NEREDE piksel = NoData;

Cevabı bilmek istiyorum!


GDAL, işlem sırasında sahte kodunuza benzer bir şekilde renkleri diğer renklerle değiştirmek için çeşitli yöntemler ve sıkıştırma yapaylıkları içeren görüntü kenarlarını temizlemenizi ve isterseniz beyaza dönüştürmenizi sağlayan nearblack adlı bağımsız bir yardımcı program içerir. Bunların hiçbiri o sırada çalıştığım veri hacmiyle iyi çalışmadı.
JasonBirch
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.