gdalchksum ?

Ответить
Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

gdalchksum ?

Сообщение Boris » 18 июл 2016, 23:46

Спрошу у тех, кто в теме, т.к. ясно, что можно залезть в исходные коды 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 - нет. А что в замен? Уж больно бесит вывод столбиком того, что должно выводится строчкой.

pendduduk
Активный участник
Сообщения: 179
Зарегистрирован: 05 июл 2009, 22:18
Репутация: 47

Re: gdalchksum ?

Сообщение pendduduk » 19 июл 2016, 08:01

Вообще написано что выводит контрольную сумму...
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]))

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: gdalchksum ?

Сообщение Denis Rykov » 19 июл 2016, 08:15

Spatial is now, more than ever, just another column- The Geometry Column.

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: gdalchksum ?

Сообщение Boris » 20 июл 2016, 23:54

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

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: gdalchksum ?

Сообщение Дмитрий Барышников » 21 июл 2016, 10:43

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

Ответить

Вернуться в «GDAL/OGR»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя