Распознавание графических символов
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
//коэф. подобран вручную
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 Схема алгоритма сегментации текста.