Что нового

PixelChecksum : разное значение на одинаковую картинку

shasoft

Новичок
Сообщения
15
Репутация
0
Обнаружил странное поведение функции PixelChecksum. Для одной и той же картинки функция возвращает разное значение.
Понимая, что "на глаз" определить идентичность картинки невозможно, я сделал скриншот этой области в файл. Вот такой код:
Код:
$ch = Hex(PixelChecksum($x+48,$y+64,$x+48+8,$y+64+8),8)
		_ScreenCapture_Capture($ch&".png", $x+48,$y+64,$x+48+8,$y+64+8,False)

Сравнил полученные файлы. Они оказались совершенно одинаковыми. Т.е. факт идентичности "на лицо". Но почему же чексумма получается разная?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,601
Репутация
941
Re: PixelChecksum : непонятки

Откуда картинка то берется?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,462
Re: PixelChecksum : непонятки

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"PixelChecksum : непонятки" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Администратор.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Re: PixelChecksum : непонятки

shasoft,
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
S

shasoft

Новичок
Сообщения
15
Репутация
0
А какая разница, какая картинка? Главное, что на одинаковое изображение получается разное значение PixelChecksum
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,601
Репутация
941
Это изображение одинаковое только для твоих глаз. Сделай скриншот изображения, подвигай камеру и сделай еще один скриншот, всё, все цвета изменятся. Использовать PixelCheckSum для поиска изображений - банальщина и тупость.

Как по твоему в чем сходство и в чём различие у этих трех изображений?
1:
16068pd.png
2:
22zz3l.png
3:
2jct0uf.png
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
shasoft [?]
Сравнил полученные файлы
а как сравнивал? надо проверить контрольные суммы файлов, например md5. если они разные, то и файл разный, независимо от того, насколько идентично они выглядят на глаз. тем более что для изменения суммы достаточно изменения одного пикселя, что глаз не может заметить при неизменности фона
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,601
Репутация
941
Kaster сказал(а):
а как сравнивал? надо проверить контрольные суммы файлов, например md5. если они разные, то и файл разный, независимо от того, насколько идентично они выглядят на глаз. тем более что для изменения суммы достаточно изменения одного пикселя, что глаз не может заметить на фоне неизмененного фона.
Ну вот, а я тут пыжился пыжился, подводил автора к логическому решению загадки. Тем более он не файл сверяет, а область на экране игры :(
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,601
Репутация
941
Короче пусть использует ImageSearch
 
Автор
S

shasoft

Новичок
Сообщения
15
Репутация
0
а как сравнивал? надо проверить контрольные суммы файлов, например md5. если они разные, то и файл разный, независимо от того, насколько идентично они выглядят на глаз.
Я сравнивал файлы ПОБАЙТНО. С помощью Total Comander-а + командной fc /b <файл 1> <файл 2>. Это намного точнее, чем через md5.
тем более что для изменения суммы достаточно изменения одного пикселя, что глаз не может заметить при неизменности фона
Я про это написал в первом сообщении. Для изменения суммы достаточно изменение не просто одного пиксела, а даже одной из цветовой его составляющей компоненты всего на один бит.






Добавлено:
Сообщение автоматически объединено:

Это изображение одинаковое только для твоих глаз.
В первом сообщении я писал о такой возможности.
Сделай скриншот изображения, подвигай камеру и сделай еще один скриншот, всё, все цвета изменятся.
Однако в данном случае случае сделанные скриншоты ИДЕНТИЧНЫЕ ВПЛОТЬ ДО БИТА. Т.е. отличий, невидимых глазу нет. Картинку сохраняю в зтп, которая имеет БЕЗПОТЕРЬНЫЙ формат сжатия, поэтому потерять ничего не может.

Я привел пример вызова. Вызывается чексум, а потом делается скриншот этой же области.


Добавлено:
Сообщение автоматически объединено:

Короче пусть использует ImageSearch
В программе я его и использую. Но в данном случае чексумма лучше подходит. Да и эту "ошибку" я обошел.

Но непонятки остались. :smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
shasoft [?]
Это намного точнее, чем через md5
намного это насколько?
достаточно изменение не просто одного пиксела
что по твоему изменение пикселя?

вопросы риторические. в первом случае, все равно нонсенс написан. два разных файла дадут разные хеши. что может быть точнее чем определить уникальность файла?

и еще, у тебя там шаг PixelChecksum стоит 8. я точно в механизме генерации суммы не уверен, но возможно шаг как-то нивелирует окончательный результат. попробуй без шага (по умолчанию 1)
 
Автор
S

shasoft

Новичок
Сообщения
15
Репутация
0
два разных файла дадут разные хеши.
Вообще-то чисто теоретически два разных файла могут дать один и тот же ХЕШ. Я же сравниваю побайтно, поэтому у меня результат 100%
При сравнении ХЕШ-ей файлов нельзя быть на 100% уверенным, что файлы одинаковые.

и еще, у тебя там шаг PixelChecksum стоит 8.
Эта 8-ка относится к функции Hex. Как вариант, возможно PixelChecksum возвращает не 32 битное число, а число большей разрядности. Завтра попробую 16 вместо 8.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
shasoft [?]
Вообще-то чисто теоретически два разных файла могут дать один и тот же ХЕШ
кроме искусственно созданных коллизий, на практике такого еще не случалось. поэтому считай, что вероятность такого (апостериори) события нулевая. стало быть тоже 100%. поэтому я и спросил, намного точнее это насколько? 0.00000001% или в этом роде? я к тому, что если хеши одинаковые можно быть уверенным что файлы одинаковые.
Эта 8-ка относится к функции Hex
действительно, это я проглядел. в таком случае, все что мне пока приходит в голову – что-то находится в области экрана, которую не захватывает ScreenCapture. если я не путаю, всякие программы которые используют оверлей. но, с другой стороны, возможно что PixelChecksum так же не захватывает оверлейные участки.
 
Автор
S

shasoft

Новичок
Сообщения
15
Репутация
0
кроме искусственно созданных коллизий, на практике такого еще не случалось. поэтому считай, что вероятность такого (апостериори) события нулевая. стало быть тоже 100%. поэтому я и спросил, намного точнее это насколько? 0.00000001% или в этом роде? я к тому, что если хеши одинаковые можно быть уверенным что файлы одинаковые.
Но всё-таки мой способ дает 100% гарантию. Ваш способ - 99.99999999% гарантию. Точный метод намного выше по достоверности вероятностного способа. Но это не особо относится к теме. :smile:

Я вообще рассматривал только два возможных случая такой работы функции:
1. Сохранение и расчет суммы идет на разные участки. Но посмотрев справку оказалось, что этот пункт можно исключить
2. Так как это флеш и картинка появляется постепенно, то возможно что-то не успело появиться. Хотя я уже и паузу поставил секунд на 30. Да и скриншоты получились одинаковые.

Так что скорее всего тут третий случай: функция расчета суммы и сохранения скриншотов получают разные цвета. Т.е. различается их алгоритм доступа к пикселам. И у PixelChecksum он более точный.


Так что тему можно закрывать за неимением решения. Для оиска решения нужен чистый случай данной проблемы, чтобы ожно было провести тести, к примеру, сравнить через PixelGetColor области.
 
Верх