IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Алгоритм распознования образов, основанный на Хеминговой мере близости. c++/Qt
Andrewshkovskii
сообщение 8.12.2009 15:34
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


Суть такая : есть эталонная картинка с символом, пользователь в поле ввода, рисует свой символ, после чего, программа должна распознать введенный символ и указать процент вероятности.
вот примерно вот как Здесь или тут.
Интерфейс я прикрутил, рисовалку сделал. Но есть одна мне не понятная штука , вот первый шаг алгоритма :
Цитата
Шаг 1. [Преобразование символов] Шаблоны распознаваемых M
символов разбивают на растровые картинки размером 30х30. В том случае,
если на ячейку накладывается символ, ей приписывают единицу, в
противном случае - ноль (см. рис. 2).

Допустим, у меня есть QPixmap размером 231х231, из него я получаю QImage(что бы можно было получить доступ к пикселам) такого же размера. Но тут встает вопрос..как делить картинку на растры 30х30? В смысле, определить цвет-то то я смогу (для того, что бы узнать, находиться символ в растре или нет) , а вот как поделить и отрисовать пиксельную сетку, при учете, что изображение шириной и высотой 231 будет всего 7 полных квадратов 30х30... norespect.gif
Прикладываю методичку к посту..


Прикрепленные файлы
Прикрепленный файл  Распознавание_образов.pdf ( 276.95 килобайт ) Кол-во скачиваний: 1787
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 9.12.2009 12:12
Сообщение #2


Гость






Так... Прочитал я, как ты прокомментировал код из сообщения №8, и что-то мне кажется, что ты не до конца понимаешь, что там происходит...

Итак, вот тот же фрагмент, но с моими комментариями:
    // почему ты избавляешься от константности - непонятно. У меня наоборот
// выработалась привычка: все, что только можно объявлять со спецификатором const
const int value = 33;

for(int i=0;i<w;++i)
for(int j=0;j<h;++j)
// проверяем каждый пиксель на черный цвет, и если да, то добавляем
// к ячейке матрицы, к которой принадлежит этот пиксель, единицу. Другими
// словами - здесь идет подсчет черных пикселей в каждой из областей 8*8
matrix[j/8][i/8]+=(image.pixel(i, j) == QColor(Qt::black).rgb())? 1 : 0;
for(int i = 0; i < 30; i++)
{
for(int j = 0; j < 30; j++)
{
// А теперь, устанавливаем ячейку в 0, если черных пикселов в соотв. области
// было найдено меньше, чем задано в value, иначе устанавливаем в 1
// Эту строку (с делением) можно заменить на:
// matrix[i][j] = (matrix[i][j] > value) ? 1 : 0;
// или, что одно и то же:
// if(matrix[i][j] > value) matrix[i][j] = 1; else matrix[i][j] = 0;
matrix[i][j] /= value;
cout << matrix[i][j] << " ";
str.append(QString::number(matrix[i][j])); // число в строку
etalonArray.push_back(matrix[i][j]); // etalonArray - qVector <int>
}
arrayList << str;
str.clear();
}
Обрати внимание, как проверяется цвет. Лучше не завязываться на "магические числа"...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Andrewshkovskii   Алгоритм распознования образов   8.12.2009 15:34
volvo   Я бы сделал так: берем QPicture размером 240*240 (...   8.12.2009 16:00
Andrewshkovskii   Ну не QPicture ты имел ввиду,а QImage, наверное?:)...   8.12.2009 17:08
volvo   Бррр... Мы по-моему с тобой на разных языках говор...   8.12.2009 17:22
Andrewshkovskii   Я понимаю, что начинаю опять тебя злить..Но я пыта...   8.12.2009 17:56
volvo   В общем, рисует пользователь изображение на QImage...   8.12.2009 19:12
Andrewshkovskii   Ну я вообще говорил про то, что как строить пиксел...   8.12.2009 19:38
Andrewshkovskii   "Эмпирическим".. путем я попытался найти...   8.12.2009 21:08
Andrewshkovskii   Почему появилась 2ой - понял, из-за matrix[i/8][j/...   8.12.2009 21:36
volvo   :lol: Это я стормозил... Если i это ширина, а j -...   8.12.2009 21:37
Andrewshkovskii   хех..Понятно..Спасибо.но вот мой основной вопрос, ...   8.12.2009 21:45
volvo   Почему ты рассматриваешь только один пиксель? Если...   8.12.2009 21:51
Andrewshkovskii   А почему.. +7, тоесть это какая-то переменная от 0...   8.12.2009 22:20
volvo   Ну, потому, что если индекс = 0, то у нас пикселы ...   8.12.2009 22:31
Andrewshkovskii   Хм..ну верно, ага, спасибо!   8.12.2009 22:40
volvo   Так... Прочитал я, как ты прокомментировал код из ...   9.12.2009 12:12
Andrewshkovskii   Ну единственное что было не понятно, так это почем...   9.12.2009 13:52


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 26.07.2025 8:15
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"