Apakah ada cara untuk memeriksa untuk melihat apakah ada 2 layer raster yang diberikan memiliki konten yang identik ?
Kami memiliki masalah pada volume penyimpanan bersama perusahaan kami: sekarang sangat besar sehingga diperlukan lebih dari 3 hari untuk melakukan pencadangan penuh. Penyelidikan awal mengungkapkan salah satu biang kerok memakan ruang terbesar adalah raster on / off yang benar-benar harus disimpan sebagai lapisan 1-bit dengan kompresi CCITT.
Gambar sampel ini saat ini 2bit (jadi 3 nilai yang mungkin) dan disimpan sebagai LZW kompresi file, 11 MB dalam sistem file. Setelah mengonversi ke 1bit (jadi 2 nilai yang memungkinkan) dan menerapkan kompresi CCITT Group 4, kami mendapatkannya menjadi 1,3 MB, hampir seluruh urutan besarnya penghematan.
(Ini sebenarnya adalah warga negara yang berperilaku sangat baik, ada yang lain disimpan sebagai float 32bit!)
Ini berita fantastis! Namun ada hampir 7.000 gambar untuk menerapkan ini juga. Akan mudah untuk menulis naskah untuk mengompres mereka:
for old_img in [list of images]:
convert_to_1bit_and_compress(old_img)
remove(old_img)
replace_with_new(old_img, new_img)
... tetapi tidak ada tes penting: apakah konten versi yang baru dikompresi-identik?
if raster_diff(old_img, new_img) == "Identical":
remove(old_img)
rename(new_img, old_img)
Apakah ada alat atau metode yang dapat (otomatis) membuktikan konten Gambar-A bernilai identik dengan konten Gambar-B?
Saya memiliki akses ke ArcGIS 10.2 dan QGIS, tetapi saya juga terbuka untuk hampir semua hal selain yang dapat meniadakan kebutuhan untuk memeriksa semua gambar ini secara manual untuk memastikan kebenaran sebelum menimpa. Akan mengerikan untuk secara keliru mengkonversi dan menimpa gambar yang benar - benar memiliki lebih dari nilai on / off di dalamnya. Sebagian besar biaya ribuan dolar untuk mengumpulkan dan menghasilkan.
pembaruan: Pelanggar terbesar adalah float 32bit yang berkisar hingga 100.000px ke satu sisi, jadi ~ 30GB terkompresi.
NoData
penanganan yang benar tetap dalam percakapan.
len(numpy.unique(yourraster)) == 2
, maka Anda tahu bahwa ia memiliki 2 nilai unik dan Anda dapat melakukannya dengan aman.
numpy.unique
akan menjadi lebih mahal secara komputasi (baik dari segi waktu dan ruang) daripada kebanyakan cara lain untuk memeriksa bahwa perbedaannya adalah konstan. Ketika dihadapkan dengan perbedaan antara dua raster floating point yang sangat besar yang menunjukkan banyak perbedaan (seperti membandingkan yang asli dengan versi kompresi yang lossy) kemungkinan akan macet selamanya atau gagal sepenuhnya.
gdalcompare.py
menunjukkan janji besar ( lihat jawaban )
raster_diff(old_img, new_img) == "Identical"
adalah dengan mengecek bahwa zonal max dari nilai absolut dari selisihnya sama dengan 0, di mana zona tersebut diambil dari seluruh luas kisi. Apakah ini semacam solusi yang Anda cari? (Jika demikian, perlu disempurnakan untuk memeriksa apakah nilai-nilai NoData konsisten juga.)