рефераты рефераты
Главная страница > Курсовая работа: Распознавание графических символов  
Курсовая работа: Распознавание графических символов
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Курсовая работа: Распознавание графических символов

buttonTeach.Enabled = true;

buttonLoadTeaching.Enabled = true;

buttonSaveTeaching.Enabled = false;

break;

case FormState.Teached:

buttonOpen.Enabled = true;

buttonSegment.Enabled = false;

buttonRecognize.Enabled = true;

buttonTeach.Enabled = false;

buttonLoadTeaching.Enabled = false;

buttonSaveTeaching.Enabled = true;

enableRecognize = true;

break;

case FormState.Deserialized:

buttonOpen.Enabled = true;

buttonSegment.Enabled = false;

buttonRecognize.Enabled = true;

buttonTeach.Enabled = false;

buttonLoadTeaching.Enabled = false;

buttonSaveTeaching.Enabled = true;

enableRecognize = true;

break;

case FormState.Recognized:

buttonOpen.Enabled = true;

buttonSegment.Enabled = false;

buttonRecognize.Enabled = true;

buttonTeach.Enabled = false;

buttonLoadTeaching.Enabled = true;

buttonSaveTeaching.Enabled = true;

break;

}

}

public FormMain()

{

InitializeComponent();

}

private void buttonOpen_Click(object sender, EventArgs e)

{

try

{

Bitmap b;

if (openFileDialog1.ShowDialog() == DialogResult.OK)

pictureBoxMain.Image = b;

else

{

this.ButtonsEnabled(FormState.Empty);

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void buttonSegment_Click(object sender, EventArgs e)

{

//Получаем набор битмапов соответствующих словам текста

words = Segmentation.GetWords((Bitmap)pictureBoxMain.Image);

dataGridViewSegments.RowCount = words.Count;

int i =0;

//Перебираем слов и отображаем в таблице

foreach (Bitmap word in words)

{

dataGridViewSegments.Rows[i].Cells[0].Value = word;

i++;

}

ButtonsEnabled(FormState.Segmented);

}

private void buttonRecognize_Click(object sender, EventArgs e)

{

int i = 0;

foreach (Bitmap word in words)

{

dataGridViewSegments.Rows[i].Cells[1].Value = r.Recognize(Recognizer.NormalizeBitmap(word,imSize));

i++;

}

ButtonsEnabled(FormState.Recognized);

}

private void buttonTeach_Click(object sender, EventArgs e)

{

//Перебираем слова и обучаем ими

//т.к. класса для распознаваня два то

//первый класс обучаем просто изображение слова

//а второй обучаем противопорложным изображение(т.е инвертируем цвета исходного изображения)

for (int i = 0; i < 5; i++)

{

foreach (Bitmap word in words)

{

r.Teach(Recognizer.NormalizeBitmap(word, imSize), 0);

r.Teach(Recognizer.InverseBitmap(Recognizer.NormalizeBitmap(word, imSize)), 1);

}

}

ButtonsEnabled(FormState.Teached);

}

private void buttonSaveTeaching_Click(object sender, EventArgs e)

{

r.SerializeParams();

ButtonsEnabled(FormState.Serialized);

}

private void buttonLoadTeaching_Click(object sender, EventArgs e)

{

r.DeserializeParams();

ButtonsEnabled(FormState.Deserialized);

}

private void FormMain_Load(object sender, EventArgs e)

{

this.ButtonsEnabled(FormState.Empty);

}

}

// <summary>

/// Состояния изображения

/// </summary>

enum FormState

{

/// <summary>

/// изображение не открыто

/// </summary>

Empty,

/// <summary>

/// Изображение открыто

/// </summary>

Open,

/// <summary>

/// Сегментировано

/// </summary>

Segmented,

/// <summary>

/// Персептрон обучен

/// </summary>

Teached,

/// <summary>

/// Параметры персептрона сохранены

/// </summary>

Serialized,

/// <summary>

/// Параметры персептрона загружены

/// </summary>

Deserialized,

/// <summary>

/// Распознано

/// </summary>

Recognized

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using System.Windows.Forms;

using System.IO;

using System.Runtime.Serialization.Formatters.Binary;

namespace WordSearcher

{

/// <summary>

/// Реализует распозноание изображений

/// на базе персептрона

/// </summary>

class Recognizer

{

/// <summary>

/// матрица знаков входов персептрона

/// </summary>

private int[,] xa;

/// <summary>

/// Массив лямд

/// </summary>

private int[,] l;

/// <summary>

/// Массив имен классов

/// </summary>

private string[] classes = {"Указ",

"Не указ"};

/// <summary>

/// Массив имен классов

/// </summary>

public string[] ClassesList

{

get { return classes; }

}

/// <summary>

/// Инициализирует xa-матрицу

/// </summary>

/// <param name="sz">размер изображения</param>

/// <param name="aCount">количесвто а-элементов</param>

/// <param name="lCount">количесвто классов</param>

public Recognizer(Size sz, int aCount, int lCount)

{

Random r = new Random();

//Создание матрцы ха

xa = new int[sz.Height * sz.Width, aCount];

//Создание матрицы лямд

l = new int[lCount,aCount];

//Первоначальная

//иницализация лямд еденицами

for (int i = 0; i < l.GetLength(0); i++)

{

for (int j = 0; j < l.GetLength(1); j++)

{

l[i, j] = 1;

}

}

//заполнение матрицы

//для каждого рецептора(строчки)

//назначаетя только один а-элемент(столбец) со знаком + или -

for (int i = 0; i < xa.GetLength(0); i++)

{

xa[i, r.Next(aCount)] = (int)Math.Pow(-1, r.Next(1, 3));

}

}

/// <summary>

/// Обучение персептрона

/// </summary>

/// <param name="b">битмап для обучения</param>

/// <param name="classindex">имя класса к ккоторому относиться изображение</param>

public void Teach(Bitmap b, int classindex)

{

int[] x = new int[b.Height * b.Width];

int k = 0;

//Инициализация входных рецепторов

for (int i = 0; i < b.Width; i++)

{

for (int j = 0; j < b.Height; j++)

{

if (b.GetPixel(i, j) == Color.FromArgb(0, 0, 0))

x[k] = 1;

k++;

}

}

//Вектор сумм рецепторов

int[] sumx = new int[xa.GetLength(1)];

//Вектор выходов А-элементов

int[] outa = new int[xa.GetLength(1)];

//суммирование сигналов от рецепторов

for (int i = 0; i < xa.GetLength(1); i++)

{

for (int j = 0; j < xa.GetLength(0); j++)

{

sumx[i] += x[j] * xa[j, i];

}

//Если сумма больше нуля выход а элемента 1

if (sumx[i] > 0)

outa[i] = 1;

}

//изменение коэфициетов лямда

for (int i = 0; i < outa.Length; i++)

{

//Если а-элемент возбужден то изменяем лямды

if (outa[i] == 1)

{

//перебор всех классов

for (int j = 0; j < l.GetLength(0); j++)

{

//Увеличение на 1 лямд для класса который обучается

//и уменьшение для всех осатльных

if (classindex == j)

l[j, i]++;

else

l[j, i]--;

}

}

}

}

/// <summary>

/// Распознавание изобржения

/// </summary>

/// <param name="b">битмап изображения</param>

/// <returns>имя класса к которому отнесено изображение</returns>

public string Recognize(Bitmap b)

{

int[] x = new int[b.Height * b.Width];

int k = 0;

//Инициализация входных рецепторов

for (int i = 0; i < b.Width; i++)

{

for (int j = 0; j < b.Height; j++)

{

if (b.GetPixel(i, j) == Color.FromArgb(0, 0, 0))

x[k] = 1;

k++;

}

}

//Вектор суммрецепторов

int[] sumx = new int[xa.GetLength(1)];

//Вектор выходов А-элементов

int[] outa = new int[xa.GetLength(1)];

//суммирование сигналов от рецепторов

for (int i = 0; i < xa.GetLength(1); i++)

{

for (int j = 0; j < xa.GetLength(0); j++)

{

sumx[i] += x[j] * xa[j, i];

}

//Если сумма больше нуля выход а элемента 1

if (sumx[i] > 0)

outa[i] = 1;

}

//Создание масива значений сумматоров

//каждый для отдельного класса

int[] sum = new int[l.GetLength(0)];

//Нахождение значений сумматоров для каждого класса

for (int i = 0; i < sum.Length; i++)

{

for (int j = 0; j < xa.GetLength(1); j++)

{

sum[i] += outa[j] * l[i, j];

}

}

//нахождение максимального значения сумматор

//именно оно соответствует распознанному классу

int max = sum[0];

int maxindex = 0;

for (int i = 1; i < sum.Length; i++)

{

if (max < sum[i])

{

max = sum[i];

maxindex = i;

}

}

//Возвращается имя класса с максимальным значением сумматора

return classes[maxindex];

}

/// <summary>

/// Сериализация массива лямд(сохранение в файл) для сохранения обученяи персептрона

Страницы: 1, 2, 3, 4, 5

рефераты
Новости