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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Andrewshkovskii
сообщение 8.12.2009 19:38
Сообщение #2


Бывалый
***

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

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


Ну я вообще говорил про то, что как строить пиксельную сетку из матрицы ?
Умножать индекс элемента на 8, и это будет координата пикселя?
Только вот у меня проблема в том, что цвета какие-то странные дает pixel(int x,int y) у QImage,а точнее, их там более 30 разных возвращает.. Ведь pixel() возвращает QRgb, что есть тайпдеф для unsigned int , и почему-то их там много очень получается. а должно , по-логике , быть 2.. wacko.gif
И из-за этого матрица будет вся в нулях.
Рисую-то я вот так

//Ручка.
//drawPen.setColor(Qt::black);
//drawPen.setCapStyle(Qt::RoundCap);
//drawPen.setBrush(Qt::SolidPattern);
//drawPen.setWidth(17);
//drawPen.setStyle(Qt::SolidLine);
//drawPen.setJoinStyle(Qt::RoundJoin);
bool recognizer::eventFilter(QObject *o, QEvent *e)
{
//что бы не наследоваться от Qlabel, и не придумывать свою рисовалку, установил фильтер событий да место рисования (QPixmap в QLabel)
QMouseEvent me = *(static_cast<QMouseEvent*> (e));
if (o == ui->inputSymbolFiled)
{
if (me.type()== QEvent::MouseButtonPress)
{
if(me.button() == Qt::LeftButton)
{
painter->begin(inputSymbolPixmap);
painter->setRenderHint(QPainter::HighQualityAntialiasing,true);
painter->setPen(drawPen);
painter->drawLine(me.pos(),me.pos());
painter->end();
lastpoint=me.pos();
ui->inputSymbolFiled->setPixmap(*inputSymbolPixmap);
return true;
}
}else
if (me.type() == QEvent::MouseMove)
{
painter->begin(inputSymbolPixmap);
painter->setRenderHint(QPainter::HighQualityAntialiasing,true);
painter->setPen(drawPen);
painter->drawLine(lastpoint,me.pos());
painter->end();
lastpoint=me.pos();
ui->inputSymbolFiled->setPixmap(*inputSymbolPixmap);
return true;
}
}
return QWidget::eventFilter(o,e);
}



Upd : Добавил исходники...

Сообщение отредактировано: Andrewshkovskii - 8.12.2009 19:53


Прикрепленные файлы
Прикрепленный файл  recognizer.zip ( 11.75 килобайт ) Кол-во скачиваний: 128
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
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:22
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"