Lebih

Bagaimana cara memotong gambar Geotiff di C++ (GDAL atau kemungkinan lain)?


Saya sedang mengembangkan kode untuk memproses gambar geotiff. Tapi pertama-tama saya perlu memotong gambar geotiff yang mempertahankan metadatanya (proyeksi… ) di C++. Ide saya adalah memberikan sudut dan gambar geotiff ke fungsi di dalam kode dan kemudian mengembalikan subset. Saya berpikir untuk menggunakan GDAL tetapi saya tidak tahu apakah ada kode atau fungsi.

Ada yang tahu tentang ini?


Anda bisa melakukan ini dengan cukup mudah di C++. Cara saya melakukannya adalah dengan mengirim jalur file yang ingin Anda pangkas, jalur raster keluaran/yang dipangkas, koordinat kiri atas dari raster yang dipangkas dan lebar dan tinggi raster yang dipangkas. Garis besar untuk kode Anda bisa terlihat seperti ini…

void crop(const char *inputPath, const char *cropPath, double topLeftX, double topLeftY, lebar ganda, tinggi ganda) { GDALDataset *pInputRaster, *pCroppedRaster; GDALDriver *pDriver; pDriver = GDALGetDriverManager->getDriverByName("Nama driver anda disini"); pInputRaster = (GDALDataset*) GDALOpen(inputPath, GA_ReadOnly); //informasi transformasi affine, Anda perlu menyesuaikan ini dengan benar //menampilkan transformasi ganda raster terpotong[6]; pInputRaster->getGeoTransform(transform); //sesuaikan koordinat kiri atas transform[0] = topLeftX; mengubah[3] = topLeftY; //menentukan dimensi raster baru (dipotong) dalam sel int xSize = round(width/transform[1]); int ySize = bulat(tinggi/transformasi[1]); //membuat dataset baru (dipotong) pCroppedRaster = pDriver->Create(cropPath, xSize, ySize, 1, GDT_Float32, NULL) //atau yang serupa //sekarang yang harus Anda lakukan adalah menemukan jumlah kolom dan baris pojok kiri atas // dari raster yang di-crop jika diimbangi dari raster asli, dan gunakan nilai-nilai tersebut untuk //membaca data dari raster asli dan menyalin/menulis data ke raster baru (cropped) }

Seharusnya cukup mudah untuk menyalin proyeksi dari raster input ke raster yang dipotong. Saya biasanya tidak khawatir tentang proyeksi ketika saya bekerja di GDAL. Namun, sangat penting untuk memastikan Anda melacak data transformasi affine. Jika raster Anda semuanya berada dalam proyeksi yang sama, data transformasi affine akan secara akurat menggambarkan lokasi spasial mereka relatif satu sama lain.


Anda selalu dapat memeriksa utilitas GDAL untuk mengetahui cara melakukannya. Misalnya, jika Anda hanya ingin "memotong" bagian gambar, Anda dapat menggunakangdal_translate -srcwin.

Cara paling sederhana adalah dengan memanggil gdal_translate (missistem()telepon, atau mungkinBuatProses()panggilan jika Anda menggunakan Windows). Jika tidak, Anda dapat membaca kode untuk gdal_translate.cpp untuk mengekstrak bit yang Anda butuhkan.

Jika kebutuhan Anda cukup sederhana, Anda mungkin dapat menggunakan fungsi RasterIO dua kali - sekali untuk membaca data, dan sekali lagi untuk menulis data. Contoh keduanya diberikan dalam tutorial GDAL API.


Terlepas dari gdal (lihat jawaban lain) dan membangun file virtual, Anda dapat menggunakan perpustakaan OTB. Ini adalah pustaka sumber terbuka C++ termasuk sekumpulan besar filter untuk pemrosesan gambar. Secara khusus, otb::MultiChannelExtractROI melakukan triknya. Ini juga tersedia sebagai aplikasi jika Anda ingin menggunakannya secara langsung.


Saya melakukan ini menggunakan python dan GDAL:

#Perhatian dengan -projwin ulx uly lrx lry (kiri atas (ymax, xmin) - kanan bawah (xmax, ymin)) command = "gdal_translate" + " "  "-of GTiff" + " "  "-ot Float64 " +  "-co kompres=LZW " +  "-projwin" + " " +  str(xmin) + " " +  str(ymax) + " " +  str(xmax) + " " +  str(ymin) + " " +  path_to_raster_tiff + " " +  output_path os.system(command)

http://gis-techniques.blogspot.com/2015/09/clip-raster-with-shapefile-using-c-and.html#.VfiVehFVhHw memiliki contoh cropping raster dengan fitur menggunakan C# dan Gdal. Semoga ini memberi Anda beberapa ide untuk menggunakan GDAL dengan C++ untuk memotong raster dengan bentuk.


Bagaimana cara memotong gambar ke proporsi tertentu di Photoshop?

Untuk referensi, saya menggunakan Photoshop CS5 Extended. Saya lebih suka menemukan cara untuk melakukan apa yang saya inginkan dalam perangkat lunak ini.

Saya sering ingin memotong gambar saya agar sesuai dengan proporsi tertentu (baik untuk pencetakan atau penggunaan online). Bahkan ketika saya menginginkan rasio 1,5:1 yang dihasilkan kamera saya secara default, jarang saya tidak ingin memotong beberapa elemen di tepi bingkai.

Saya tahu bahwa saya dapat menahan shift sambil menyesuaikan kotak tanam dari salah satu sudut, dan itu akan membatasi proporsi di sana. Tetapi apakah ada cara untuk mengatur proporsi tertentu untuk digunakan alat potong?

Saat ini, saya melalui proses yang cukup padat karya untuk mendapatkan "hampir benar" dan kemudian secara harfiah menghitung piksel untuk membuatnya benar.


2 Jawaban 2

Berikut adalah cara untuk mencapai apa yang Anda inginkan dengan ImageMagick. Semoga Anda nyaman menggunakan Terminal (dan juga menggunakan Homebrew untuk mengelola semua paket Anda).

Either way, Anda harus menginstal ImageMagick sehingga Anda dapat menjalankan baris perintah konversi di Terminal.

Buka folder yang Anda inginkan untuk memproses semua gambar secara batch. Jika nama folder Anda disebut gambar-gambar terletak di Desktop, Anda harus memasukkan cd

/Desktop/gambar/ di Terminal.

ImageMagick memiliki opsi bawaan untuk memotong gambar menurut ukuran dan koordinat. Perintahnya adalah:


1 Jawaban 1

Anda tidak dapat melakukannya dengan fungsi add_image_size() , setelah banyak meneliti dan menggali file inti, yang sebenarnya dilakukan oleh opsi Hard Crop dari fungsi add_image_size() adalah mengubah ukuran gambar menggunakan dimensi yang lebih rendah, lalu itu akan memotong ukuran yang ditentukan

dengan contoh jika Anda membuat ukuran gambar baru:

dan unggah gambar seperti ini:

itu akan mengubah ukuran gambar menggunakan tinggi 310 (karena adalah nilai yang lebih rendah) menjaga rasio aspek, seperti ini:

maka akan dilanjutkan dengan crop gambar menggunakan gambar yang sudah di resize, berdasarkan posisi yang dikirim atau default center , center , kotak merah yang tumpang tindih adalah ukuran 475, 310 dan merupakan area yang akan di crop :

mungkin terlihat seperti atas dan bawah tidak masalah, tapi itu karena gambar diubah ukurannya menggunakan tinggi , jika sebaliknya, lebar menjadi lebih rendah gambar akan tinggi dan kiri dan kanan akan terlihat seperti mereka tidak masalah.

Untuk mencapai apa yang Anda coba lakukan, Anda memerlukan plugin atau pengembang yang akan menambahkan kode yang diperlukan ke tema Anda, itu tidak dapat dilakukan sekarang dengan alat bawaan bawaan wordpress.


Gambar yang diambil menggunakan RaspiCam berhasil di-crop

Saya sedang mengerjakan proyek menggunakan model Raspberry Pi B dan modul kamera Raspberry Pi CSI (RaspiCam).

Masalahnya, area gambar yang diambil saat saya menggunakan raspicam_test yang di library raspicam versi 0.1.1 berbeda dengan saat saya menggunakan perintah raspistill. Gambar yang diambil dari raspicam_test dipotong dan diubah ukurannya. Ada ide untuk mengatasi ini?

Berikut adalah contoh gambar yang diambil

dan yang ini ketika saya menggunakan perintah raspistill


Instalasi

Velox harus bekerja pada semua sistem operasi utama (Linux, Mac OS, Windows).

Ketergantungan

Velox memerlukan paket rgdal, rgeos, dan sf, yang mengandalkan GDAL eksternal (>= 2.0.0), GEOS (>= 3.3.0), PROJ.4 (>= 4.8.0), dan UDUNITS. Di Debian/Ubuntu (>= 14.04), dependensi ini dapat diinstal dengan memasukkan

Paket R

Setelah dependensi sistem tersedia, Anda dapat menginstal velox dari CRAN

atau Anda dapat menginstal versi pengembangan menggunakan fungsi install_github dari paket devtools:

Harap dicatat bahwa halaman ini mengacu pada versi pengembangan paket.


Sertakan "ogr_api.h"

kompilasi dihentikan. makefile:179: resep untuk target 'areadinfmn.o' gagal make: *** [areadinfmn.o] Error 1

Linux: peringatan stream_reach_file: Pembuatan lapisan gagal.

StreamNet versi 5.3.8 File input stream_raster_grid.tif memiliki sistem koordinat geografis. Lari ini mungkin membutuhkan waktu 1 menit untuk diselesaikan. Perkiraan ini sangat mendekati. Waktu berjalan sangat tidak pasti karena tergantung pada kompleksitas input data dan kecepatan serta memori komputer. Perkiraan ini didasarkan pada pengujian kami pada PC dual quad core Dell Xeon E5405 2.0GHz dengan RAM 16GB. File input flow_dir_grid_d8.tif memiliki sistem koordinat geografis. File input berkontribusi_area_grid_d8.tif memiliki sistem koordinat geografis. File input elev.tif memiliki sistem koordinat geografis. Mengevaluasi jarak ke outlet Membuat link ERROR 10: Nama adalah NULL di OGR_DS_CreateLayer ERROR 10: Pointer 'hLayer' adalah NULL di 'OGR_L_CreateField'.

peringatan stream_reach_file: Pembuatan lapisan gagal.

Kesalahan R6034

Dear all, saya mencoba menggunakan TauDEM sebelum memulai dengan alat lain, seperti SedinConnect. Saya menggunakan arcGIS 10.2.1 di atas windows 10. Saya menginstal semua alat yang ditunjukkan di halaman unduhan, tercantum di sini: GDAL 201 untuk PC Windows 64 bit GDAL 2.1.0 untuk Python 2.7 Microsoft MPI v7.1 Microsoft Visual C++ 2015 Dapat Didistribusikan Ulang Package (x86) Microsoft Visual C++ 2015 Redistributable Package (x64) Saya menginstal Microsoft MPI v7.1 dengan menjalankan sebagai administrator dari menu kontekstual. Mengikuti saran dari orang-orang SedInConnect (https://github.com/HydrogeomorphologyTools/SedInConnect_2.3/blob/master/Guidelines_tools_stand-alone.docx), saya mengubah UAC (Kontrol Akun Pengguna) ke nilai terendah untuk mencegah Windows memblokir kegiatan MPI. Saya menginstal TauDEM 5.3.7 dengan menjalankan sebagai administrator dari menu kontekstual. Saya menginstal kotak alat arcGIS dan mencoba menjalankan pitremove dari sana. Saya mendapatkan kesalahan R6034:

Dan ERROR 000732 dalam dialog penghapusan arcGIS pit, yang tidak dapat menghitung statistik dalam file yang saya masukkan sebagai output. Saya mencoba menjalankan dari baris perintah, baik dengan menggunakan command prompt dan bash GIT saya: mpiexec -n 8 pitremove -z "./FromENVI/S36W072_73_DEM_RBB_UTM18S.tif" -fel "./FromTauDEM/RBB.tif"

Dan saya mendapatkan kesalahan yang sama R6034.

Saya tidak tahu harus berbuat apa. Saya akan menghargai bantuan Anda, Violeta

SetRegion.cpp gagal dikompilasi di Ubuntu

Saya mencoba mengkompilasi TauDEM di Ubuntu Xenial, dan setelah dibuat, saya mendapatkan kesalahan ini:

Sunting: Saya menggunakan cabang Kembangkan dari git.

Nilai nodata aread8 dalam versi 5.3.8

Pertama-tama, ini adalah perangkat lunak yang sangat berguna.

Kami telah menggunakan ini untuk banyak akumulasi parameter mengikuti grid arah aliran. Baru-baru ini, kami memiliki beberapa perilaku aneh dengan versi 5.3.8. Wilayah kisi pembobotan dengan nilai -1 dikembalikan dalam kisi akumulasi keluaran sebagai area nodata. Saya pikir ini karena -1 sulit dikodekan ke aread8 sebagai nilai nodata. Saya akan menempelkan beberapa tangkapan layar dan deskripsi di bawah ini. Mungkin ini terkait dengan #203 atau telah diperbaiki di v5.3.9? Saya hanya berhasil mendapatkan v5.3.8 untuk dikompilasi di linux/HPC.

Kisi parameter terakumulasi dengan -1 area ditampilkan sebagai nodata:

Ketika saya mengonversi -1 menjadi float, -0,01, masalahnya hilang.

Berikut adalah cuplikan dari apa yang mungkin merupakan kode yang menyinggung. Saya tidak tahu c++ jadi saya mungkin jauh dari sini.

Akan sangat bagus jika nilai nodata keluaran tidak dikodekan secara keras dan sebaliknya memiliki nilai yang sama dengan nilai nodata yang ditetapkan sebagai nilai nodata dari kisi pembobotan masukan (jika ditentukan dengan benar).

Sekali lagi, ini adalah perangkat lunak yang sangat hebat dan telah menghemat banyak waktu.

Integrasi Algoritma Arah Aliran yang Dipercepat

Halo Dr. Tarboton, Apakah ada minat untuk mengintegrasikan algoritma arah aliran yang dipercepat yang dikembangkan oleh Survila et al (2016) ke dalam repositori ini? Jika demikian, saya yakin algoritma O(n) yang dipercepat sudah diimplementasikan pada repositori CyberGIS dengan sedikit modifikasi di dalam fork untuk memungkinkan kompilasi. Saya akan dengan senang hati mencoba membantu mengintegrasikan ini jika diinginkan karena banyak digunakan di NWC dalam repositori Cahaba.


Elemen

Semua elemen kanvas baru perlu mengimplementasikan antarmuka Canvas::Element (elemen baru juga dapat mensubklasifikasikan elemen yang ada, misalnya melihat implementasi elemen Peta dan Jendela($FG_SRC/Canvas), sistem kanvas saat ini mendukung primitif berikut (lihat $SG_SRC/kanvas/elemen):

  • KanvasGrup - elemen utama: untuk pengelompokan (sekelompok primitif kanvas sewenang-wenang, termasuk kelompok lain)
  • CanvasText - untuk merender teks (dipetakan ke osgText)
  • CanvasPath - untuk merender grafik vektor (dipetakan ke OpenVG, saat ini juga digunakan untuk merender SVG ke dalam grup)
  • KanvasPeta - untuk merender peta (proyeksi otomatis koordinat geografis ke koordinat layar, subkelas grup)
  • CanvasImage - untuk merender gambar raster (dipetakan ke osg::Image)
  • CanvasWindow - ini adalah bagian dari $FG_SRC/Canvas/Window.?xx, ini adalah subkelas CanvasImage, digunakan untuk mengimplementasikan windows (per 05/2014 juga dapat ditemukan di simgear)

Sebagian besar fitur pengguna akhir dapat didekomposisi menjadi komponen tingkat rendah yang perlu tersedia untuk mengimplementasikan fitur yang sesuai di ruang pengguna.

Dengan demikian, sistem kanvas didasarkan pada beberapa mode rendering, masing-masing mendukung primitif yang berbeda - masing-masing mode tersebut diimplementasikan sebagai apa yang disebut "Elemen Kanvas", yang merupakan subpohon yang dikendalikan pohon properti dari tekstur kanvas menggunakan nama tertentu. , yang mendukung acara dan pemberitahuan tertentu.

Menurut filosofi pengembangan yang diuraikan di atas, Anda jelas tidak akan melihat elemen kanvas baru yang sangat spesifik untuk kasus penggunaan, seperti elemen "penglihatan malam" atau FLIR. Sebaliknya, apa yang lebih mungkin untuk didukung adalah blok bangunan tingkat yang lebih rendah untuk memungkinkan pengguna akhir membuat fitur tersebut, yaitu dengan menambahkan dukungan untuk menjalankan efek/shader khusus dan dengan merender tampilan pemandangan ke tekstur kanvas.


Pertanyaan 10. Kapan saya harus menggunakan ruang warna dan skema kompresi apa?

Karena kombinasi fleksibel data raster dengan sejumlah besar skema kompresi dan ruang warna yang berbeda, TIFF bisa sangat cocok untuk berbagai aplikasi. Berikut adalah contoh aplikasi yang paling populer atau umum.

AplikasiSkema kompresi dan ruang warna
Citra bilevel ragu-ragu atau sangat kompleksruang warna hitam dan putih
kompresi G3, G4, atau mungkin JBIG
Citra buatan dua tingkatruang warna hitam dan putih
kompresi G3 atau G4
Rentang normal skala abu-abu atau citra fotografi berwarna Jika kompresi lebih penting daripada kualitas
colorspace Skala abu-abu atau YCbCr(*)
kompresi JPEG(*)
Jika kualitas lebih penting daripada kompresi
colorspace Skala abu-abu, RGB, atau CIE L*a*b*
kompresi LZW atau Mengempis
Jika kualitas adalah yang paling penting
colorspace 16bit per channel atau bahkan floating point RGB, atau 16bit per channel CIE L*a*b*
kompresi LZW atau Mengempis
Rentang normal Skala abu-abu atau citra buatan berwarna Jika jumlah warna <=256
Palet colorspace akan paling cocok
kompresi LZW atau Mengempis
Jika jumlah warna >256
colorspace Skala abu-abu, RGB, atau CIE L*a*b*
kompresi LZW atau Mengempis
Rentang dinamis Skala abu-abu atau citra warnatitik mengambang ruang warna Skala abu-abu atau RGB
kompresi LZW atau Mengempis

(*) Ruang warna YCbCr dan skema kompresi JPEG secara de facto terkait. Selain menggunakan JPEG sebagai skema kompresi, menurut pendapat kami tidak ada alasan yang baik untuk menggunakan YCbCr.


Keberlanjutan Perangkat Lunak dalam Penginderaan Jauh

Oleh Robin Wilson, Geografi dan Lingkungan & Institut Simulasi Sistem Kompleks, Universitas Southampton.

Ini adalah artikel ketiga dari serangkaian artikel oleh Institute's Fellows, masing-masing mencakup bidang minat yang berhubungan langsung dengan pekerjaan mereka sendiri dan masalah yang lebih luas tentang peran perangkat lunak dalam penelitian.

1. Apa itu penginderaan jauh?

Penginderaan jauh secara luas mengacu pada perolehan informasi tentang suatu objek dari jarak jauh (yaitu, tanpa kontak fisik). Bidang akademik penginderaan jauh, bagaimanapun, umumnya difokuskan pada memperoleh informasi tentang Bumi (atau benda planet lainnya) menggunakan pengukuran radiasi elektromagnetik yang diambil dari sensor udara atau satelit. Pengukuran ini biasanya diperoleh dalam bentuk gambar besar, sering kali berisi pengukuran di sejumlah bagian spektrum elektromagnetik yang berbeda (misalnya, dalam warna biru, hijau, merah, dan inframerah-dekat), yang dikenal sebagai pita gelombang. Gambar-gambar ini dapat diproses untuk menghasilkan sejumlah besar informasi berguna termasuk tutupan lahan, ketinggian, kesehatan tanaman, kualitas udara, CO2 tingkat, jenis batuan dan banyak lagi, yang dapat dipetakan dengan mudah di area yang luas. Pengukuran ini sekarang banyak digunakan secara operasional untuk segala hal mulai dari penilaian perubahan iklim (IPCC, 2007) hingga pemantauan penghancuran desa-desa di Darfur (Marx dan Loboda, 2013) dan deforestasi hutan hujan Amazon (Kerr dan Ostrovsky, 2003).

Gambar 1: Citra Landsat 8 dari Southampton, Inggris ditampilkan sebagai komposit warna palsu menggunakan pita Near-Infrared, Red dan Green. Vegetasi berwarna merah cerah, padang rumput dan tanah terbuka berwarna krem/coklat, daerah perkotaan berwarna biru muda, dan air berwarna biru tua.

Bidang, yang melintasi disiplin tradisional fisika, komputasi, ilmu lingkungan dan geografi, berkembang dari pekerjaan interpretasi foto udara selama Perang Dunia II, dan berkembang pesat selama bagian awal zaman ruang angkasa. Peluncuran satelit Landsat pertama pada tahun 1972 memberikan gambar resolusi tinggi dari sebagian besar Bumi untuk pertama kalinya, menghasilkan gambar berulang dari lokasi yang sama setiap 16 hari pada resolusi 60m. Dalam hal ini, resolusi mengacu pada tingkat detail, dengan gambar beresolusi 60m berisi pengukuran untuk setiap area 60x60m di lapangan. Sejak itu, ratusan satelit Observasi Bumi lebih lanjut telah diluncurkan yang melakukan pengukuran dalam panjang gelombang dari ultra-violet hingga microwave pada resolusi mulai dari 50km hingga 40cm. Salah satu peluncuran terbaru adalah Landsat 8, yang akan menyumbangkan lebih banyak data ke rekaman gambar yang tak terputus dari sensor serupa yang diperoleh sejak 1972, sekarang pada resolusi 30m dan dengan sensor kualitas yang jauh lebih tinggi. Seluruh arsip gambar Landsat sekarang tersedia secara bebas untuk semua orang - seperti banyak gambar lain dari organisasi seperti NASA dan ESA - jauh berbeda dari hari-hari ketika satu gambar Landsat berharga beberapa ribu dolar.

2. Anda harus menggunakan perangkat lunak

Mengingat bahwa data penginderaan jauh hampir selalu disediakan sebagai gambar digital, penting untuk menggunakan perangkat lunak untuk memprosesnya. Hal ini sering kali sulit dilakukan dengan terbatasnya kemampuan penyimpanan dan pemrosesan komputer pada tahun 1960-an dan 1970-an - memang, rangkaian satelit mata-mata Corona yang dioperasikan oleh Amerika Serikat dari tahun 1959 hingga 1972 menggunakan film fotografi yang kemudian dikirim kembali ke Bumi dalam bentuk khusus ' kendaraan masuk kembali' dan kemudian dikembangkan dan diproses seperti foto liburan standar!

Namun, semua program penginderaan jauh sipil mentransmisikan data mereka ke stasiun bumi di Bumi dalam bentuk gambar digital, yang kemudian memerlukan pemrosesan oleh operator satelit (untuk melakukan beberapa koreksi geometrik dan radiometrik dasar dari data) dan pengguna akhir. (untuk melakukan analisis apa pun yang mereka inginkan dari gambar).

Pada hari-hari awal penginderaan jauh, komputer bahkan tidak memiliki kemampuan untuk menampilkan gambar di layar, dan perangkat lunak yang tersedia sangat terbatas (lihat Gambar 2a). Saat ini peneliti penginderaan jauh menggunakan berbagai perangkat lunak berpemilik dan sumber terbuka, yang dapat dibagi menjadi empat kategori utama:

Spesialis perangkat lunak pengolah gambar penginderaan jauh, seperti ENVI, Erdas IMAGINE, eCogniton, Opticks, dan Monteverdi

Perangkat lunak Sistem Informasi Geografis yang menyediakan beberapa fungsi pemrosesan penginderaan jauh, seperti ArcGIS, IDRISI, QGIS dan GRASS

Perangkat lunak penginderaan jauh spesialis lainnya, seperti SAMS untuk memproses data spektral, SPECCHIO untuk menyimpan data spektral dengan metadata, DART (Gastellu-Etchegorry et al., 1996) untuk mensimulasikan citra satelit dan banyak model numerik termasuk 6S (Vermote et al., 1997), PROSPEK dan SAIL (Jacquemoud, 1993).

Perangkat lunak ilmiah umum, termasuk alat pemrosesan data numerik, paket statistik, dan paket plot.

Gambar 2: Pengolahan citra penginderaan jauh pada awal 1970-an (a) dan 2013 (b). Gambar tahun 1970-an menunjukkan satu set kartu berlubang dan cetakan 'seni ASCII' dari gambar Landsat Italia Selatan, yang diproduksi oleh E. J. Milton sebagai bagian dari PhD-nya. Gambar 2013 menunjukkan perangkat lunak ENVI melihat gambar Landsat 8 Southampton pada PC Windows

Saya mensurvei sekitar empat puluh orang di Pertemuan Mahasiswa Tahunan Perkumpulan Penginderaan Jauh dan Fotogrametri 2013 untuk mengetahui bagaimana mereka menggunakan perangkat lunak dalam penelitian mereka, dan ini menghasilkan daftar 19 perangkat lunak khusus yang secara teratur digunakan oleh para peserta, dengan beberapa responden individu secara teratur menggunakan lebih dari sepuluh alat khusus.

Keputusan tentang perangkat lunak mana yang akan digunakan seringkali didasarkan pada pengalaman yang diperoleh melalui kursus tingkat universitas. Misalnya, University of Southampton menggunakan ENVI dan ArcGIS sebagai perangkat lunak utama di sebagian besar program penginderaan jauh dan GIS sarjana dan MSc, dan banyak mahasiswanya akan terus menggunakan alat ini secara signifikan selama sisa karir mereka. Karena jumlah waktu pengajaran yang terbatas, banyak kursus yang hanya mencakup satu atau dua perangkat lunak khusus, sehingga membuat siswa kurang terpapar dengan berbagai alat yang tersedia di lapangan. Selalu ada bahaya bahwa siswa akan mempelajari alat itu daripada konsep umum yang akan memungkinkan mereka untuk menerapkan pengetahuan mereka ke perangkat lunak apa pun yang mungkin perlu mereka gunakan di masa depan.

Saya terlibat dalam mengajar kursus yang disebut Keterampilan Praktis dalam Penginderaan Jauh sebagai bagian dari MSc dalam Penginderaan Jauh Terapan dan GIS di University of Southampton yang mencoba untuk menantang ini, dengan memperkenalkan siswa ke berbagai perangkat lunak berpemilik dan sumber terbuka yang digunakan dalam penginderaan jauh, khususnya perangkat lunak yang melakukan tugas lebih khusus daripada ENVI dan ArcGIS. Umpan balik mahasiswa menunjukkan bahwa mereka menganggap ini sangat berguna, dan banyak yang melanjutkan untuk menggunakan berbagai perangkat lunak dalam proyek disertasi mereka.

2.1 Perangkat Lunak Sumber Terbuka

Dalam dekade terakhir telah terjadi pertumbuhan besar dalam perangkat lunak GIS open-source, dengan perkembangan pesat dalam alat-alat seperti GIS (layar GIS dan lingkungan pengeditan dengan antarmuka yang mirip dengan ArcGIS) dan GRASS (sistem geoproses yang menyediakan banyak fungsi untuk pemrosesan data geografis dan juga dapat diakses melalui SIG). Ramsey (2009) berpendapat bahwa awal pertumbuhan ini disebabkan oleh lambatnya reaksi vendor komersial terhadap pertumbuhan pemetaan online dan pengiriman data geospasial melalui internet, dan ini menciptakan ceruk untuk diisi oleh perangkat lunak sumber terbuka. Setelah memiliki pijakan di ceruk ini, perangkat lunak GIS open-source dapat menyebar lebih luas, terutama karena banyak perusahaan yang lebih kecil (dan karenanya lebih fleksibel) mulai merangkul teknologi GIS untuk pertama kalinya.

Sayangnya, perkembangan pesat dalam perangkat lunak GIS open-source belum tercermin dalam perangkat lunak pengolah citra penginderaan jauh. Sejumlah alat GIS open-source memiliki fungsionalitas penginderaan jauh khusus (misalnya, perintah i.* di GRASS), tetapi karena keseluruhan alat tidak terfokus pada pemrosesan gambar penginderaan jauh, mereka bisa lebih sulit digunakan daripada alat seperti ENVI . Alat pengolah gambar penginderaan jauh open-source memang ada (misalnya, Opticks, OrfeoToolbox, OSSIM, ILWIS dan InterImage), tetapi mereka cenderung mengalami masalah umum untuk proyek perangkat lunak open-source kecil, khususnya: dokumentasi yang buruk dan antarmuka yang tidak intuitif dan bug yang tidak diperbaiki yang signifikan.

Sebaliknya, ada sejumlah alat penginderaan jauh berbasis open-source non-gambar yang bagus, terutama yang digunakan untuk pemodelan fisik (misalnya, 6S (Vermote et al., 1997), PROSPECT dan SAIL (Jacquemoud, 1993)) , pemrosesan spektrum (SAMS dan SPECCHIO (Bojinski et al., 2003 Hueni et al., 2009)), dan sebagai perpustakaan untuk pemrogram (GDAL, Proj4J).

Alat open source secara bertahap menjadi lebih banyak digunakan di lapangan, tetapi kurangnya penggunaan komparatif di antara beberapa siswa dan peneliti dibandingkan dengan perangkat lunak sumber tertutup dapat dikaitkan dengan penggunaannya yang terbatas dalam pengajaran. Namun, organisasi seperti Open Source Geospatial Laboratories (OSGL: www.osgeo.org) membantu mengubah ini, dengan menyusun bahan ajar berdasarkan GIS open-source di berbagai tingkatan, dan baru-baru ini ada peningkatan dalam penggunaan alat seperti Quantum GIS untuk pengajaran GIS pengantar.

3. Pemrograman untuk penginderaan jauh

Ada komunitas luas ilmuwan yang menulis program pemrosesan spesialis mereka sendiri dalam disiplin penginderaan jauh, dengan 80% dari mahasiswa PhD yang disurvei telah memprogram sebagai bagian dari penelitian mereka. Dalam banyak disiplin ilmu, peneliti memperdebatkan peningkatan penggunaan dan pengajaran perangkat lunak, tetapi karena tidak ada pilihan nyata apakah akan menggunakan perangkat lunak dalam penginderaan jauh, penggunaan dan pengajaran pemrogramanlah yang telah menjadi tempat diskusi.

Alasan untuk prevalensi pemrograman yang jauh lebih tinggi dalam penginderaan jauh dibandingkan dengan banyak disiplin ilmu lainnya adalah bahwa banyak penelitian penginderaan jauh melibatkan pengembangan metode baru. Beberapa metode baru ini dapat diimplementasikan hanya dengan menggabungkan fungsi yang tersedia dalam perangkat lunak yang ada, tetapi sebagian besar metode non-sepele memerlukan lebih dari ini. Sekalipun penelitian menggunakan metode yang ada, volume data yang besar yang digunakan dalam banyak penelitian membuat pemrosesan menggunakan alat berbasis GUI menjadi tidak menarik. Misalnya, banyak penelitian dalam penginderaan jauh menggunakan rangkaian gambar waktu untuk menilai perubahan lingkungan (misalnya, deforestasi atau peningkatan polusi udara) dan, dengan citra harian sekarang disediakan oleh berbagai sensor, penelitian ini dapat secara teratur menggunakan ratusan gambar. Memproses semua gambar ini secara manual akan sangat memakan waktu, dan dengan demikian kode biasanya ditulis untuk mengotomatiskan proses ini. Beberapa alat pemrosesan menyediakan fungsionalitas 'makro' yang memungkinkan tugas umum diotomatisasi, tetapi ini tidak tersedia di semua alat (misalnya, ENVI) dan seringkali sangat terbatas. Saya baru-baru ini menulis kode untuk mengotomatiskan pengunduhan, proyeksi ulang, pengambilan sampel ulang, dan subset lebih dari 7000 gambar MODIS Aerosol Optical Thickness, untuk membuat kumpulan data tingkat polusi udara harian di India selama sepuluh tahun terakhir: membuat kumpulan data ini tidak mungkin dilakukan dengan tangan!

Uraian di atas menunjukkan dua kegunaan utama pemrograman dalam penelitian penginderaan jauh:

Menulis kode untuk metode baru, sebagai bagian dari pengembangan dan pengujian metode ini

Menulis skrip untuk mengotomatiskan pemrosesan data dalam jumlah besar menggunakan metode yang ada

3.1 Bahasa pemrograman: kasus aneh IDL dan pertumbuhan Python

Responden kuesioner RSPSoc menggunakan bahasa yang beragam seperti Python, IDL, C, FORTRAN, R, Mathematica, Matlab, PHP dan Visual Basic, tetapi yang paling umum adalah Matlab, IDL dan Python. Matlab adalah bahasa pemrograman komersial yang umum digunakan di banyak bidang ilmu pengetahuan, tetapi IDL umumnya kurang dikenal, dan menarik untuk mempertimbangkan mengapa bahasa ini memiliki banyak pengikut dalam penginderaan jauh.

Popularitas IDL berasal dari fakta bahwa perangkat lunak penginderaan jauh ENVI diimplementasikan di IDL, dan memperlihatkan berbagai fungsinya melalui Antarmuka Pemrograman Aplikasi (API) IDL. Hal ini menyebabkan penggunaan IDL yang signifikan untuk menulis skrip untuk mengotomatiskan pemrosesan data penginderaan jauh, dan kesamaan IDL dengan Fortran (terutama dalam hal sifatnya yang berfokus pada array) mendorong banyak orang di lapangan untuk merangkulnya untuk mengembangkan metode baru juga. . Meskipun pertama kali dikembangkan pada tahun 1977, IDL masih aktif dikembangkan oleh pemiliknya saat ini (Exelis Visual Information Solutions) dan masih digunakan oleh banyak peneliti penginderaan jauh, dan diajarkan sebagai bagian dari program MSc di sejumlah universitas Inggris, termasuk University of Southampton .

Namun, saya merasa bahwa waktu IDL sebagai salah satu bahasa yang paling banyak digunakan dalam penginderaan jauh akan segera berakhir. Jika dibandingkan dengan bahasa modern seperti Python (lihat di bawah), IDL sulit dipelajari, memakan waktu untuk menulis dan, tentu saja, sangat mahal untuk dibeli (walaupun tersedia versi sumber terbuka yang disebut GDL, tidak kompatibel dengan ENVI API, dan dengan demikian meniadakan salah satu alasan utama ilmuwan penginderaan jauh menggunakan IDL).

Python adalah bahasa pemrograman modern yang diinterpretasikan yang memiliki sintaks yang mudah dipelajari - sering disebut sebagai 'kode semu yang dapat dieksekusi'. Ada peningkatan besar dalam popularitas Python di berbagai domain penelitian ilmiah selama dekade terakhir, dimungkinkan oleh pengembangan numpy ('numerik python' (Walt et al., 2011)), scipy (' ilmiah python' (Jones et al., 2001)) dan matplotlib ('matlab-like plotting' (Hunter, 2007)) perpustakaan. Ini memberikan akses yang efisien ke dan pemrosesan array dengan Python, bersama dengan kemampuan untuk memplot hasil menggunakan sintaks yang sangat mirip dengan Matlab. Selain perpustakaan dasar ini, lebih dari dua ribu perpustakaan ilmiah lainnya tersedia di Python Package Index (http://pypi.python.org), beberapa di antaranya secara khusus berfokus pada penginderaan jauh.

Pemrosesan data penginderaan jauh dengan Python telah dibantu oleh pengembangan pustaka kode yang matang untuk melakukan tugas-tugas umum. Ini termasuk Perpustakaan Abstraksi Data Geospasial (GDAL) yang menyediakan fungsi untuk memuat dan menyimpan hampir semua format gambar penginderaan jauh atau format GIS berbasis vektor dari berbagai bahasa pemrograman termasuk, tentu saja, Python. Faktanya, sejumlah utilitas inti GDAL sekarang diimplementasikan menggunakan antarmuka Python GDAL, daripada langsung di C++. Penggunaan perpustakaan seperti GDAL memberikan manfaat besar bagi mereka yang menulis kode pemrosesan penginderaan jauh, karena memungkinkan mereka untuk mengabaikan detail format file individual yang mereka gunakan (apakah itu file GeoTIFF, file ENVI atau Erdas yang sangat kompleks. BAYANGKAN file format) dan perlakukan semua file dengan cara yang persis sama, menggunakan API yang sangat sederhana yang memungkinkan pemuatan dan penyimpanan potongan gambar dengan mudah ke dan dari array numpy.

Kumpulan perpustakaan Python penting lainnya yang digunakan oleh peneliti penginderaan jauh adalah yang awalnya berfokus pada komunitas GIS, termasuk perpustakaan untuk memanipulasi dan memproses data vektor (seperti Shapely) dan perpustakaan untuk menangani matematika kompleks dari proyeksi dan sistem koordinat dan konversi referensi peta antara ini (seperti perpustakaan Proj4, yang memiliki API untuk berbagai macam bahasa). Sama seperti ENVI mengekspos banyak fungsinya melalui IDL API ArcGIS, Quantum GIS, GRASS dan banyak alat lainnya mengekspos fungsionalitas mereka melalui API Python. Dengan demikian, Python dapat digunakan dengan sangat efektif sebagai 'bahasa lem' untuk menggabungkan fungsionalitas dari berbagai alat menjadi satu hierarki pemrosesan yang koheren.

Sejumlah peneliti penginderaan jauh juga telah merilis perpustakaan yang sangat khusus untuk sub-domain tertentu dalam penginderaan jauh. Contohnya termasuk Earth Observation Land Data Asimilasi System (EOLDAS) yang dikembangkan oleh Paul Lewis (Lewis et al., 2012), dan perpustakaan Py6S (Wilson, 2012) dan PyProSAIL (Wilson, 2013) yang telah saya kembangkan, yang menyediakan a modern programmatic interface to two well-known models within the field: the 6S atmospheric radiative transfer model and the ProSAIL vegetation spectral reflectance model.

Releasing these libraries - along with other open-source remote sensing code - has benefited my career, as it has brought me into touch with a wide range of researchers who want to use my code, helped me to develop my technical writing skills and also led to the publication of a journal paper. More importantly than any of these though, developing the Py6S library has given me exactly the tool that I need to do my research. I don’t have to work around the features (and bugs!) of another tool - I can implement the functions I need, focused on the way I want to use them, and then use the tool to help me do science. Of course, Py6S and PyProSAIL themselves rely heavily on a number of other Python scientific libraries - some generic, some remote-sensing focused - which have been realised by other researchers.

The Py6S and PyProSAIL packages demonstrate another attractive use for Python: wrapping legacy code in a modern interface. This may not seem important to some researchers - but many people struggle to use and understand models written in old languages which cannot cope with many modern data input and output formats. Python has been used very successfully in a number of situations to wrap these legacy codes and provide a ‘new lease of life’ for tried-and-tested codes from the 1980s and 1990s.

3.2 Teaching programming in remote sensing

I came into the field of remote sensing having already worked as a programmer, so it was natural for me to use programming to solve many of the problems within the field. However, many students do not have this prior experience, so rely on courses within their undergraduate or MSc programmes to introduce them both to the benefits of programming within the field, and the technical knowledge they need to actually do it. In my experience teaching on these courses, the motivation is just as difficult as the technical teaching - students need to be shown why it is worth their while to learn a complex and scary new skill. Furthermore, students need to be taught how to program in an effective, reproducible manner, rather than just the technical details of syntax.

I believe that my ability to program has significantly benefited me as a remote-sensing researcher, and I am convinced that more students should be taught this essential skill. It is my view that programming must be taught far more broadly at university: just as students in disciplines from Anthropology to Zoology get taught statistics and mathematics in their undergraduate and masters-level courses, they should be taught programming too. This is particularly important in a subject such as remote sensing where programming can provide researchers with a huge boost in their effectiveness and efficiency. Unfortunately, where teaching is done, it is often similar to department-led statistics and mathematics courses: that is, not very good. Outsourcing these courses to the Computer Science department is not a good solution either - remote sensing students do not need a CS1-style computer science course, they need a course specifically focused on programming within remote sensing.

In terms of remote sensing teaching, I think it is essential that a programming course (preferably taught using a modern language like Python) is compulsory at MSc level, and available at an undergraduate level. Programming training and support should also be available to researchers at PhD, Post-Doc and Staff levels, ideally through some sort of drop-in ‘geocomputational expert’ service.

4. Reproducible research in remote sensing

Researchers working in ‘wet labs’ are taught to keep track of exactly what they have done at each step of their research, usually in the form of a lab notebook, thus allowing the research to be reproduced by others in the future. Unfortunately, this seems to be significantly less common when dealing with computational research - which includes most research in remote sensing. This has raised significant questions about the reproducibility of research carried out using ‘computational laboratories’, which leads to serious questions about the robustness of the science carried out by researchers in the field - as reproducibility is a key distinguishing factor of scientific research from quackery (Chalmers, 1999).

Reproducibility is where the automating of processing through programming really shows its importance: it is very hard to document exactly what you did using a GUI tool, but an automated script for doing the same processing can be self-documenting. Similarly, a page of equations describing a new method can leave a lot of important questions unanswered (what happens at the boundaries of the image? how exactly are the statistics calculated?) which will be answered by the code which implements the method.

A number of papers in remote sensing have shown issues with reproducibility. For example, Saleska et al. (2007) published a Ilmu paper stating that the Amazon forest increased in photosynthetic activity during a widespread drought in 2005, and thus suggested that concerns about the response of the Amazon to climate change were overstated. However, after struggling to reproduce this result for a number of years, Samanta et al. (2010) eventually published a paper showing that the exact opposite was true, and that the spurious results were caused by incorrect cloud and aerosol screening in the satellite data used in the original study. If the original paper had provided fully reproducible details on their processing chain - or even better, code to run the entire process - then this error would likely have been caught much earlier, hopefully during the review process.

I have personally encountered problems reproducing other research published in the remote sensing literature - including the SYNTAM method for retrieving Aerosol Optical Depth from MODIS images (Tang et al., 2005), due to the limited details given in the paper, and the lack of available code, which has led to significant wasted time. I should point out, however, that some papers in the field deal with reproducibility very well. Irish et al. (2000) provide all of the details required to fully implement their revised version of the Landsat Automatic Cloud-cover Assessment Algorithm (ACCA), mainly through a series of detailed flowcharts in their paper. The release of their code would have saved me re-implementing it, but at least all of the details were given.

5. Issues and possible solutions

The description of the use of software in remote sensing above has raised a number of issues, which are summarised here:

There is a lack of open-source remote-sensing software comparable to packages such as ENVI or Erdas Imagine. Although there are some tools which fulfil part of this need, they need an acceleration in development in a similar manner to Quantum GIS to bring them to a level where researchers will truly engage. There is also a serious need for an open-source tool for Object-based Image Analysis, as the most-used commercial tool for this (eCognition) is so expensive that it is completely unaffordable for many institutions.

There is a lack of high-quality education in programming skills for remote-sensing students at undergraduate, masters and PhD levels.

Many remote sensing problems are conceptually easy to parallelise (if the operation on each pixel is independent then the entire process can be parallelised very easily), but there are few tools available to allow serial code to be easily parallelised by researchers who are not experienced in high performance computing.

Much of the research in the remote sensing literature is not reproducible. This is a particular problem when the research is developing new methods or algorithms which others will need to build upon. The development of reproducible research practices in other disciplines has not been mirrored in remote sensing, as yet.

Problems 2 & 4 can be solved by improving the education and training of researchers - particularly students - and problems 1 & 3 can be solved by the development of new open-source tools, preferably with the involvement of active remote sensing researchers. All of these solutions, however, rely on programming being taken seriously as a scientific activity within the field, as stated by the Science Code Manifesto (http://sciencecodemanifesto.org).

The first piece of advice I would give any budding remote sensing researcher is learn to program! It isn’t that hard - honestly! - and the ability to express your methods and processes in code will significantly boost your productivity, and therefore your career.

Once you’ve learnt to program, I would have a few more pieces of advice for you:

Script and code things as much as possible, rather than using GUI tools. Graphical User Interfaces are wonderful for exploring data - but by the time you click all of the buttons to do some manual processing for the 20th time (after you’ve got it wrong, lost the data, or just need to run it on another image) you’ll wish you’d coded it.

Don’t re-invent the wheel. If you want to do an unsupervised classification then use a standard algorithm (such as ISODATA or K-means) implemented through a robust and well-tested library (like the ENVI API, or scikit-learn) - there is no point wasting your time implementing an algorithm that other people have already written for you!

Try and get into the habit of documenting your code well - even if you think you’ll be the only person who looks at it, you’ll be surprised what you can forget in six months!

Don’t be afraid to release your code - people won’t laugh at your coding style, they’ll just be thankful that you released anything at all! Try and get into the habit of making research that you publish fully reproducible, and then sharing the code (and the data if you can) that you used to produce the outputs in the paper.

Bojinski, S., Schaepman, M., Schläpfer, D., Itten, K., 2003. SPECCHIO: a spectrum database for remote sensing applications. Comput. Geosci. 29, 27–38.

Chalmers, A.F., 1999. What is this thing called science? Univ. of Queensland Press.

Gastellu-Etchegorry, J.P., Demarez, V., Pinel, V., Zagolski, F., 1996. Modeling radiative transfer in heterogeneous 3-D vegetation canopies. Remote Sens. Environ. 58, 131–156. doi:10.1016/0034-4257(95)00253-7

Hueni, A., Nieke, J., Schopfer, J., Kneubühler, M., Itten, K.I., 2009. The spectral database SPECCHIO for improved long-term usability and data sharing. Comput. Geosci. 35, 557–565.

Hunter, J.D., 2007. Matplotlib: A 2D Graphics Environment. Comput. Sci. Eng. 9, 90–95. doi:10.1109/MCSE.2007.55

IPCC, 2007. Climate change 2007: The physical science basis 6, 07.

Irish, R.R., 2000. Landsat 7 automatic cloud cover assessment, in: AeroSense 2000. International Society for Optics and Photonics, pp. 348–355.

Jacquemoud, S., 1993. Inversion of the PROSPECT+ SAIL canopy reflectance model from AVIRIS equivalent spectra: theoretical study. Remote Sens. Environ. 44, 281–292.

Jones, E., Oliphant, T., Peterson, P., others, 2001. SciPy: Open source scientific tools for Python.

Kerr, J.T., Ostrovsky, M., 2003. From space to species: ecological applications for remote sensing. Trends Ecol. Evol. 18, 299–305. doi:10.1016/S0169-5347(03)00071-5

Lewis, P., Gómez-Dans, J., Kaminski, T., Settle, J., Quaife, T., Gobron, N., Styles, J., Berger, M., 2012. An Earth Observation Land Data Assimilation System (EO-LDAS). Remote Sens. Environ. 120, 219–235. doi:10.1016/j.rse.2011.12.027

Marx, A.J., Loboda, T.V., 2013. Landsat-based early warning system to detect the destruction of villages in Darfur, Sudan. Remote Sens. Environ. 136, 126–134. doi:10.1016/j.rse.2013.05.006

Ramsey, P., 2009. Geospatial: An Open Source Microcosm. Open Source Bus. Resour.


Tonton videonya: Compile and Run OpenCV in DevC++ follow steps mentioned in the linkdescription (Oktober 2021).