Daha çox

Landsat Verilərindən Buludun çıxarılması

Landsat Verilərindən Buludun çıxarılması


Landsat 5,7 və 8 verilərindən buludları silməyə çalışıram. Bunu ArcGIS-dən qaçaraq yalnız açıq mənbə seçimlərindən istifadə edərək etməyə çalışıram. Python ilə tanışam və QGIS təcrübəm var. Əvvəlcə QGIS-də Yarı Avtomatik Təsnifat modelindən istifadə etməyə çalışırdım, amma bu mənə çox problem verir və hər zaman faktiki təsnifat vermir (çox vaxt yalnız bərabər qiymətləndirilmiş kvadrat qaytarır ...). Kimsə məni daha yaxşı bir seçim istiqamətində göstərə bilərmi?


Bir nəzər salmağı təklif edə bilərəm maska Zhe Zhu tərəfindən

Con:

  • nə Python, nə də QGIS

Pros:

  • matlab və ya C icra edilə bilən kimi mövcuddur
  • bulud kölgələri ilə yanaşı buludları aşkarlamaqda da böyük bir performans
  • düz istifadə

Bir sınamağı tövsiyə edirəm. İcra olunan sənədləri linklərdən əldə etmək mümkündür və bu günə qədər komandamız pulsuz paylanan üstün bir məhsul tapmadı.


Aşağıdakı kodu istifadə edərək Landsat 8 səhnələrində bulud piksellərini müəyyənləşdirə bildim. Aşağıda mümkün bulud piksellərini qaytaracaq bəzi python / pseudo-kod əlavə etdim. Zhu and Woodcock (2014) tərəfindən bu sənəddən götürülmüş potensial bulud təbəqəsinin müəyyənləşdirilməsinin ilk keçidi.

Kağız ayrıca, xaric edilmiş səhv müəyyən edilmiş bulud pikselləri ilə nəticəni daha da dəqiqləşdirən ikinci bir keçidi də izah edir. Buna da baxmalısan. Metod Landsat 7 üçün hazırlanmışdır, buna görə bütün Landsat halları üçün işləməlidir.

def calc_ndsi (): green = get_green_band () swir = get_swir_band () return (green - swir) / (green + swir) def calc_ndvi (): nir = get_nir_band () red = get_red_band () return (nir - red) / ( nir + red) def calc_basic_test (): band_7_test = get_band_seven () temp_test = tempin 27 dərəcədən az olduğu yerdə ndsi_test = burada calc_ndsi <0.8 ndvi_test = burada calc_ndvi <0.8 basic_test = np.logical_and.reduce ((band_7, , ndvi_test)) return basic_test def calc_whiteness (): mavi = mavi yaşıl almaq = yaşıl qırmızı almaq = qırmızı almaq orta_vis = (mavi + yaşıl + qırmızı) / 3 ağlıq = (np.abs ((mavi - orta_vis) / orta_vis) + np.abs ((yaşıl - orta_vis) / orta_vis) + np.abs ((qırmızı - orta_vis) / orta_vis)) ağlıq [np. burada (ağlıq> 1)] = 1 qayıdış ağlığı def calc_whiteness_test (): whiteness_test = where calc_whiteness () <0.7 return whiteness_test def calc_hot_test (): band = 'rtoa_' blue = get blue red = get red hot_test = (blue - 0.5 * red - 0.08)> 0 return hot_test def swirnir_test (): nir = get NIR sw ir = SWIR dönüşü alın (nir / swir)> 0.75 def calc_pcp (): return np.logical_and.reduce ((calc_basic_test (), calc_whiteness_test (), calc_hot_test (), swirnir_test ()))

Belə ki,calc_pcp ()şəkildəki potensial bulud piksellərini müəyyənləşdirəcəkdir.

Qeyd edək ki, bu metod hazırda işləməyən Landsat 8-də TIRS lentlərindən (temperatur almaq üçün) istifadə edir. Əlavə olaraq, bu metodda atmosfer düzəlişindən keçmiş məlumatlar istifadə olunur.

Uzaqdan algılama şəkillərində buludları müəyyənləşdirmək rəng işləmə problemindən daha çoxdur, baxmayaraq ki buludun 'ağlığını' hesablamaq testə daxil edilmişdir.

Aldığınız nəticələri Landsat 8 Quality Assessment bandı ilə müqayisə etməlisiniz.


Bu həlli sınaya bilərsiniz:

İmtina

Daha əvvəl heç bulud məlumatlarını silməmişəm.

Rəy:

Bir rəng işləmə problemi kimi görünür: buludlar ağ-boz rənglidir. Torpaq təyyarənizdə qar və ya digər böyük ağ cisimlər olmadığı müddətdə tam qırmızı və tam yaşıl və tam mavi rənglərə sahib olma meyarlarına uyğun bütün piksellər üçün axtarış apara bilərsiniz. bunu necə edəcəyinizə dair ... yuxarıda göstərilən həlli sınayın.


bu səhifəyə baxın http://gistack.rozblog.com/post/32/qa_cloudmask_ports.html bu səhifənin altındakı bir erdas xəyal modelini yükləyə bilərsiniz, landsat8 QA bandını alır və bulud piksel dəyərlərini 0 ilə əvəz edir


Videoya baxın: Cloud Masking, Image Mosaic, and Land Cover Change Location