Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрое сравнение двух рисунков 
:(
    Опции темы
Alexeis
Дата 22.9.2010, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(x128 @  22.9.2010,  20:35 Найти цитируемый пост)
Контрольная сумма считается не по волшебству, в любом случае нужно прочитать и произвести манипуляции с данными каждого из фрагментов, какая в таком подходе польза? Сравнение двух областей памяти займет меньше времени.

  Речь идет о попарном сравнении всех кусочков 1-2 1-3 .. 1-n, 2-3, 2-4, 2-n,...n-1 - n. Это отнюдь не n сравнений.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
EPaul
Дата 22.9.2010, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.6.2009
Где: Наб-Челны

Репутация: нет
Всего: нет



x128, Как ты делаешь? У меня не получается меньше 40%. Сравниваю и память и пиксели. Посмотри мой код, что делаю не так? 

Присоединённый файл ( Кол-во скачиваний: 43 )
Присоединённый файл  RAdmin__.rar 29,38 Kb
PM MAIL   Вверх
x128
Дата 23.9.2010, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 29.9.2009

Репутация: 5
Всего: 7



Цитата(EPaul @  22.9.2010,  23:58 Найти цитируемый пост)
Посмотри мой код, что делаю не так? 

В принципе все не так... Выполняется много не нужного кода и много бесполезного кода, все затраты в конечном счете суммируются и получаешь тормоза. После получения очередного снимка экрана нужно сначала найти места где есть разница и только после этого производить манипуляции с измененными блоками. У тебя все наоборот, делаешь снимок, потом начинаешь вырезать фрагменты, далее каждый фрагмент пихать в TMemoryStream, только после этого сравнивать, после чего еще раз копировать. Логику в этих действиях я не уловил... 
PM MAIL WWW   Вверх
EPaul
Дата 23.9.2010, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.6.2009
Где: Наб-Челны

Репутация: нет
Всего: нет



x128,   Т.е.  попиксельно сравнивать 2 больших снимка, по изменившемуся пикселю расчитать и вырезать фрагмент ?

Это сообщение отредактировал(а) EPaul - 23.9.2010, 13:15
PM MAIL   Вверх
x128
Дата 23.9.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 29.9.2009

Репутация: 5
Всего: 7



Примерно так, только не на мудри с "по изменившемуся пикселю расчитать и вырезать фрагмент", организуй грамотно цикл так, что бы не нужно было делать лишние вычисления т.е. в момент нахождения блока у тебя должны быть известны все значения (размер блока, положение, где данные и куда они должны попасть). Самое важное избавиться от лишних операций в циклах и других критичных местах.
PM MAIL WWW   Вверх
EPaul
Дата 23.9.2010, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.6.2009
Где: Наб-Челны

Репутация: нет
Всего: нет



x128,  По изменившемуся пикселю, определить фрагмент его местонахождения, если фрагмент уже был замечен как измененный, до конца цикла сранения перескакивать через него, смещая индексы X,Y   если замечен впервые - вырезать. Так наверное будет лучше. Щас буду пробовать.   
PM MAIL   Вверх
xkor
Дата 23.9.2010, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: нет
Всего: 4



Цитата(EPaul @  23.9.2010,  14:14 Найти цитируемый пост)
x128,  По изменившемуся пикселю, определить фрагмент его местонахождения, если фрагмент уже был замечен как измененный, до конца цикла сранения перескакивать через него, смещая индексы X,Y   если замечен впервые - вырезать. Так наверное будет лучше. Щас буду пробовать. 

и к чему тогда было отвечать:
Цитата(EPaul @  22.9.2010,  19:36 Найти цитируемый пост)
xkor, Я вообщето так и делаю. На пальцах трудно объяснять. Если не поленитесь посмотреть код, могу выслать. 

на моё сообщение:
Цитата(xkor @  22.9.2010,  15:42 Найти цитируемый пост)
НО у вас мне кажется неверный подход, зачем изображение сразу дробить?, вы сначала сравните старую большую и новую большую картинку, а дальше уже копируйте только куски с изменившимися данными, а лучше одновременно, то есть сравниваете попиксельно (быстрее невозможно) и как только один пиксель оказался не таким как раньше копируете соответствующий этому пикселю кусок картинки в массив изменившихся и больше пиксели этого куска не трогаете.

если только сейчас начали делать так как я написал?
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
EPaul
Дата 23.9.2010, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.6.2009
Где: Наб-Челны

Репутация: нет
Всего: нет



xkor,  Попробовал и Ваше предложение. Результат тот-же. Простой цикл перебора 1680х1050х3 без каких либо операций внутри, 10 раз в сек - до 5%.  Просто снимок экрана единственной процедурой BitBlt -  6-7%. А если поставить в цикл какое-либо условие на сравнение пикселей, расчет фрагмента, в котором находится пиксель, определяние был-ли этот фрагмент уже изменен - плюс еще 25-30%  В итоге меньше 50% не получается. (процессор P4® D-2.66 ОЗУ 3ГБ)   Пришел к выводу - в делфи это сделать невозможно. Жаль. Может на С++ это быстрее будет?   
PM MAIL   Вверх
xkor
Дата 24.9.2010, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: нет
Всего: 4



EPaul, ну может в С++ и выиграешь процентик за счет более навороченного оптимизатора, но в целом один алгорим что на дельфи что на С++, что на другом языке с нативным компилятором будет работать практически с одной скоростью...
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
x128
Дата 24.9.2010, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 29.9.2009

Репутация: 5
Всего: 7



Цитата(EPaul @  23.9.2010,  23:31 Найти цитируемый пост)
Пришел к выводу - в делфи это сделать невозможно. Жаль. Может на С++ это быстрее будет?

Разницы в среде разработки нет! Смотри прикрепленный исходник и думай над своими ошибками...


Присоединённый файл ( Кол-во скачиваний: 57 )
Присоединённый файл  CompareScreen.rar 166,81 Kb
PM MAIL WWW   Вверх
x128
Дата 24.9.2010, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 29.9.2009

Репутация: 5
Всего: 7



Цитата(EPaul @  23.9.2010,  23:31 Найти цитируемый пост)
Пришел к выводу - в делфи это сделать невозможно. Жаль. Может на С++ это быстрее будет?

Разницы в среде разработки нет! Смотри прикрепленный исходник и думай над своими ошибками...


Присоединённый файл ( Кол-во скачиваний: 79 )
Присоединённый файл  CompareScreen.rar 166,81 Kb
PM MAIL WWW   Вверх
EPaul
Дата 24.9.2010, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 22.6.2009
Где: Наб-Челны

Репутация: нет
Всего: нет



x128,  Спасибо.
PM MAIL   Вверх
SeeDeeS
Дата 23.5.2012, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 15.5.2012

Репутация: нет
Всего: нет



Как сделать чтоб она была не черно-белая? А то при этом:
Код

if i=bs then img[2][y div bs, x div bs]:=gr(img[1][y, x])
              else img[2][y div bs, x div bs]:=img[1][y, x];

картинка становится серой. О.О
PM MAIL   Вверх
MetalFan
Дата 23.5.2012, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 5
Всего: 128



SeeDeeS, оймама. трупокопатель)

Кстати, а что, если реализовать алгортим сравнения/поиска изменившихся областей таким образом:
Сравниваемые картинки отрисовываются друг на друга с пом BitBlt c dwRop = PATINVERT (xor), а затем смотрим, ищем ненулевые триплеты/дворды...
не быстрее ли это будет, чем сравнение через CompareMem и т.п.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Signal
Дата 24.10.2012, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 24.10.2012

Репутация: нет
Всего: нет



Есть возможность предварительной проверки картинок это не попиксельное сравнение картинки, а побайтно, например 32 или 64 битном представлении.
Делаем массив типа int64
(предварительно картинку переводим в формат 1bit)
грузим в этот массив картинку
т.е. в 64 битном 1 елементе мы имеем сразу 64 точки, а далее математика, мы будем знать в каком элементе есть несовпадения и вычисляем
недавно находил пример, жаль сейчас по быстрячку не нашел на каком форуме я видел.
как писал автор, скорость сравнения битмапа выросла в 20 раз, сам не проверял
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1306 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.