Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Сравнение картинок (http://forum.oszone.net/showthread.php?t=123902)

laro4ka 24-11-2008 10:28 961727

Сравнение картинок
 
Подскажите, пожалуйста, как сравнить изображения букв, наподобие распознавания (Builder желательно)? Может, у кого-нить есть работающий код подобной программы? Пожалуйста! Очень нужно!!

pva 24-11-2008 11:48 961813

кода нет, идею подскажу:
1. допустим текст почти выровнен по строчкам горизонтально
2. вычисляешь высоту строчки - отсюда размер шрифта
3. рисуешь в картинку алфавит шрифтом данного размера
4. Начинаешь проходить строчки от начала до конца с шагом распознанной буквы
5. Для распознавания буквы используешь операцию кореляции
Код:

double corr = 0.;
double mid1 = 0.;
double mid2 = 0.;

for(x=0; x<X; ++x)
  for(y=0; y<Y; ++y)
    mid1 += image1[x+x_offset,y+y_offset];

mid1/=X*Y;

for(x=0; x<X; ++x)
  for(y=0; y<Y; ++y)
    mid2 += image2[x,y];

mid2/=X*Y;

for(x=0; x<X; ++x)
  for(y=0; y<Y; ++y)
    corr+=(image1[x+x_offset,y+y_offset] - mid1)*(image2[x,y] - mid2);

та буква, у которой corr будет максимальным по модулю и есть мамая похожая. Нужно правда минимальный порог установить, вдруг неизвестный символ.
Работает эта процедура очень медленно. Надёжность как у файнридера тоже не гарантирую.

laro4ka 24-11-2008 12:11 961837

а если у меня картинка одной буквы, т е на картинке больше кроме нее нет ничего?

pva 24-11-2008 13:13 961910

значит проблем меньше. x_offset=0, y_offset=0, не надо пункты 1,2,4: сделать набор 33 букв (для нашего алфавита), посчитать 33 кореляции и выбрать максимальную

laro4ka 25-11-2008 11:24 962931

Большой спасип!!


Время: 23:48.

Время: 23:48.
© OSzone.net 2001-