Технология обработки изображений и распознавания образов

Оптико-электронная система идентификации объектов подвижного состава железнодорожного транспорта. Автоматический комплекс распознавания автомобильных номеров. Принципы и этапы работы систем оптического распознавания. Особенности реализации алгоритмов.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.