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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение фотографий 
:(
    Опции темы
Mach3
Дата 6.2.2008, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здрасте...
Проблема в следующем....
Получаю с web камеры две фотографии с интревалом три секунды...
Затем сравниваю:
Код

bmp := TBitmap.Create;
bmp.LoadFromFile('c:\Terr1.bmp');
h:=bmp.Height;
w:=bmp.Width;
canvas.Draw(0,0,bmp);
bmp.LoadFromFile('c:\Terr1a.bmp');
canvas.Draw(w+50,0,bmp);
bmp.Free;
  ....
for i:=0 to w do begin
  for j:=0 to h do begin
if  Canvas.Pixels[i,j]= Canvas.Pixels[i+W+50,j]
then begin
 Canvas.Pixels[i+w+50,j]:=clgreen;

Фотографии вроде одинаковые, а более 80 % разные...
 Почему так?
  Можно-ли как-нибудь реализоваь подобное?
--------------------
Век живи - век учись...
PM MAIL ICQ   Вверх
merge
Дата 6.2.2008, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 smile 

а ты незнаешь, что на фото вляет освещение, которое нестатично. будь оно солнечное, будь лампа дневного света/накаливания. Также сжатие картинки при передаче усугубляет это. поэтому картинки только визуально одинаковые.

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

ЗЫ а вообще у меня дома есть линк на страницу с алгоритмами. вечером постану.
PM MAIL   Вверх
Alexeis
Дата 6.2.2008, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Вместо if  Canvas.Pixels[i,j]= Canvas.Pixels[i+W+50,j] следует написать.

Код

  if (abs(GetRValue(Canvas.Pixels[i,j]) - GetRValue(Canvas.Pixels[i+W+50,j]))  +
      abs(GetGValue(Canvas.Pixels[i,j]) - GetGValue(Canvas.Pixels[i+W+50,j]))  +
      abs(GetBValue(Canvas.Pixels[i,j]) - GetBValue(Canvas.Pixels[i+W+50,j])) )  < 10
  then
    Canvas.Pixels[i+w+50,j]:=clgreen;


Т.е. допустить небольшое отклонение.


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

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

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


Бывалый
*


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

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



Благодарю...
Работает...
Только вот слишком долго... Видимо из-за того что не напрямую в памяти работаем....
Можно-ли как-нибудь ускорить процесс?
Как сравнить фотки в памяти учитывая погрешность?
Извиняюсь за назойливость...
--------------------
Век живи - век учись...
PM MAIL ICQ   Вверх
merge
Дата 7.2.2008, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

ЗЫ я забыл вечером постануть линк =) да ты впринципе сам можешь в гугле найти по слолвам алгоритмы нахождения одинаковых изображений
PM MAIL   Вверх
Alexeis
Дата 7.2.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(Mach3 @  7.2.2008,  05:17 Найти цитируемый пост)
Только вот слишком долго... Видимо из-за того что не напрямую в памяти работаем....
Можно-ли как-нибудь ускорить процесс?

  В поиск по слову ScanLine избитая до нельзя тема.


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

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

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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