Распознавание графических символов

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

//коэф. подобран вручную

spaceWidth = (int)Math.Round(sum * 0.45 / n + 0.1);

//начальная координата слова

int wordBegin = 0;

//конечная координат слова

int wordEnd = 0;

//флаг указывающий на то найденно ли начало слова или нет

//перволдится обратно в фолс после нахождения конца слова

bool wordFound = false;

//Счетчик ширины белой полоски

int whiteWidth = 0;

//Выделение слов

for (int i = 0; i < whiteLineIndexes.Count - 1; i++)

{

//если линии не соседние и флаг wordFound фолс т.е.

//слово еще не найдено

//запоминаем координату певрой линии это будет

//координатой началом слова

if ((whiteLineIndexes[i + 1] - whiteLineIndexes[i] > 1) &&

!wordFound)

{

//обнуление счетчика идущих подряд белыхз линий

whiteWidth = 0;

//флаг найденного слова в тру

wordFound = true;

//инициализируем начальную координату слова

wordBegin = whiteLineIndexes[i];

}

//инициализируем конечную координату слова

//если найдены не сосдение линии

//но не обрезаем битмап и не добавлям его в коллекцию

//т.к. необходисмо зделать проверку на ширину пробела

if ((whiteLineIndexes[i + 1] - whiteLineIndexes[i] > 1) &&

wordFound)

{

whiteWidth = 0;

wordEnd = whiteLineIndexes[i + 1];

}

//Если найденны соседние белые линии

//инкремируем счетчик белых линий и сравниваем ширину идущих подрд белых линий

//с ранее высчитаной средней шириной пробела

if (whiteLineIndexes[i + 1] - whiteLineIndexes[i] == 1)

{

whiteWidth++;

if ((whiteWidth >= spaceWidth) &&

(wordEnd - wordBegin > 1))

{

//Обрезаем и добавляем слово в коллекцию

words.Add(TrimBitmap(

str.Clone(

new Rectangle(

wordBegin,

0,

wordEnd - wordBegin + 1,

str.Height),

System.Drawing.Imaging.PixelFormat.Format24bppRgb)

)

);

//обнуляем счетчики

//и флаги

whiteWidth = 0;

wordFound = false;

wordBegin = 0;

wordEnd = 0;

}

}

}

return words;

}

///

/// Получить битмапы всех слов в тексте

///

///

///

public static List GetWords(Bitmap text)

{

List strs = GetStrings(text);

List();

foreach (Bitmap str in strs)

{

foreach (Bitmap word in GetStringWords(str))

{

words.Add(word);

}

}

return words;

}

///

/// Обрезка белых полей вокруг изображения на битмапе

///

///

///

public static Bitmap TrimBitmap(Bitmap bmp)

{

int left = 0;

int right = 0;

int top = 0;

int bottom = 0;

bool go = true;

//проход сверху

for (int j = 0; (j < bmp.Height) && go; j++)

{

for (int i = 0; (i < bmp.Width) && go; i++)

{

if (bmp.GetPixel(i, j) != Color.FromArgb(255, 255, 255))

{

go = false;

top = j;

}

}

}

go = true;

//проход снизу

=0)&&go;j--)">for (int j = bmp.Height - 1; (j >= 0) && go; j--)

{

for (int i = 0; (i < bmp.Width) && go; i++)

{

if (bmp.GetPixel(i, j) != Color.FromArgb(255, 255, 255))

{

go = false;

bottom = j;

}

}

}

go = true;

//проход слева

for (int i = 0; (i < bmp.Width) && go; i++)

{

for (int j = 0; (j < bmp.Height) && go; j++)

{

if (bmp.GetPixel(i, j) != Color.FromArgb(255, 255, 255))

{

go = false;

left = i;

}

}

}

go = true;

//проход спарва

=0)&&go;i--)">for (int i = bmp.Width - 1; (i >= 0) && go; i--)

{

for (int j = 0; (j < bmp.Height) && go; j++)

{

if (bmp.GetPixel(i, j) != Color.FromArgb(255, 255, 255))

{

go = false;

right = i;

}

}

}

return bmp.Clone(new Rectangle(left, top, right - left + 1, bottom - top + 1), System.Drawing.Imaging.PixelFormat.Format24bppRgb);

}

}

}

 

ОПИСЬ ЛИСТОВ ГРАФИЧЕСКОЙ ЧАСТИ

 

Лист 1 Схема приложения

 

Функциональная схема приложения

 

Лист 2 Диаграмма классов

 

 

Лист 3 Результаты работы программы.

 

 

Лист 4 Схема алгоритма сегментации текста.