Страница 1 из 1

gdalchksum ?

Добавлено: 18 июл 2016, 23:46
Boris
Спрошу у тех, кто в теме, т.к. ясно, что можно залезть в исходные коды GDAL и пробовать понять самому, но может кто-то уже это проходил или в этом участвовал.
Есть код на python'е gdalchksum.py, который обернут в gdalchksum.bat.
Код не большой и по моему, все вычисления производятся библиотекой GDAL

Код: Выделить всё

# Generate checksums

for band_num in bands:
    oBand = ds.GetRasterBand( band_num )
    result = oBand.Checksum( srcwin[0], srcwin[1], srcwin[2], srcwin[3] )
    print(result)
Что за числа помещаются в "result" ? Это какой то общепринятый механизм расчета контрольной суммы? Потому как я "в лицо" - не узнал. Удивляет, что числа только десятичные и разной длины:
V:\PNG>gdalchksum.bat 50-42-86-А-а-1.tif.png
50-42-86-А-а-1.tif.png
5390
53300
15075

V:\JP2>gdalchksum.bat 50-42-86-А-а-1.tif.jp2
50-42-86-А-а-1.tif.jp2
5335
53322
15040


V:\>gdalchksum.bat 50-42-86-А-а-1.tif
50-42-86-А-а-1.tif
5390
53300
15075
Если числа совпали, то есть предположение, что растры тождественны. А если близки, как в случае с файлом в JP2 (кодировался по инструкции как lossless http://www.gdal.org/frmt_jp2openjpeg.html) - это значит "близки" или ХЗ?
Lossless compression
Lossless compression can be achieved if ALL the following creation options are defined :

QUALITY=100
REVERSIBLE=YES
YCBCR420=NO (which is the default)
PS
Рискую злоупотребить вашим вниманием, но как организовать структурированный вывод а-ля printf python'е? Что то я читал-читал и понял только одно, что printf - нет. А что в замен? Уж больно бесит вывод столбиком того, что должно выводится строчкой.

Re: gdalchksum ?

Добавлено: 19 июл 2016, 08:01
pendduduk
Вообще написано что выводит контрольную сумму...
http://www.gdal.org/gdal__alg_8h.html#a ... ceac8f4d14

Вы вод в питоне - что то в этом роде должно быть если на выходе функции массив:

Код: Выделить всё

# Generate checksums
for band_num in bands:
    oBand = ds.GetRasterBand( band_num )
    result = oBand.Checksum( srcwin[0], srcwin[1], srcwin[2], srcwin[3] )
    print("%d%d%d"%(result[0],result[1],result[2]))

Re: gdalchksum ?

Добавлено: 19 июл 2016, 08:15
Denis Rykov

Re: gdalchksum ?

Добавлено: 20 июл 2016, 23:54
Boris
Спасибо за ответы, но за способ вычисления контрольной суммы нет мыслей. Что за контрольная сумма такая "Computes a 16bit (0-65535) checksum"? И близость контрольных сумм говорит о близости растров?

Re: gdalchksum ?

Добавлено: 21 июл 2016, 10:43
Дмитрий Барышников
Судя по коду (https://github.com/OSGeo/gdal/blob/trun ... #L130-L158) эта величина уникально идентифицирующая растр/канал растра. Она не отражает степень похожести одного растра на другой.
Хотя функция принимает и регион растра и таким образом можно по какому-то окну пройтись по всему растру (например 256х256) и уже сравнивать полученные массивы контрольных сумм. Чем больше соответствующих значений совпадает в массивах - тем более похожи растры.
Ограничения - растры должны совпадать по размеру и разрешению (ну или быть близкими).