Технология обработки изображений и распознавания образов
Оптико-электронная система идентификации объектов подвижного состава железнодорожного транспорта. Автоматический комплекс распознавания автомобильных номеров. Принципы и этапы работы систем оптического распознавания. Особенности реализации алгоритмов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 26.11.2013 |
Размер файла | 887,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
, Гц.
Для этого необходимо определить:
суммарную эффективную площадь (принимаем в расчетах рабочее давление в камерах Па)
;
собственную частоту колебаний
= 2,62 Гц
Определяем коэффициент передачи пневморезиновых амортизаторов
Динамическая сила, передаваемая на основание,
= 1440 Н
Рассчитываем амплитуду перемещений основания виброплощадки:
= 0,00062 см =
= 0,00062 мм < =0,009 мм
При применении пневморезиновых амортизаторов амплитуда перемещений фундамента (основание виброплощадки) не превышает допустимой величины.
7.4 Бактериологическое поражение
ЅЗона бактериологического заражения - это территория, в пределах которой в определенных временных границах возможно заражение людей возбудителями инфекционных заболеваний.
Бактериологическое (биологическое) воздействие проявляется в способности вызвать массовые инфекционные заболевания людей и животных, которые быстро передаются от больного к здоровому. Возбудителями инфекционных заболеваний являются болезнетворные микроорганизмы (яды) носителями, которых могут быть насекомые, животные, человек, среда обитания и бактериологическое оружие.
Признаки применения бактериологического оружия: в местах разрывов боеприпасов наблюдаются капли жидкости или порошкообразных веществ на почве, растительности и предметах; скопление насекомых, грызунов, массовые заболевания людей и животных.
Для предотвращения распространения заболеваний устанавливается обсервация и карантин.
Обсервация - это применение режимных мер, обеспечивающих максимальное ограничение въезда и выезда, а также вывоза из зоны (очага) заражения имущества без обеззараживания, усиленный медицинский контроль, ограничение движения по территории и общения между группами людей.
Карантин - это система противоэпидемических мероприятий: изоляция очага поражения и ликвидация в нем заболеваний; на внешних границах зоны карантина устанавливается вооруженная охрана, на объектах - комендантская служба.
Рабочие смены разбиваются на отдельные (возможно меньше) группы с минимальным контактом друг с другом, прекращается деятельность учреждений, связанных со скоплением людей.
В зонах обсервации и карантина проводится дезинфекция, дезинсекция и дератизация (уничтожение насекомых и грызунов).Ѕ [13]
ЅПрогнозирование бактериологического заражения - метод ориентировочного выявления и оценки обстановки, складывающейся в результате бактериологического заражения местности. При прогнозировании определяются границы зон заражения, а также потери населения и ущерб народному хозяйству.
Мероприятия, необходимые для предотвращения ущерба от бактериологического заражения, подразделяются на фоновые и защитные.
Фоновые (постоянно проводимые) основаны на долгосрочном прогнозе: надежная система оповещения населения об опасности, устройство защитных сооружений, обеспечение населения средствами индивидуальной защиты, организация бактериологического наблюдения, разведки и лабораторного контроля, обучение населения правилам поведения и действиям в условиях бактериологического заражения.
Защитные мероприятия после предсказания момента бактериологического заражения: развертывание систем наблюдения и разведки для уточнения прогноза, ввод в действие специальных правил функционирования экономики и общественной жизни, нейтрализация источников (объектов) повышенной опасности, готовность спасательных служб, частичная эвакуация населения.Ѕ [1]
ЅПланирование позволяет конкретизировать достижение целей во времени, ресурсам и исполнителям, составляются планы, которые состоят из следующих элементов: конкретные показатели (виды работ, мероприятия), сроки выполнения этих работ, необходимые ресурсы, способы контроля над выполнением работ.
Реальность плана проверяется в ходе тренировок и учений.
Защита населения при бактериологическом заражении - это комплекс мероприятий, имеющих цель не допустить неблагоприятного воздействия последствий заражения или ослабить степень его воздействия.
Принципы обеспечения безопасности по признаку их реализации делятся на три группы:
Заблаговременная подготовка - накопление средств защиты (коллективных и индивидуальных) от опасных и вредных факторов и поддержание их в готовности для использования населением.
Дифференцированный подход - характер и объем защитных мероприятий устанавливается в зависимости от вида бактериологического заражения.
Комплексность мероприятий - эффективность применения средств и способов защиты от последствий бактериологического заражения.
Способы защиты населения в условиях бактериологического заражения подразделяются на:
1) эвакуация населения;
2) укрытие в защитных сооружениях;
3) средства индивидуальной защиты (предназначены для защиты от попадания внутрь организма, на кожные покровы, одежду бактериальных средств);
4) медицинские средства индивидуальной защиты - профилактика и медицинская помощь населению в условиях бактериологического поражения.
Для обеспечения безопасности населения большое значение имеют: обучение населения действиям в условиях бактериологического заражения, своевременное оповещение об угрозе возникновения заражения, организация и проведение бактериологической разведки, создание запасов материальных средств для проведения спасательных и др. работ.
Рассредоточение и эвакуация населения - один из способов защиты населения от оружия массового поражения.
Рассредоточение - это организованный вывоз из городов и других населенных пунктов и размещение в загородной зоне, свободной смены работающих и служащих объектов, продолжающих работу в военное время.
Эвакуация - организованный вывоз или вывод из населенных пунктов и городов и размещение в загородной зоне населения для постоянного проживания до особого распоряжения.
Районы эвакуации и рассредоточения назначаются для каждого предприятия, учебного заведения на удалении от города на безопасное расстояние по производственному признаку и по месту жительства.
Вывоз населения производится любым транспортом и пешком через эвакуационные пункты, под которые обычно отводятся общественные здания (школы, клубы).
Различают средства защиты индивидуальные (СИЗ), первой медицинской помощи (ПМП) и коллективные (КСЗ).
По назначению СИЗ подразделяются на средства защиты органов дыхания, кожи и медицинские.
По принципу действия СИЗ делятся на фильтрующие и изолирующие, по способу изготовления - на промышленного изготовления и изготовленные населением из подручных материалов.
При аварийной ситуации или угрозе нападения противника работающие получают СИЗ на своих объектах, население - в ЖЭКах.
Средства защиты органов дыхания - это противогазы, защищающие также лицо, глаза; респираторы, фильтрующие противогазы ГП-5, ГП-5м, ГП-7, ГП-7В, состоящие из фильтрующе-поглощающей коробки, лицевой части (шлем-маска, маска), соединительной трубки; для защиты от окиси углерода - дополнительный патрон, присоединяемый между маской и фильтрующей коробкой. Для избирательного поглощения некоторых СДЯВ предназначены дополнительные патроны противогазовые (ДПГ-1, 3).
Изолирующие противогазы ИП-4, ИП-5, ИП-46, ИП-46М применяются при недостатке кислорода и когда фильтрующие не защищают. Воздух в них обогащается кислородом в регенеративном патроне.
Изолирующий противогаз состоит из лицевой части, регенеративного патрона, дыхательного мешка, каркаса и сумки.
Для защиты органов дыхания от грунтовой, радиоактивной пыли и бактериальных аэрозолей используют респираторы ШБ-1 («лепесток») разового действия, Р-2 и Р-3. Респиратор Р-3 защищает частично и от ОВ. Коэффициент проскока респираторов Кп=0,1%.
Респираторы Р-2 защищают от пыли, это фильтрующая полумаска с двумя клапанами вдоха, одним клапаном выдоха, оголовком (из тесемок) и носовым зажимом.
Кроме того применяется противопыльная тканевая маска ПТМ-1, состоящая из 2-4 слоев ткани ( корпус с вырезами для смотровых стекол ) и полосками ткани с резинками для крепления на голове.
Население самостоятельно изготовляет ватно-марлевые повязки из куска марли 100x50 см и ваты.
Для защиты кожи применяются:
ь изолирующие средства защиты кожи - изготавливаются из прорезиненной ткани, применяют при выполнении дегазационных работ (комбинезоны, костюмы);
ь фильтрующие средства защиты кожи - комплект одежды, защищающий от ОВ, пыли и бактериологических средств (может быть заменен обычной одеждой, пропитанной мыльно-масляной эмульсией - 2.5 л на комплект).
Простейшие средства защиты кожи - обычная одежда, обувь из резины, перчатки, рукавицы, капюшон.
Для защиты от паров ОВ одежду пропитывают моющими средствами ОП-7, ОП-10 или мыльно-масляной эмульсией.
Для оказания взаимопомощи и самопомощи применяются медицинские средства защиты: аптечка индивидуальная АИ-2, индивидуальный противохимический пакет (ИПП-8, ИПП-10 - флакон с дегазирующей жидкостью и 4 ватно-марлевых тампона), пакет перевязочный индивидуальный (ПП - бинт и 2 ватно-марлевых подушечки).Ѕ [7]
С целью своевременного предупреждения населения о возникновении опасности бактериологического заражения и необходимости применения мер защиты сигнал "Химическая тревога". Он подается при угрозе химического или бактериологического нападения (заражения). По этому сигналу следует надеть противогаз и укрыться в защитном сооружении, рисунок 7.4.1.
Рис.7.4.1 Убежище [1]
1 - входы; 2 - шлюзы; 3 - санитарные узлы; 4 - помещения для укрываемых людей; 5 - тамбуры и предтамбуры и выходы; 6 - фильтровентиляционные камеры; 7 - медицинская комната; 8 - кладовая для продуктов.
ЅВ очаге бактериологического (биологического) поражения проводится разведка и индикация бактериальных средств, устанавливается карантинный режим или обсервация (полная изоляция - карантин, ограничение въезда-выезда и вывоза без обеззараживания - обсервация, контроль зараженности продовольствия, воды, фуража и их обеззараживание, санитарно-разъяснительные работы и другие меры против распространения инфекции и заболеваний.
С целью восстановления транспортных средств, техники, состава формирований, объектов проводится специальная обработка, она может быть полная (возможность выполнения работ без средств защиты) и частичная (только без средств защиты кожи). Специальная обработка включает обеззараживание зараженных поверхностей.
Дезинфекция - уничтожение во внешней среде возбудителей заразных болезней. Различают профилактическую и очаговую, последняя разделяется на текущую и заключительную дезинфекцию.
Профилактическая - проводится до возникновения заболеваний путем применения моющих средств с бактерицидными добавками (пасты "Восточная", "Санит", порошки "Блеск", "Белизна" и др.).
Текущая - обеззараживание объектов внешней среды, а также выделений человека.
Заключительная - после госпитализации или смерти больного. Дезинфекция проводится химическим (разрушение микробов, токсинов дезинфицирующими веществами), физическим (кипячение белья, посуды и пр.) и механическим (срезание грунта) и комбинированным способами.
Для ликвидации заражения личного состава формирований и населения проводится санитарная обработка - это составная часть специальной обработки; она разделяется на частичную и полную.
Частичная - это механическая очистка открытых участков кожи, наружных поверхностей одежды, обуви, средств индивидуальной защиты или их протирание с помощью индивидуальных противохимических пакетов - носит временный характер.
Полная - обеззараживание тела препаратами, обмывка со сменой белья и одежды, дезинфекция снятой одежды - проводится службой санитарной обработки ГО на обмывочных пунктах и площадках и станциях обеззараживания одежды. Ѕ [1]
Заключение
Данный дипломный проект реализует ядро программного комплекса распознавания номеров вагонов - модуль распознавания. Задача создания всего комплекса выходит далеко за рамки дипломного проекта не только по объему программного кода, который необходимо создать, но и по объему необходимых материальных ресурсов: аппаратура, датчики, каналы связи.
Цель данного проекта - это создание модуля распознавания номеров вагонов, от устойчивой и надёжной работы которого зависит работоспособность и надежность всего программного комплекса в целом.
Для достижения поставленной задачи были выполнены следующие работы:
ь аналитический обзор существующих коммерческих OCR систем и сделан вывод о возможности их применения на железнодорожном транспорте;
ь произведён анализ предметной области и общих принципов работ систем OCR, на основе которого были разработаны основные алгоритмы работы будущего модуля распознавания;
ь разработанные алгоритмы были воплощены в программный код и протестированы;
ь был сделан обзор языков программирования с выбором наиболее подходящего для поставленной цели, обоснован его выбор и описаны достоинства этого языка;
ь произведен расчет экономических показателей дипломного проекта;
ь выполнено задание по экологичности и безопасности проекта, включающее в себя обзор систем управления безопасностью труда на предприятии, расчет виброгашения и анализ возможного бактериологического поражения.
ЅПрограммный комплекс распознавания номеров в системе автоматизации учёта вагонов на железной дорогеЅ теоретически разработан. В основе его лежит уже существующая и работающая система видео контроля, которая, к сожалению, не может быть применена к условиям данного проекта без доработки и модернизации. На модернизацию и само оборудование нужны достаточно крупные материальные средства, поэтому был разработан только модуль распознавания символов - основа программного комплекса.
В данный момент модуль распознавания проходит апробацию в лаборатории микропроцессорной техники Вологодского отделения филиала ФГУП «Северная железная дорога». Возможность внедрения проекта напрямую зависит от результатов апробации и финансирования.
Библиографический список
1) Атаманюк В.Г., Ширяев Л.Г., Акимов Н.И. Гражданская оборона. Учебник для вузов / Атаманюк В.Г., Ширяев Л.Г., Акимов Н.И. - М.: Высш. шк.,1986.- 207 с.
2) Безопасность жизнедеятельности. : Учебник / Под ред. проф. Э.А. Арустанова - 2-е изд., перераб. и доп. - М.: Издательский Дом «Дашков и К», 2000. - 678 с.
3) Белов В.В., Буянов В.А.. "Пальма" - система автоматической идентификации транспортных средств / Белов В.В., Буянов В.А. и др. //Железнодорожный транспорт. - №8, 2002. С. 54-59.
4) Белов С.В., Ильницкая А.В., Козьяков А.Ф. Безопасность жизнедеятельности. Учебник для вузов / Белов С.В., Ильницкая А.В., Козьяков А.Ф. и др.; Под общ. ред. С.В.Белова. - М.: Высш. шк., 1999. - 448 с,: ил.
5) Бобровский, С.И. Delphi7. учебный курс / С.И. Бобровский. - СПб.: Питер, 2003. 736с.: ил.
6) Вязникова, Л. В.. Технико-экономическое обоснование инвестиций в электроэнергетике: Методическое указание по выполнению организационно- экономической части дипломного проекта (для студентов дневной и заочной формы обучения) / Вязникова Л. В., Летунова Л.П., Толокнова Е.А.. - Вологда: ВоГТУ,2002. - 35 с.
7) Егоров П.Т., Шляхов И.А., Алабин Н. И. Гражданская оборона: Учебник для вузов / Егоров П.Т., Шляхов И.А., Алабин Н. И. - Изд. 3-е, перераб.- М.: Высш. школа, 1977. - 304 с.
8) Кукин П.П., Лапин В.Л., Подгорных Е.А. Безопасность жизнедеятельности. Безопасность технологических процессов и производств (Охрана труда): Учебное пособие для вузов / П.П. Кукин, В.Л. Лапин, Е.А. Подгорных и др. - М.: Высш. шк., 1999. - 318с. : ил
9) Русин В.И., Орлов Г.Г., Неделько Н.М. Охрана труда в строительстве. Инженерные решения: Справочник / В.И. Русин, Г.Г. Орлов, Н.М. Неделько и др. - К.: Будивэльнык, 1990. - 208 с.
10) Сегментация символов. - Режим доступа: http://ocr.apmath.spbu.ru/ocr_algor.html
11) Сегментация слов. - Режим доступа: http://ocr.apmath.spbu.ru/ocr_algor.html
12) Сегментация строк. - Режим доступа: http://ocr.apmath.spbu.ru/ocr_algor.html
13) Седельников Ф.И. Безопасность жизнедеятельности (охрана труда): Учебное пособие / Ф.И. Седельников. - Вологда: ВоГТУ. 2001 - 388 с.: ил.
14) Тейксейра С., Пачеко К. Borland Delphi 6. Руководство разработчика.: Пер. с англ./ Тейксейра С., Пачеко К. - М.: Издательский дом "Вильямс", 2002. 1120с.: ил.
15) Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие./ Фаронов В.В. - М.: «Нолидж», 1999. - 616 с.: ил.
16) SIAMS600 Промышленная система анализ изображений. - Режим доступа: http://siams.com/siams600/default_ru.htm
Приложение 1
Приложение 2
Приложение 3
Приложение 4
Приложение 5
Приложение 6
Листинг программы [5],[14],[15]
type
Shirina = record
Nachalo, Konez: integer;
end;
var
Form1: TForm1;
S_Row: Array [0..100]of integer; // высота картинки 100 пикселей
S_Im: LongInt;
S_Col: Array [0..250]of integer; // ширина картинки 250 пикселей
S_Im_Col: LongInt;
hi, long : integer;
k: integer;
NLine : Array[1..10] of shirina;
NCol : Array[1..10] of Shirina;
CountFile : byte;
S_Word: Array [0..100]of integer; // ширина картинки 100 пикселей
WJ_min: array[0..20]of integer;
dlina: Array[0..20]of integer;
S_ImW: LongInt;
implementation
{$R *.dfm}
// работа со строкой
procedure FindBorder(Im1,Im2: TImage);
var s_mp: double; //ниже этой границы - фон
Im_beg,Im_End: boolean;
i, t: integer; // счетчик
nach, kon : integer;
max, maxstr: integer;
R1 : TRect;
const kmp = 1.1253;
begin
Im_beg :=False;
Im_End :=False;
s_mp := kmp * S_Im;
i:=0; t:=0; max:=0;
while i<= hi-1 do
begin
if (Im_beg =False) then
if (S_ROW[i-1] < s_mp)and(S_ROW[i-2] < s_mp)and
(S_ROW[i+1] > s_mp)and(S_ROW[i+2] > s_mp) then//and(S_ROW[i+3] > s_mp)
begin //нашли область устойчивого повышения яркости
inc(t);
NLine[t].Nachalo:=i; //запомнить начало
Im_beg:= True;
end;
if (Im_beg = True)and(Im_end =False) then
if (S_Row[i] < s_mp)and(S_ROW[i+1] < s_mp)and(S_ROW[i+2] < s_mp)then
begin //нашли область устойчивого понижения яркости
NLine[t].Konez:=i; //запомнить конец
Im_End:= True;
end;
if (Im_beg = True)and(Im_end = True)then
begin
Im_beg :=False;
Im_End :=False;
end;
if S_Row[i]> max then begin max:= S_Row[i]; maxstr:=i end;
inc(i);
end;
for i:=1 to t do
begin
if (maxstr > NLine[i].Nachalo)and(maxstr < NLine[i].Konez)then
begin
with R1 do begin
Left:= 0;
Top:= NLine[i].Nachalo;
Right:= Im1.Width;
Bottom:=NLine[i].Konez;
end;
Im2.Picture.Bitmap.Width:= Im1.Width;
Im2.Picture.Bitmap.Height:= NLine[i].Konez - NLine[i].Nachalo;
Im2.Canvas.CopyRect(Rect(0,0,Im1.Width, NLine[i].Konez - NLine[i].Nachalo) ,Im1.Canvas, R1);
end;
end;
end;
procedure TestString(Im: TImage);
var Sum: LongInt;
Xpix,Ypix: integer; //i-положение в строке, к- столбец
i,min: byte;
begin
for Ypix:=0 to hi-1 do // перебор по столбцам
begin
Sum:=0;
for Xpix:=0 to long-1 do // перебор по строкам
begin
Sum:= Sum+ GetRValue(Im.Canvas.Pixels[Xpix,Ypix]) //i-ый пиксел к-ой строки
end;
S_Row[Ypix]:= round(Sum /long); // массив яркостей строк среднее зн яркости строки
S_Im:= S_Im+ S_Row[Ypix]; // сумма яркостей строк
end;
S_Im:= round(S_Im/hi); // ср значение яркости картинки
min:= S_Row[0];
for i:=1 to hi-1 do if S_Row[i] < min then min:=S_Row[i];
for i:=0 to hi-1 do S_Row[i]:=S_Row[i]-min;
S_Im:=S_Im-min;
end;
// работа со строкой
procedure TestColumn(Im: TImage);
var Sum: LongInt;
Xpix,Ypix: integer; //i-положение в строке, к- столбец
i,min: byte;
begin
for Xpix:=0 to long-1 do // перебор по столбцам
begin
Sum:=0;
for Ypix:=0 to hi-1 do // перебор по строкам
begin
Sum:= Sum+ GetRValue(Im.Canvas.Pixels[Xpix,Ypix]) //i-ый пиксел к-ой строки
end;
S_Col[Xpix]:= round(Sum /hi); // массив яркостей столбцов среднее зн яркости строки
S_Im_Col:= S_Im_Col+ S_Col[Xpix]; // сумма яркостей столбцов
end;
S_Im_Col:= round(S_Im_Col/long); // ср значение яркости картинки
min:= S_Col[0];
for i:=1 to long-1 do if S_Col[i] < min then min:=S_Col[i];
for i:=0 to long-1 do S_Col[i]:=S_Col[i]-min;
S_Im_Col:=S_Im_Col-min;
end;
procedure FindBorderColumn(Im1,Im2: TImage);
var s_mp: double; //ниже этой границы - фон
Im_beg,Im_End: boolean;
i, t: integer; // счетчик
max, maxcol: integer;
R2 : TRect;
const kmp = 0.8;
begin
Im_beg :=False;
Im_End :=False;
s_mp := kmp * S_Im_Col;
i:=0; t:=0; max:=0;
while i<= long-1 do
begin
if (Im_beg =False) then
if (S_Col[i] > s_mp)and(S_Col[i-1] < s_mp)and(S_Col[i+1] > s_mp) then
begin //нашли область устойчивого повышения яркости
inc(t);
NCol[t].Nachalo:=i-1; //запомнить начало
Im_beg:= True;
end;
if (Im_beg = True)and(Im_end =False) then
if (S_Col[i] < s_mp)and(S_Col[i+1] < s_mp)and(S_Col[i+2] < s_mp)and(S_Col[i-1] > s_mp) then
begin //нашли область устойчивого понижения яркости
NCol[t].Konez:=i; //запомнить конец
Im_End:= True;
end;
if (Im_beg = True)and(Im_end = True)then//прорисовка области
begin
Im_beg :=False;
Im_End :=False;
end;
if S_Col[i]> max then begin max:= S_Col[i]; maxcol:=i end;
inc(i);
end;
for i:=1 to t do
begin
if (maxcol > NCol[i].Nachalo)and(maxcol < NCol[i].Konez)then
begin
with R2 do begin
Left:= NCol[i].Nachalo;
Top:= 0;
Right:= NCol[i].Konez;
Bottom:= Im1.Height;
end;
Im2.Picture.Bitmap.Width:= NCol[i].Konez-NCol[i].Nachalo;
Im2.Picture.Bitmap.Height:= Im1.Picture.Height;
Im2.Canvas.CopyRect(Rect(0,0,NCol[i].Konez-NCol[i].Nachalo,Im1.Height) ,Im1.Canvas, R2);
end;
end;
end;
// работа с номером
procedure TestColumnNumber(Im: TImage);
var Sum: LongInt;
Xpix,Ypix: integer; //i-положение в строке, к- столбец
min: byte;
begin
for Xpix:=0 to long-1 do // перебор по столбцам
begin
Sum:=0;
for Ypix:=0 to hi-1 do // перебор по строкам
begin
Sum:= Sum+ GetRValue(Im.Canvas.Pixels[Xpix,Ypix]) //i-ый пиксел к-ой строки
end;
S_Word[Xpix]:= round(Sum /hi); // массив яркостей столбцов среднее зн яркости строки
S_ImW:= S_ImW+ S_Word[Xpix]; // сумма яркостей столбцов
end;
S_ImW:= round(S_ImW/long); // ср значение яркости картинки
end;
procedure TestNumber(Im1: TImage; t : integer); //тестовая процедура
var i: integer;
begin
Im1.Canvas.Pen.Color:=clRed;
for i:=0 to t do
begin
Im1.Canvas.MoveTo(WJ_min[i],0);
Im1.Canvas.LineTo(WJ_min[i],Im1.Height-1);
end;
end;
function CheckBorderNumber(k , sw_mp : integer; Im1 : TImage) : boolean;
var dh : integer;
nam : integer;
t, max : byte;
begin
dh := Im1.Height-1;
max:=0;
for t:=0 to dh do
if GetRValue(Im1.Canvas.Pixels[k,t]) > max then //перебор по столбцу
begin
nam:= t; max:= GetRValue(Im1.Canvas.Pixels[k,t]);
end;
if (GetRValue(Im1.Canvas.Pixels[k-1,nam]) > sw_mp) and
(GetRValue(Im1.Canvas.Pixels[k+1,nam]) > sw_mp) then
Result:=True
else Result:=False;
end;
procedure FindMinWordNumber(Im1,Im2 : TImage);
var dj, i, j, counter, index: integer;
min, sw_mp : integer;
tmp : integer;
R1: TRect;
s : string[10];
begin
CountFile:=0;
dj:= round(0.3 * (hi))-1;
for i:=0 to 20 do WJ_min[i]:=0; //заполняем нулями
j:=0; counter:=0;
sw_mp:= round(S_ImW * 0.98);
min:=255;
for i:=0 to dj do
if (S_Word[i] < min)then //находим 1-ый минимум и его индекс
begin
min:= S_Word[i];
index:= i;
end;
if (S_Word[index] < sw_mp)and(S_Word[index+2] > sw_mp)or
(S_Word[index] < sw_mp)and(S_Word[index-2] > sw_mp)then
if index - WJ_min[counter] > 5 then
begin
inc(counter);
WJ_min[counter]:= index;
end;
j:= index+1;
while j<= long-1 do //находим остальные минимумы и их индексы
begin
min:= 255;
for i:=j to j+dj-1 do
if (S_Word[i] < min)then //находим минимум и его индекс
begin
min:= S_Word[i];
index:= i;
end;
if (S_Word[index] < sw_mp)and(S_Word[index+2] > sw_mp)or
(S_Word[index] < sw_mp)and(S_Word[index-2] > sw_mp)then
if (index - WJ_min[counter] > 5)or(index - WJ_min[counter] < 2)then
begin
inc(counter);
WJ_min[counter]:= index;
end;
j:=j+dj;
end;
if WJ_min[Counter] < im1.Picture.Width then
begin
inc(counter);
WJ_min[counter]:= im1.Picture.Width;
end;
for i:=0 to counter do
begin
if i = 0 then dlina[i]:= WJ_min[i]+1 else
if i = counter then dlina[i]:= Form1.Image1.Width - WJ_min[i-1] else
dlina[i]:= WJ_min[i]-WJ_min[i-1]+1;
end;
for i:=0 to counter do
begin
if (dlina[i] > 2)and(dlina[i] < 6) then
if i = 0 then //если символ слипся в начале
begin
if dlina[i+1] > 9 then begin
tmp:= round(dlina[i+1] + dlina[i]/2);
WJ_min[i]:= WJ_min[i-1]+tmp; end;
end
else if i = counter then
begin
if (dlina[i-1] > 9) then
begin
tmp:= round((dlina[i-1] + dlina[i])/2);
WJ_min[i-1]:= WJ_min[i-2]+tmp;
WJ_min[i]:= WJ_min[i-1]+tmp;
end;
end
end;
for i:=1 to counter do begin
if WJ_min[i] - WJ_min[i-1] > 4 then
begin
with R1 do begin
Left:= WJ_min[i-1];
Top:= 0;
Right:= WJ_min[i];
Bottom:= Im1.Picture.Height; end;
Im2.Picture.Bitmap.Height:= Im1.Picture.Height;
Im2.Picture.Bitmap.Width:= WJ_min[i] - WJ_min[i-1];
Im2.Canvas.CopyRect(Im2.Canvas.ClipRect,Im1.Canvas, R1);
inc(CountFile);
s:=IntToStr(CountFile)+'.bmp';
Im2.Picture.Bitmap.SaveToFile(s);
end;
end;
TestNumber(Im1,counter);
end;
//////////////////////////////////////////////////////
procedure TForm1.Button7Click(Sender: TObject);
var BMPCounter: byte;
begin
BMPCounter:= FileListBox1.ItemIndex;
FileListBox1.ItemIndex:= FileListBox1.ItemIndex+1;
if FileListBox1.ItemIndex = BMPCounter then FileListBox1.ItemIndex:= 0;
Image1.Picture.LoadFromFile(FileListBox1.FileName);
Image1.Height:= Image1.Picture.Height;
Image1.Width:= Image1.Picture.Width;
Image2.Canvas.FillRect(Image2.Canvas.ClipRect); //очистка im
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
long:= Image1.Picture.Width;
hi:= Image1.Picture.Height;
TestString(Image1);
FindBorder(Image1,Image2);
Image2.Picture.Bitmap.SaveToFile('string.bmp');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile('string.bmp');
long:= Image1.Picture.Width;
hi:= Image1.Picture.Height;
TestColumn(Image1);
FindBorderColumn(Image1,Image2);
Image2.Picture.Bitmap.SaveToFile('word.bmp');
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile('word.bmp');
Image1.Height:= Image1.Picture.Height;
Image1.Width:= Image1.Picture.Width;
long:= Image1.Picture.Width;
hi:= Image1.Picture.Height;
TestColumnNumber(Image1);
FindMinWordNumber(Image2,Image3);
end;
procedure ChangeIm(Im1,Im2 : TImage);
var i ,j : byte;
sred : byte;
begin
Im2.Picture.Bitmap.Assign(Im1.Picture.Bitmap);
Sred := TestIm(Im2);
for i:=0 to Im2.Picture.Width-1 do
for j:=0 to Im2.Picture.Height-1 do
if GetRValue(Im2.Canvas.Pixels[i,j]) > Sred then
Im2.Canvas.Pixels[i,j]:= clWhite
else
Im2.Canvas.Pixels[i,j]:= clBlack;
end;
procedure CutBlackLine(Im1,Im3 : TImage);
var i,X,Y : byte;
L_Col, L_Row: Array[0..15]of byte;
Sum : LongInt;
Levo, Pravo, Verh, Niz : integer;
R1: TRect;
begin
Levo:=0; Pravo:= Im1.Picture.Width;
Verh:=0; Niz:= Im1.Picture.Height;
for Y:=0 to Im1.Picture.Height-1 do
begin
Sum:=0;
for X:=0 to Im1.Picture.Width-1 do
Sum:= Sum + GetRValue(Im1.Canvas.Pixels[X, Y]);
L_Row[Y]:= round(Sum / Im1.Picture.Width);
end;
for X:=0 to Im1.Picture.Width-1 do
begin
Sum:=0;
for Y:=0 to Im1.Picture.Height-1 do
Sum:= Sum + GetRValue(Im1.Canvas.Pixels[X, Y]);
L_Col[X]:= round(Sum / Im1.Picture.Height);
end;
for i:=0 to 3 do
if L_Row[i] = 0 then Verh:=i+1;
for i:=Im1.Picture.Height-1 downto Im1.Picture.Height-4 do
if L_Row[i] = 0 then Niz:=i;
for i:=0 to 2 do
if L_Col[i] = 0 then Levo:=i+1;
for i:=Im1.Picture.Width-1 downto Im1.Picture.Width-3 do
if L_Col[i] = 0 then Pravo:=i-1;
With R1 do begin
Left:= Levo;
Top:= Verh;
Right:= Pravo;
Bottom:= Niz;
end;
Im3.Picture.Bitmap.Width:= Pravo - Levo ;
Im3.Picture.Bitmap.Height:= Niz - Verh ;
Im3.Canvas.CopyRect(Rect(0,0,Pravo - Levo, Niz - Verh) ,Im1.Canvas, R1);
Im3.Picture.Bitmap.SaveToFile('обрезок.bmp');
end;
function Cou(X0,X,Y0,Y, w,z : byte;Im3 : TImage):byte;
Var sum : Longint;
i,j : byte;
begin
Result:= 0;
Sum:=0;
for j := Y0 to Y do
for i := X0 to X do
Sum:= Sum + GetRValue(Im3.Canvas.Pixels[i,j]);
Sum:= round (Sum / (w * z));
if Sum >= 255*0.6 then Result:= 1;
if Sum <= 255*0.4 then Result:= 0;
if (Sum < 255*0.6)and(Sum > 255*0.4) then Result:= 2;
end;
procedure ImToShablon(Im3: TImage;Gr : TStringGrid);
var del_Height: Array[0..5]of byte;
del_Width : Array[0..3]of byte;
temp, i, j : byte;
X, Y : byte;
begin
del_Height[0]:=0; del_Width[0]:=0;
temp:= Im3.Picture.Height;
case temp of
10: begin for i:=1 to 5 do del_Height[i]:=2; end;
11: begin
for i:=1 to 5 do del_Height[i]:=2;
del_Height[3]:=3
end;
12: begin
for i:=1 to 5 do del_Height[i]:=2;
del_Height[1]:=3;
del_Height[5]:=3;
end;
13: begin
for i:=1 to 5 do del_Height[i]:=3;
del_Height[2]:=2;
del_Height[4]:=2;
end;
14: begin
for i:=1 to 5 do del_Height[i]:=3;
del_Height[3]:=2
end;
15: begin for i:=1 to 5 do del_Height[i]:=3;end;
end;
temp:= Im3.Picture.Width;
case temp of
3: begin for i:=1 to 3 do del_Width[i]:=1; end;
4: begin
for i:=1 to 3 do del_Width[i]:=1;
del_Width[2]:=2
end;
5: begin
for i:=1 to 3 do del_Width[i]:=2;
del_Width[3]:=1;
end;
6: begin for i:=1 to 3 do del_Width[i]:=2; end;
7: begin
for i:=1 to 3 do del_Width[i]:=2;
del_Width[2]:=3
end;
8: begin
for i:=1 to 3 do del_Width[i]:=3;
del_Width[3]:=2
end;
9: begin for i:=1 to 3 do del_Width[i]:=3; end;
10: begin
for i:=1 to 3 do del_Width[i]:=3;
del_Width[2]:=4
end;
end;
j:=0;
for Y:=1 to 5 do begin
i:=0;
for X:=1 to 3 do begin
Gr.Cells[X-1,Y-1]:=IntToStr( Cou(i,i+del_Width[X]-1,j,j+del_Height[Y]-1, del_Width[X],del_Height[Y],Im3) );
i:= i+ del_Width[X];
end;
j:=j+ del_Height[Y];
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var f : TextFile;
s : string;
i,j,k,otvet : byte;
sovp, pol_sovp : byte;
max : double;
zifr : Array[0..9]of double;
begin
ChangeIm(Image1,Image2);
CutBlackLine(Image2,Image3);
ImToShablon(Image3, StringGrid1);// преобразование картинки к 3х5 шаблону
max:=0; otvet:=0;
for k:=0 to 9 do begin
j:=1; sovp:=0; pol_sovp:=0;
s:= 'Shablon/'+ IntToStr(k)+ '.sbl';
try
AssignFile (f, s);
reset(f);
while not EOF(f)do begin
readln(f,s);
for i:=1 to 3 do begin
if s[i] = StringGrid1.Cells[i-1,j-1] then inc(sovp)
else if (StringGrid1.Cells[i-1,j-1] = '2')or(s[i] = '2') then inc(pol_sovp)
else if (s[i]= '1') and (StringGrid1.Cells[i-1,j-1] = '2') then inc(sovp)
else if (s[i]= '2') and (StringGrid1.Cells[i-1,j-1] = '1') then inc(sovp);
StringGrid2.Cells[i-1,j-1]:= s[i];
end;
inc(j);
end;
Zifr[k] := (sovp + pol_sovp/2)*100/15;
if zifr[k] > max then begin
otvet:=k; max:= zifr[k]; end;
except on EInOutError do ShowMessage('Не могу загрузить файл шаблона');
end;
end;
Edit1.Text:= IntToStr(otvet);
end;
end.
Программа разработана в интегрированной среде Borland Delphi 6.0.
Размещено на Allbest.ru
Подобные документы
Основные понятия теории распознавания образов и ее значение. Сущность математической теории распознавания образов. Основные задачи, возникающие при разработке систем распознавания образов. Классификация систем распознавания образов реального времени.
курсовая работа [462,2 K], добавлен 15.01.2014Основные цели и задачи построения систем распознавания. Построение математической модели системы распознавания образов на примере алгоритма идентификации объектов военной техники в автоматизированных телекоммуникационных комплексах систем управления.
дипломная работа [332,2 K], добавлен 30.11.2012Необходимость в системах распознавания символов. Виды сканеров и их характеристики. Оптимальное разрешение при сканировании. Программы распознавания текста. Получение электронного документа. FineReader - система оптического распознавания текстов.
презентация [469,2 K], добавлен 15.03.2015Понятие системы распознавания образов. Классификация систем распознавания. Разработка системы распознавания формы микрообъектов. Алгоритм для создания системы распознавания микрообъектов на кристаллограмме, особенности его реализации в программной среде.
курсовая работа [16,2 M], добавлен 21.06.2014Методы предобработки изображений текстовых символов. Статистические распределения точек. Интегральные преобразования и структурный анализ. Реализация алгоритма распознавания букв. Анализ алгоритмов оптического распознавания символов. Сравнение с эталоном.
курсовая работа [2,1 M], добавлен 20.09.2014Теоретические основы распознавания образов. Функциональная схема системы распознавания. Применение байесовских методов при решении задачи распознавания образов. Байесовская сегментация изображений. Модель TAN при решении задачи классификации образов.
дипломная работа [1019,9 K], добавлен 13.10.2017Появление технических систем автоматического распознавания. Человек как элемент или звено сложных автоматических систем. Возможности автоматических распознающих устройств. Этапы создания системы распознавания образов. Процессы измерения и кодирования.
презентация [523,7 K], добавлен 14.08.2013Методы распознавания образов (классификаторы): байесовский, линейный, метод потенциальных функций. Разработка программы распознавания человека по его фотографиям. Примеры работы классификаторов, экспериментальные результаты о точности работы методов.
курсовая работа [2,7 M], добавлен 15.08.2011Распознавание образов - задача идентификации объекта или определения его свойств по его изображению или аудиозаписи. История теоретических и технических изменений в данной области. Методы и принципы, применяемые в вычислительной технике для распознавания.
реферат [413,6 K], добавлен 10.04.2010Выбор типа и структуры нейронной сети. Подбор метода распознавания, структурная схема сети Хопфилда. Обучение системы распознавания образов. Особенности работы с программой, ее достоинства и недостатки. Описание интерфейса пользователя и экранных форм.
курсовая работа [3,0 M], добавлен 14.11.2013