Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2015, 23:36   #21
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

imagemagic нельзя поставить на винду? а потом через shellexec вызывать?
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 09.05.2015, 23:53   #22
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Мне нужно это реализация в собственной программе на delphi 7-она должна распознавать карты и общается с сервером. Это моя клиентская программа которая будет ставиться на машине клиента ( стримера)

Как так получилось сам не пойму .
Уже сделал инструкции стримеру и договорился о тестировании и тут на тебе....

Последний раз редактировалось Illusiony; 10.05.2015 в 00:12.
Illusiony вне форума Ответить с цитированием
Старый 10.05.2015, 00:29   #23
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

После некоторого тестирования выяснилась примерная степень несовпадений
из 564 изображений базы.
в зоне ошибки сравнения одного изображения в разных случаях могло оказаться от до 2-3 десятков изображений.
Если посмотреть визуально сравниваемые изображения они для глаза очень похожи. Различия это небольшая размытость, небольшие сдвиги, небольшая разница в размерах объектов на изображениях.
Сейчас получается что примерно 60% изображений имеют ошибки распознования ( проверено на примерно 40 изображениях)

Даже, если вручную вносить корректировку для ошибочных изображений( если разница цветовых расстояний окажется такой-то то код карты вывести такой-то), то при увеличении базы рисунков вся корректировка улетит в пух и прах ии-за увеличения вариантов цветовых расстояний для сравнения .

Все еще усложняется тем что я не могу просто взять сравнить всю базу с всеми возможными входными рисунками, так как они(входные рисунки) определяются в реальной программе игры, для которой необходимы условия и вносится большой рандом для этих условий, коих невозможно сделать быстро.

Просто никак не могу найти немного более точный алгоритм сравнения.

Я просто делаю сумму всех расстояний между пикселями двух сравниваемых изображений, а потом нахожу где эта сумма наименьшая.
Нужно усложнить задачу для большей точности.f.hump писал об этом но, я не особо разобрался.

Последний раз редактировалось Illusiony; 10.05.2015 в 02:35.
Illusiony вне форума Ответить с цитированием
Старый 10.05.2015, 08:25   #24
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

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

Не знаю стоит ли разбить сравнение на 4 участка и сравнивать по отдельности. Даст ли это мне что либо?
Illusiony вне форума Ответить с цитированием
Старый 10.05.2015, 20:02   #25
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Вернулся к старому способу:
1) определение среднего расстояния каждого пикселя
2) подсчет пикселей ограниченные некой величниной
3) там где таких пикселей больше считаем изображение распознанным
Точно где то 1 несовпадение на 15-20 картинок.
которые с ошибками вношу искусственную поправку
Illusiony вне форума Ответить с цитированием
Старый 11.05.2015, 21:02   #26
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

посмотрел

в целом там ошибки нет, я четверку в квадрат не возводил, только содержимое скобок.

по-прежнему думаю, что положительный результат можно получить от
Код:
sredn_rastoyanie[n]:=sredn_rastoyanie[n]+Sqr((G[i1,j]-G2)*2 +(R[i1,j]-R2)+(B[i1,j]-B2));
или
Код:
sredn_rastoyanie[n]:=sredn_rastoyanie[n]+Sqr((G[i1,j]-G2)*0.6 +(R[i1,j]-R2)*0.3+(B[i1,j]-B2)*0.1);
ну, а если не работает, то не изобретать велосипед, провести анализ тематической литературы, существущих опен-сорсов, и применить понравившийся.

разбение на фрагменты, при правильной логике, может позитивно сказаться на скорости распознавания.

Последний раз редактировалось f.hump; 11.05.2015 в 21:38.
f.hump вне форума Ответить с цитированием
Старый 12.05.2015, 18:03   #27
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

f.hump, большое спасибо что откликнулись.

Просто по этим данным:
Код:
Y = G/2 + (R+B)/4
Cg = G/2 - (R+B)/4 + 128
Co = (R-B)/2 + 128
Я умножил все на 4 и возвел в квадрат каждую составляющую из ваших данных:
Код:
dist = ((G1-G0)*2 + (R1-R0) + (B1-B0))^2 +
((G1-G0)*2 - (R1-R0) - (B1-B0))^2 + 
4*((R1-R0) - (B1-B0))^2
получил:

Код:
prom_sredn_rast:=Sqr((G[i1,j]-G2)*2 +(R[i1,j]-R2)+(B[i1,j]-B2)) +Sqr((G[i1,j]-G2)*2 -(R[i1,j]-R2)-(B[i1,j]-B2))+Sqr(((R[i1,j]-R2)-(B[i1,j]-B2))*2);
У меня сейчас так.
Немного не понимаю ваши последние формулы.
Код:
sredn_rastoyanie[n]:=sredn_rastoyanie[n]+Sqr((G[i1,j]-G2)*2 +(R[i1,j]-R2)+(B[i1,j]-B2));
Вы оставили только Y составляющие а остальные отбросили?

У меня в цикле подсчета расстояния каждого пикселя определяется, если оно меньше 2000 то в массиве для данного изображения базы+1 делаем, а потом пробегаем по всему массиву и там где этот счетчик больше ту карту( рисунок) и считаем верным.

От этой цифры немного варьируются результаты при нынешней формуле.
То есть всего 4418 пикселей. Примерно значение суммы разницы всех расстояний до совпадения с картой базы порядка 250 000 000. Получаю среднее расстоянние 250 000 000/4418 порядка 55 000. При таком значении(2000) в эту зону входят до сотен или более 1 тысячи пикселей( самое лучшее совпадение) из всех 4418 пикселей.
Сейчас если пытаюсь отставить только:
Код:
Sqr((G[i1,j]-G2)*2 +(R[i1,j]-R2)+(B[i1,j]-B2));
то получается хуже, хотя мало сравнений чтобы представить общую картину.
Сумма всех расстояний также составляет сотни миллионов.

Все усложняется тем, что мне невозможно проверить любые действия из-за малых входных данных. Нужно играть в игру постоянно, чтобы проверять,а это очень много времени.

Последний раз редактировалось Illusiony; 12.05.2015 в 19:49.
Illusiony вне форума Ответить с цитированием
Старый 12.05.2015, 19:45   #28
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

А давно у меня было по RGB:
Код:
(R[i1,j]-R2)*(R[i1,j]-R2)+(G[i1,j]-G2)*(G[i1,j]-G2)+(B[i1,j]-B2)*(B[i1,j]-B2);
Теперь после некоторой корректировки области скрина для входных данных все 3 варианта дают ( на небольшой выборке) сравнимые достаточно высокие результаты.
Illusiony вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сравнить два string? demigod82 Общие вопросы C/C++ 3 08.05.2012 23:07
Сравнить два файла demiancz Общие вопросы Delphi 22 16.02.2011 15:29
Сравнить два текстовых файла assch Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 17 29.09.2010 14:41
Сравнить два множества. Pascal MaxMelnikov Помощь студентам 3 16.03.2009 09:35
Сравнить два файла Aleksandr Microsoft Office Excel 6 07.10.2008 00:22