Mam ortoobraz obrazu RGB, który ma czarny obszar zamiast NoData, jak pokazano tutaj:
Kiedy korzystam z narzędzia SetNull, usuwa czarny obszar, jednak następnie zamienia go w ortoobraz obrazu w skali szarości, co nie jest tym, czego chcę.
Wiem, że można to obejść za pomocą narzędzia Clip (Zarządzanie danymi), aby przyciąć raster do siebie, i tam można ustawić wartość NoData na wartość czarnych komórek (0). Jednak tworzę warsztaty dla studentów i chciałbym zastosować metodę mniej intuicyjną.
Istnieje oczywiście opcja uruchomienia narzędzia NoData dla każdego pasma osobno, a następnie połączenia trzech pasm razem, jednak muszę mieć warunek, w którym pasmo 1, pasmo 2 i pasmo 3 są równe 0, aby ustawić je jako NoData. Idealna byłaby możliwość wykonania tego w ModelBuilder, ale dobrze byłoby też napisać skrypt za pomocą ArcPy.
Korzystam z ArcGIS 10.2 Desktop z licencją zaawansowaną.
źródło
Odpowiedzi:
Co chcesz zrobić, to ustawić właściwości rastra w skrypcie lub zmienić go ręcznie w ArcCatalog. Nie stworzy to nowego rastra ani nawet nie potrwa długo.
W pythonie jest to trochę trudne:
Ponieważ nodata znajduje się daleko na liście, łatwiej mi to określić; parametry to Wartość pasma; Wartość pasma; ... aż wszystkie pasma zostaną zaadresowane. Jeśli prawdopodobnie masz więcej pasm (lub mniej) w tym samym folderze, będziesz musiał użyć arcpy.Describe i właściwości bandCount, aby ustawić wartość null dla prawidłowej liczby pasm:
W ArcCatalog kliknij warstwę prawym przyciskiem myszy i przejdź do właściwości:
naciśnij przycisk edycji:
Wprowadź wartości, a następnie naciśnij OK, aby zamknąć edytor NoData i OK, aby wymusić zmianę.
Teraz raster nie wyświetli nic w ArcMap, gdzie wartość komórki wynosi 0,0,0.
źródło
Jeśli przejdziesz do właściwości rastra i jeśli symbolika jest ustawiona jako kompozyt RGB (jak się wydaje), możesz zaznaczyć pole Wyświetlaj wartości tła (RGB) i ustawić dowolne puste tło. Więc po prostu ustaw 0 0 0 jako wartość tła i powinieneś być w biznesie.
źródło
Myślę, że najłatwiejszym sposobem na osiągnięcie tego byłoby utworzenie rastra warunku zerowego, a następnie użycie tego rastra do przypisania wartości NoData do każdego pasma osobno.
Spróbuj uruchomić funkcję Con stworzyć raster stan zerowy.
Następnie użyj rastru warunek zerowy, aby przypisać wartości NoData do każdego pasma za pomocą ustawionej funkcji zerowej . Powinieneś być w stanie to zrobić za pomocą konstruktora modeli lub Pythona.
źródło
Wierzę, że możesz użyć drzewa różnych procedur, które teoretycznie powinny zadziałać. Kalkulator rastrowy, w którym można użyć tego wyrażenia
SETNULL([raster] == value, [raster])
Ponownie sklasyfikuj, w którym miejscu należy przeklasyfikować tylko żądaną wartość. Za pomocą ArcPy możesz użyć skryptu, który znalazłem tutaj https://gis.stackexchange.com/a/24578/47790źródło