Tworzysz plik kształtu pokazujący ślady Rastersów?

33

Mam około 1000 zdjęć satelitarnych w formacie tiff i chcę utworzyć plik shapefile, który posłuży jako indeks dla rastrów. Jest to coś podobnego do katalogu rastrowego, ale nie chcę budować katalogu rastrowego.

Niektóre przeszkody, które mogę dostrzec, to to, że obraz jest georefrencjonowany, więc nie mają kształtu prostokątnego (mówię o obszarze danych).

Aby to wyjaśnić, wymagam, aby wielokąt pokrywał tylko niezerowe (lub non-węzłowe) piksele rastra, a nie cały prostokątny raster. Większość dotychczasowych odpowiedzi podaje prostokątny wielokąt, który obejmuje dane, a także piksele niebędące danymi.

Mój obraz Przykładowy obraz satelitarny


Wynik podany przez narzędzia, które sprawdziłem (takie jak raster catlog, różne Arcscripts, niestandardowy skrypt Pythona podany w jednej z odpowiedzi): Wynik


Wynik, który chcę: wprowadź opis zdjęcia tutaj

Devdatta Tengshe
źródło
4
Wydaje się, że utworzenie katalogu rastrowego, nawet tymczasowo, byłoby dobrym rozwiązaniem do tworzenia śladów. Możesz utworzyć katalog, który nie jest zarządzany, który tworzy tabelę referencji, ale pozostawia obrazy w swojej lokalizacji na serwerze. Wykonanie importu wsadowego rastrów do katalogu jest łatwe i stosunkowo szybkie. Po utworzeniu możesz wyeksportować ślady do nowej klasy obiektów i usunąć katalog rastrowy. Może to być tak szybkie, jak inne opcje.
Uzyskaj Spatial
2
Zbiór danych mozaiki tworzy również ślad obrazu.
Roy,
zestaw danych mozaikowych jest właściwą drogą. Bardzo łatwe do osiągnięcia
Brad Nesom,
Czy na ostatnim zdjęciu piksele znajdują się poza czerwonym polem NoData lub 0? Jeśli mają wartość 0, czy w żądanym obszarze znajdują się piksele, które również mają wartość 0?
Chad Cooper
1
Piksele poza czerwoną ramką to nodata; Jednak moje dane wielospektralne mają 0,0,0 jako wartości RGB dla obszarów nodata. W obu przypadkach w wymaganym obszarze nie ma pikseli o wartości 0.
Devdatta Tengshe,

Odpowiedzi:

15

W QGIS znajduje się wtyczka o nazwie Image Boundary . To świetne narzędzie. W tym narzędziu dostępna jest opcja „Poprawnych pikseli”, która na przykład pominie czarne krawędzie obrazu satelitarnego.

Ryan Garnett
źródło
Ta wtyczka twierdzi, że robi to, co chciałem, ale nie działa na obrazie, z którym eksperymentowałem. Spróbuję jutro z prawdziwymi danymi.
Devdatta Tengshe,
Odkryłem, że ta wtyczka działa bardzo dobrze z danymi wielospektralnymi, ale czasami daje dziwne wyniki z jednopasmowymi obrazami pancromatycznymi.
Devdatta Tengshe,
2
Zgadzam się, że granica obrazu QGIS działa najlepiej, ale czy istnieje narzędzie do robienia tego w przypadku plików wektorowych, w których nie potrzebujemy „ramki granicznej” lub „śladu”, ale wielokąt obrysowujący, gdzie istnieją dane.
GeorgeC
Narzędzia do obramowania obrazu są świetne, jednak podany przez Ciebie link to 404. Sądzę, że narzędzia są nadal dostępne, jeśli zezwolisz na eksperymentalne wtyczki w ustawieniach wtyczek. Być może skorzystasz z tego linku ?: github.com/lmotta/imagefootprint_plugin
Aaron
Czy istnieje dokumentacja dotycząca korzystania z Image Boundary?
Loonuh
9

Poniższy kod weźmie wejściowy raster, uzyska jego zasięg i wstawi ten zasięg do klasy obiektów wielokąta:

import arcpy

r = arcpy.Raster(in_raster)
point = arcpy.Point()
array = arcpy.Array()

corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]

cursor = arcpy.InsertCursor(fc)
feat = cursor.newRow()
for corner in corners:    
    point.X = getattr(r.extent, "%s" % corner).X
    point.Y = getattr(r.extent, "%s" % corner).Y
    array.add(point)
array.add(array.getObject(0))
print len(array)
polygon = arcpy.Polygon(array)
feat.shape = polygon
cursor.insertRow(feat)
array.removeAll()
del feat
del cursor

Możesz uruchomić go w oknie ArcMap Python, konfigurując in_rasteri fctak:

>>> fc = 'r_extent'
>>> in_raster = 'CaliCoast10mNED_HavCurvedPCS'

gdzie r_extentjest istniejąca klasa cech wielokąta. Następnie po prostu skopiuj kod i uruchom go. Rozumiem:

wprowadź opis zdjęcia tutaj

Chad Cooper
źródło
1
Używam powyższego kodu, aby zrobić to samo dla folderu: gist.github.com/4162013
jeb
7

Możesz użyć gdaltindex do tego: http://www.gdal.org/gdaltindex.html

Nadal jednak będzie tworzyć prostokąty (np. 4 + 1 punkty) w tym samym systemie odniesienia co obrazy. Ale zastanawiam się, czy to naprawdę jest problem: jak duże są twoje zdjęcia?

johanvdw
źródło
Problem z gdaltindex polega na tym, że tworzy prostokątny wielokąt dla każdego obrazu. Interesują mnie tylko niezerowe piksele
Devdatta Tengshe
4

Próbowałem narzędzia „Image Boundary” w QGIS, ale nie działa z niektórymi rastrami.

Inna opcja, która zadziałała dla mnie to: - 1. Konwertuj raster wejściowy na pojedynczy numer cyfrowy za pomocą narzędzia wiersza polecenia gdal_translate.

gdal_translate -co compress = lzw -b 1 -ot byte -scale 1 1 inp.tif out.tif

Spowoduje to utworzenie rastra z wartościami 1 wszędzie inp.tif miał niezerowe wartości.

  1. Następnie w ArcMap możesz użyć narzędzia „raster to polygon”, aby uzyskać wielokąt (plik kształtu).

Wyjściowy plik kształtów będzie miał nie-czworoboczne granice, z wieloma wierzchołkami wielokąta, zgodnie z rzeczywistą granicą obrazu.

użytkownik3294041
źródło
3

Jeśli jesteś zainteresowany rozwiązaniem skryptowym, wypróbuj polecenie gdal nearblack . Możesz użyć flagi -białej, aby pobrać dane ograniczone również spacją. Możesz poligonizować dane wyjściowe, aby wygenerować nieprostokątny ślad danych rastrowych.

##run nearblack
shellcmds = "nearblack -white -o " + outpath + " " + inpath
os.system(shellcmds)

##run polygonize
shellcmds = "gdal_polygonize.py " + outpath + " -f" + """ "ESRI Shapefile"  """ + outpath2 + " nearblack"
os.system(shellcmds)
jsta
źródło
1

Wierzę, że w świecie ArcGIS można to osiągnąć za pomocą narzędzia 3D Analyst \ Conversion \ From Raster \ Raster Domain .

Tomek
źródło
Działa tylko na danych 3D i nawet wtedy nie daje oczekiwanych rezultatów. W ogóle nie działa z obrazami satelitarnymi.
Devdatta Tengshe,
Tak to prawda. Pozostawię odpowiedź innym, aby być tego świadomym.
Tomek
0

W ArcGIS 3D Analyst znajduje się narzędzie o nazwie Raster Domain, które tworzy ślad wielokąta lub polilinii części danych zestawu danych rastrowych - i ignoruje komórki NoData. Działa świetnie dla mnie.

joey
źródło
1
Witamy na naszej stronie! Czy możesz wyjaśnić, jak Twoja odpowiedź różni się od odpowiedzi Tomka?
whuber
Domena Raster działała dla mnie - dziękuję za pomoc!
meryloo
0

Możesz utworzyć katalog rastrowy z przypisanym odniesieniem przestrzennym, dodać katalog rastrowy do ArcMap, a następnie „Eksportować ślad”. Pamiętaj, że istnieje możliwość utworzenia katalogu rastrowego „NIEZARZĄDZANY”, aby nie tworzyć duplikatów każdego zestawu danych rastrowych.

nhunsaker
źródło