Разработка программных средств по распознаванию образов

Теоретический анализ современных методик создания программных средств по распознаванию образов, их преимущества и недостатки. Описание предметной области, обоснование выбора технологии и разработка проекта программного средства по распознаванию образов.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 20.05.2013
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Рабочее место оператора ЭВМ состоит из монитора, системного блока, клавиатуры, мыши, принтера. Клавиатура должна быть расположена непосредственно перед оператором. Расстояние от глаз оператора до монитора должно составлять 0.5 - 0.7 м. На столе, на котором расположена ПЭВМ, должно оставаться место для наглядного, графического материала, для возможности работать с литературой, делать какие-либо пометки.

К размерам рабочего места предъявляются требования:

- высота рабочей поверхности 655 мм;

- высота сидения 420 мм (желательно регулируемого);

- расстояние от сидения до нижнего края рабочей поверхности 150мм;

- размеры пространства для ног 650x500x600.

Требования к выполнению правил пожарной безопасности.

В случае пожара необходимо:

- отключить щит электропитания;вызвать к месту пожара заведующего лабораторией, вызвать пожарную помощь;

- по возможности вынести легковоспламеняющиеся, взрывоопасные материалы и наиболее ценные предметы;

- приступить к тушению пожара имеющимися средствами (огнетушитель, песок и т.д.);

- для тушения пожара в лаборатории предусмотрен огнетушитель химический воздушно-пенный ОХВП-10, установленный в легко доступном месте.

Требования к электробезопасности.

Рассмотрим требования безопасности при работе с ЭВМ. Работа производится в лаборатории, где стоят точные приборы.

Следовательно, это подразделение можно отнести к 1 классу помещений по степени опасности поражения электрическим током. К 1 классу относятся помещения без повышенной опасности: сухие, беспыльные помещения с нормальной температурой воздуха, изолирующими (например, деревянными полами), не имеющими или имеющими очень мало заземленных предметов.

ГОСТ 12.2.007-75 подразделяет электрические изделия по способу защиты человека от поражения электрическим током на пять классов: 0, 01, 1, 2, 3.

ЭВМ можно отнести к классу 01, то есть, к изделиям, имеющим, по крайней мере, рабочую изоляцию, элемент для заземления и провод без заземляющей жилы для присоединения к источнику питания. При начале работы с ЭВМ необходимо проверить герметичность корпуса, не открыты ли токоведущие части. Убедиться в подключении заземляющего проводника к общей шине заземления, проверить его целостность. Если заземляющий проводник отключен, подключать его можно только при отключении машины от питающей сети. Для повышения безопасности работать можно с использованием резиновых ковриков.

Опасность поражения человека электрическим током определяется множеством факторов:

- индивидуальные особенности людей;

- продолжительность воздействия тока на организм человека;

- путь тока в теле человека;

- род и частота тока.

Для данного случая определяющими факторами являются род тока в цепи и его величина.

Для обеспечения электробезопасности используется защитное заземление.

Каждому работающему в лаборатории следует помнить:

- включать общий рубильник только после предупреждения всех лиц, работающих в лаборатории;

- с неисправным оборудованием не работать;

- не загромождать рабочее место посторонними предметами;

- держать свободными проходы между рабочими местами и проход к силовому рубильнику;

- при любом несчастном случае, связанном с поражением электрическим током, немедленно выключать силовой рубильник.

При поражении электрическим током следует:

- освободить пострадавшего от воздействия электрического тока;оказать доврачебную помощь;

- вызвать врача.

5.3 Создание условий для организации режима труда и отдыха при работе с ПЭВМ

Режимы труда и отдыха при работе с ПЭВМ организовываются в зависимости от вида и категории трудовой деятельности.

Виды трудовой деятельности разделяются на 3 категории тяжести и напряженности, каждая из которых подразделяется на 3 группы:

- группа А - работа по считыванию информации с экрана ПЭВМ с предварительным запросом;

- группа Б - работа по вводу информации;

- группа В - творческая работа в режиме диалога с ПЭВМ.

При выполнении работ в течение рабочей смены, относящихся к разным видам трудовой деятельности, за основную работу с ПЭВМ рекомендуется принять ту, которая занимает не менее 50 % времени в течение рабочей смены или рабочего дня.

Продолжительность обеденного перерыва определяется действующим законодательством о труде и Правилами внутреннего трудового распорядка предприятия.

Для обеспечения оптимальной работоспособности и сохранения здоровья профессиональных пользователей, на протяжении рабочей смены рекомендуется установить регламентированные перерывы.

Продолжительность и количество регламентированных перерывов в течение рабочей смены устанавливаются в зависимости от продолжительности смены, вида и категории трудовой деятельности.

Для 8-часовой рабочей смены при работе с ПЭВМ регламентированные перерывы рекомендуется установить:

- для 1 категории работ - через 2 часа от начала рабочей смены и через 2 часа после обеденного перерыва, каждый продолжительностью 15 минут;

- для 2 категории работ - через 2 часа от начала рабочей смены и через 1.5-2 часа после обеденного перерыва продолжительностью 15 минут каждый или через каждый час работы продолжительностью 10 минут каждый;

- для 1 категории работ через 1.5-2 часа от начала рабочей и через 1.5-2 часа после обеденного перерыва продолжительностью 20 минут каждый или через каждый час работы продолжительностью 15 минут каждый.

При работе с ПЭВМ в ночную смену (с 22 до 6 часов) независимо от вида и категории трудовой деятельности, продолжительность регламентированных перерывов увеличивается на 60 минут.

При 12-часовой рабочей смене регламентированные перерывы рекомендуется установить в первые 8 часов работы аналогично перерывам при 8-часовой рабочей смене, а в течение последних 4 часов, независимо от вида и категории трудовой деятельности, каждый час работы продолжительностью 15 минут. Во время регламентированных перерывов целесообразно выполнять комплексы упражнений для снижения нервно-эмоционального напряжения, утомления зрительного анализатора, устранения влияния гиподинамии и сипокинезии, развития познотонического утомления. Комплексы рекомендуется менять один раз в 2-3 недели.

С целью уменьшения отрицательного влияния монотонности работы целесообразно изменять ее содержание. При возникновении у работающих с персональными компьютерами зрительного дискомфорта и других неблагоприятных ощущений, несмотря на соблюдение санитарно-гигиенических, эргономических требований, режима труда и отдыха, применить индивидуальный подход в ограничении времени, коррекцию длительности перерывов для отдыха или проводить смену на другую, не связанную с использованием ПЭВМ.

5.4 Экологичность проекта

Человек оказался в ловушке противоречия между своей консервативной биологической сущностью и нарастающим отчуждением от природы. Используя изобретенные им технологии и средства жизнеобеспечения, человек в большей мере освободился от давления естественного отбора и межвидовой конкуренции. Он на несколько порядков превысил биологическую видовую численность и еще в десятки раз - объем использования веществ и энергии для удовлетворения надбиологических потребностей.

Огромное увеличение и продолжение роста количества людей отнюдь не связано с повышением их биологического качества. Наоборот, для людей в целом характерны совершенно немыслимые для диких животных в природе: груз наследственных заболеваний, наследственная предрасположенность к заболеваниям, низкий имунно-биологический статус и огромное число инфекций, возрастная хронизация болезней. Проблемы экологии человека все больше становятся проблемами здравоохранения. В частности состояние здоровья Казахстана ухудшается под прессом неблагоприятных и экологических условий. Наибольшую тревогу вызывают:

- проявления деградации фонда наследственной информации у значительной части населения, что выражается в росте числа наследственных заболеваний;

- заболевания и хронизация, потери трудоспособности и сокращение продолжительности жизни, обусловленные плохими экологическими и гигиеническими условиями проживания и труда, а также курением, алкоголизмом и наркоманией;

- высокая химическая и радиационная нагрузка на значительные контингенты населения, приводящая к широкому спектру экопатологий, в том числе к злокачественным новообразованиям, иммунодефициту и аллергиям;

- большая частота нарушений беременности и родов, тератогенных эффектов - дефектов развития новорожденных, высокая детская заболеваемость и смертность.

Экологические проблемы человечества тесно сопряжены с экономическими и социальными проблемами. Региональные экологические проблемы часто становятся прямым источником имущественного неравенства, социальных и геополитических коллизий [13].

Перечень проблем, рассмотренные выше, позволяют понять многообразие задач экологии. Важнейшие общие задачи современной экологии в ее широком понимании это:

- Всеобъемлющая диагностика состояния природы планеты и ее ресурсов; определение порога выносливости живой природы планеты - биосферы по отношению к антропогенной нагрузке, то есть к тем помехам и утратам - изъятию биологических ресурсов, загрязнению среды, изменениям климата, которые наносятся человеческой деятельностью, и выяснение степени обратимости этих изменений.

- Разработка прогнозов изменений биосферы и состояния окружающей человека среды при разных сценариях экономического и социального развития человечества.

- Отказ от природопокорительной идеологии; формирование новой идеологии и методологии экоцентризма, связанной с переходом к постиндустриальной цивилизации и направленной на экологизацию экономики, производства, политики, образования.

- Выработка критериев оптимизации - выбора наиболее согласованного с экологическим императивом и экологически ориентированного социально - экономического развития общества - экоразвития.

Формирование такой стратегии поведения человеческого общества, такой экономики и таких технологий, которые приведут масштабы и характер хозяйственной деятельности в соответствие с экологической выносливостью природы и остановят глобальный экологический кризис [13].

Под охраной окружающей среды понимают совокупность международных, государственных и региональных правовых актов, инструкций и стандартов, доводящих общие юридические требования до каждого конкретного загрязнителя и обеспечивающих его заинтересованность в выполнении этих требований, конкретных природоохранных мероприятий по претворению в жизнь этих требований.

Охрана окружающей природной среды складывается из:

- правовой охраны, формулирующей научные экологические принципы в виде юридических законов, обязательных для исполнения;

- материального стимулирования природоохранной деятельности, стремящегося сделать её экономически выгодной для предприятий;

- инженерной охраны, разрабатывающей природоохранную и ресурсосберегающую технологию и технику.

Охране подлежат следующие объекты:

- естественные экологические системы, озоновый слой атмосферы;

- земля, ее недра, поверхностные и подземные воды, атмосферный воздух, леса и иная растительность, животный мир, микроорганизмы, генетический фонд, природные ландшафты.

Особо охраняются государством природные заповедники, природные заказники, национальные природные парки, памятники природы, редкие или находящиеся под угрозой исчезновения виды растений и животных и места их обитания.

Основными принципами охраны окружающей среды являются: приоритет обеспечения благоприятных экологических условий для жизни, труда и отдыха населения;

научно обоснованное сочетание экологических и экономических интересов общества; учет законов природы и возможностей самовосстановления и самоочищения ее ресурсов.

Разнообразное вмешательство человека в естественные процессы в биосфере можно сгруппировать по следующим видам загрязнений, понимая под ними любые нежелательные для экосистем антропогенные изменения:

- ингредиентное (ингредиент - составная часть сложного соединения или смеси) загрязнение как совокупность веществ, количественно или качественно чуждых естественным биогеоценозам;

- параметрическое загрязнение (параметр окружающей среды - одно из ее свойств, например уровень шума, освещенности, радиации и т.д.), связанное с изменением качественных параметров окружающей среды;

- биоценотическое загрязнение, заключающееся в воздействии на состав и структуру популяции живых организмов;

- стациально-деструкционное загрязнение (стация - место обитания популяции, деструкция - разрушение), представляющее собой изменение ландшафтов и экологических систем в процессе природопользования.

Природоохранной является любая деятельность, направленная на сохранение качества окружающей среды на уровне, обеспечивающем устойчивость биосферы. К ней относится как крупномасштабная деятельность, так и деятельность отдельных предприятий по очистке от вредных веществ сточных вод и отходящих газов, снижению норм использования природных ресурсов и т. д.

ЗАКЛЮЧЕНИЕ

В результате выполнения дипломной работы было разработано программное средство по распознаванию образов, вводимых в электронном виде на ПЭВМ.

Используемая в программном средстве методика распознавания образов показала себя надежной и качественной технологией при работе с графикой различных форматов.

Исследование предметной области показало, что разработанное программное средство будет внедряться и полноценно использоваться на автоматизированных рабочих местах специалистов различных организаций в широком спектре профессиональной деятельности. Данное программное средство позволит сократить время на обработку и анализ входной информации, качественно изменить выходную информацию (в лучшую сторону), а так же поможет в принятии некоторых решений пользователям в их работе.

Простота и гибкость интерфейса программного средства позволят овладеть им при наличии минимальных компьютерных навыков, что увеличит вероятность использования именно этого программного средства в своей повседневной работе.

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. Айзерман М.А., Браверман Э.М., Розоноэр Л.И. Метод потенциальных функций в теории обучения машин. - М.: Наука, 2004. - 384 с.

2. Горбань А., Россиев Д. Нейронные сети на персональном компьютере. //Новосибирск, Наука, 1996. - C 114 - 119.

3. Журавлев Ю.И. Об алгебраическом подходе к решению задач распознавания или классификации // Проблемы кибернетики. М.: Наука, 2005. - Вып. 33. С. 5-68

4. Журавлев Ю.И. Избранные научные труды. - Изд. Магистр, 2002. - 420 с.

5. Мазуров В.Д. Комитеты систем неравенств и задача распознавания // Кибернетика, 2004, № 2. С. 140-146.

6. Потапов А.С. Распознавание образов и машинное восприятие. - С-Пб.: Политехника, 2007. - 548 с

7. Минский М., Пейперт С. Персептроны. - М.: Мир, 2007. - 261 с.

8. Растригин Л. А., Эренштейн Р. Х. Метод коллективного распознавания. 79 с. ил. 20 см., М. Энергоиздат, 2006. - 80 с.

9. Рудаков К.В. Об алгебраической теории универсальных и локальных ограничений для задач классификации // Распознавание, классификация, прогноз. Математические методы и их применение. Вып. 1. - М.: Наука, 2007. - С. 176-200.

10. Фу К. Структурные методы в распознавании образов. - М.: Мир, 2005. - 144 с.

Приложение А

Листинг кода программы

//---------------------------------------------------------------------------

#include <vcl.h>

#include <time.h>

#include <dir.h>

#include <string.h>

#pragma hdrstop

#include "n1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"

Tfrm *frm;

AnsiString file_name; //путь к изображению

void Diagramm(void); //декларирование процедуры

Graphics::TBitmap *im_s = new Graphics::TBitmap();

Graphics::TBitmap *im_r = new Graphics::TBitmap();

float mx5[5][5]; //массив для фильтров, использующих матрицу 5*5

float mx3[3][3]; //массив для фильтров, использующих матрицу 3*3

float cR, cG, cB; //переменные-накопители составляющих цвета

int Rasped[3][255]; //массив для построения графика цветового распределения

bool move, diag_vis;

TPoint poz; //позиция объектов типа TImage

int iW, iH; //длина и высота рисунка

int i, j, xj, yi, steps, step; //переменные циклов

int add, add_user; //корректировка яркости при использовании фильтра

bool progress; //характеристика видимости полосы прогресса

clock_t clockB, clockE; //время начала и окончания операции

//===========================================================================

char *current_directory(char *path) //функция формирования пути директории, в которой находится приложение

{

strcpy(path, "X:\\");

path[0] = 'A' + getdisk();

getcurdir(0, path+3);

return (path);

}

//===========================================================================

__fastcall Tfrm::Tfrm(TComponent* Owner) //инициализация приложения

: TForm(Owner)

{

char curdir[MAXPATH];

current_directory(curdir); //определить текущую директорию

TIniFile *ini;

ini = new TIniFile(strcat(curdir, "\\settings.ini"));

//запись данных в файл настроек "settings.ini"

//позиция

frm->Top = ini->ReadInteger("Форма", "Сверху", 100 );

frm->Left = ini->ReadInteger("Форма", "Слева", 100 );

//размер

frm->Width = ini->ReadInteger("Форма", "Длина", 700 );

frm->Height = ini->ReadInteger("Форма", "Высота", 500 );

//пользовательские настройки

frm->m_progress->Checked = ini->ReadBool( "Вид", "Прогресс", false);

frm->pBar->Visible = frm->m_progress->Checked;

frm->m_ontop->Checked = ini->ReadBool( "Вид", "Поверх", false);

if(frm->m_ontop->Checked) frm->FormStyle = fsStayOnTop;

frm->c_3d->Checked = ini->ReadBool( "Вид", "3d", false);

graphics->View3D = frm->c_3d->Checked;

delete ini;

}

//===========================================================================

void __fastcall Tfrm::FormClose(TObject *Sender, TCloseAction &Action) //закрытие формы

{

char curdir[MAXPATH];

current_directory(curdir);

TIniFile *ini;

ini = new TIniFile(strcat(curdir, "\\settings.ini"));

//запись данных в файл настроек "settings.ini"

if(frm->WindowState == wsMaximized) frm->WindowState = wsNormal;

//позиция

ini->WriteInteger("Форма", "Сверху", frm->Top);

ini->WriteInteger("Форма", "Слева", frm->Left);

//размер

ini->WriteInteger("Форма", "Длина", frm->Width);

ini->WriteInteger("Форма", "Высота", frm->Height);

//пользовательские настройки

ini->WriteBool("Вид", "Прогресс", frm->m_progress->Checked);

ini->WriteBool("Вид", "Поверх", frm->m_ontop->Checked);

ini->WriteBool("Вид", "3D", frm->c_3d->Checked);

delete ini;

}

//===========================================================================

void CheckRGB() //процедура проверки нахождения переменных-составляющих цвета в диапазоне допустимых значений

{

if(cR < 0) cR = 0;

if(cG < 0) cG = 0;

if(cB < 0) cB = 0;

//---------------------------------------

if(cR > 255) cR = 255;

if(cG > 255) cG = 255;

if(cB > 255) cB = 255;

}

//===========================================================================

void LoadBMP() //процедура загрузки изображения

{

im_s->LoadFromFile(file_name);

im_r->LoadFromFile(file_name);

if(im_s->PixelFormat == pf24bit) //проверка формата изображения

{

frm->i_s->Picture->LoadFromFile(file_name);

frm->i_r->Picture->LoadFromFile(file_name);

iW = im_s->Width;

iH = im_r->Height;

frm->i_s->Width = iW;

frm->i_s->Height = iH;

frm->i_r->Width = iW;

frm->i_r->Height = iH;

frm->pBar->Position = 0;

frm->pBar->Max = iH;

frm->tb_realsize->Enabled = false;

frm->m_realsize->Enabled = false;

if(diag_vis) //если отображается диаграмма распределения цветов

{

clockB = clock();

Diagramm();

clockE = clock() - clockB;

frm->Caption = "Статус: ожидание. Время = " + IntToStr(clockE);

}

}

else

MessageBox(Application->Handle, "Данный цветовой формат не поддерживается. \nВыберите 24-х разрядный рисунок.", "Ошибка!", MB_OK | MB_ICONSTOP);

}

//===========================================================================

Byte GetR(int x, int y) //получение по координатам красной состовляющей пикселя цвета

{

Byte *ptr;

Byte Ret;

ptr = (Byte*)im_s->ScanLine[y];

Ret = ptr[3*x + 2];

return Ret;

}

//---------------------------------------------------------------------------

Byte GetG(int x, int y) //получение по координатам зеленой состовляющей пикселя цвета

{

Byte *ptr;

Byte Ret;

ptr = (Byte*)im_s->ScanLine[y];

Ret = ptr[3*x + 1];

return Ret;

}

//---------------------------------------------------------------------------

Byte GetB(int x, int y) //получение по координатам синей состовляющей пикселя цвета

{

Byte *ptr;

Byte Ret;

ptr = (Byte*)im_s->ScanLine[y];

Ret = ptr[3*x];

return Ret;

}

//===========================================================================

void SetR(int x, int y, Byte Color) //установка красной составляющей цвета по координатам

{

Byte *ptr;

ptr = (Byte*)im_r->ScanLine[y];

ptr[3*x + 2]=Color;

}

//---------------------------------------------------------------------------

void SetG(int x, int y, Byte Color) //установка зеленой составляющей цвета по координатам

{

Byte *ptr;

ptr = (Byte*)im_r->ScanLine[y];

ptr[3*x + 1] = Color;

}

//---------------------------------------------------------------------------

void SetB(int x, int y, Byte Color) //установка синей составляющей цвета по координатам

{

Byte *ptr;

ptr = (Byte*)im_r->ScanLine[y];

ptr[3*x]=Color;

}

//===========================================================================

void Paint3x() //процедура для фильтров, основанных на матрице 3*3

{

steps = StrToIntDef(frm->c_steps->Text, 1); //получить количесво проходов

clockB = clock(); //получить время начала выполнения

progress = frm->m_progress->Checked;

for(step = 1; step <=steps; step++) //цикл, реализующий проходы

{

im_r->SaveToFile("temp.bmp");

im_s->LoadFromFile("temp.bmp");

frm->i_s->Canvas->Draw(0, 0, im_s);

Application->ProcessMessages(); //обработка внешних сообщений

add = StrToIntDef(frm->c_color_add->Text, 0) + add_user; //результирующая дополнительная яркость

for(i=2; i<iH-2; i++) //проход по высоте

{

for(j=2; j<iW-2; j++) //проход по длине

{

cR = cB = cG = 0.0;

for(yi=-1; yi<2; yi++)

{

for(xj=-1; xj<2; xj++)

{

cR += float((GetR(j+xj, i+yi))) * mx3[1+yi][1+xj];

cG += float((GetG(j+xj, i+yi))) * mx3[1+yi][1+xj];

cB += float((GetB(j+xj, i+yi))) * mx3[1+yi][1+xj];

}

}

//---------------------------------------

if(add)

{

cR += add;

cG += add;

cB += add;

}

//---------------------------------------

CheckRGB();

//---------------------------------------

SetR(j, i, cR);

SetG(j, i, cG);

SetB(j, i, cB);

if(progress) frm->pBar->Position = i;

}

}

}

frm->i_r->Canvas->Draw(0, 0, im_r);

clockE = clock() - clockB; //расчет времени, за которое была выполнена операция

frm->Caption = "Статус: ожидание. Время обработки = " + IntToStr(clockE) + " мСек.";

frm->pBar->Position=0;

}

//===========================================================================

void Paint5x() //процедура для фильтров, основанных на матрице 5*5

{

steps = StrToIntDef(frm->c_steps->Text, 1);

clockB = clock();

progress = frm->m_progress->Checked;

for(step = 1; step <=steps; step++)

{

im_r->SaveToFile("temp.bmp");

im_s->LoadFromFile("temp.bmp");

frm->i_s->Canvas->Draw(0, 0, im_s);

Application->ProcessMessages();

add = StrToIntDef(frm->c_color_add->Text, 0) + add_user;

for(i=2; i<iH-2; i++)

{

for(j=2; j<iW-2; j++)

{

cR = cB = cG = 0.0;

for(yi=-2; yi<3; yi++)

{

for(xj=-2; xj<3; xj++)

{

cR += float((GetR(j+xj, i+yi))) * mx5[2+yi][2+xj];

cG += float((GetG(j+xj, i+yi))) * mx5[2+yi][2+xj];

cB += float((GetB(j+xj, i+yi))) * mx5[2+yi][2+xj];

}

}

//---------------------------------------

if(add)

{

cR += add;

cG += add;

cB += add;

}

//---------------------------------------

CheckRGB();

//---------------------------------------

SetR(j, i, cR);

SetG(j, i, cG);

SetB(j, i, cB);

if(progress) frm->pBar->Position = i;

}

}

}

frm->i_r->Canvas->Draw(0, 0, im_r);

clockE = clock() - clockB;

frm->Caption = "Статус: ожидание. Время = " + IntToStr(clockE);

frm->pBar->Position=0;

}

//===========================================================================

void __fastcall Tfrm::FormActivate(TObject *Sender) //активация формы

{

im_s->PixelFormat = pf24bit;

im_r->PixelFormat = pf24bit;

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::FormResize(TObject *Sender) //изменение размера формы

{

p_s->Width = frm->Width / 2 - 5;

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::t_scaleChange(TObject *Sender) //изменение значения ползунка масштаба

{

int iPos = t_scale->Position;

iPos = iPos - iPos % 5;

t_scale->Position = iPos;

i_s->Width = iPos * iW / 100;

i_s->Height = iPos * iH / 100;

i_r->Width = iPos * iW / 100;

i_r->Height = iPos * iH / 100;

e_scale->Text = iPos;

u_scale->Position = iPos;

if(i_s->Width == iW && i_s->Height == iH) //если в результате изменения масштаба размер рисунка равен размеру изображения

{

frm->tb_realsize->Enabled = false;

frm->m_realsize->Enabled = false;

}

else

{

frm->tb_realsize->Enabled = true;

frm->m_realsize->Enabled = true;

}

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::b_scaleClick(TObject *Sender) //установить масштаб вручную

{

t_scale->Position = StrToIntDef(e_scale->Text, 100);

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::u_scaleClick(TObject *Sender, TUDBtnType Button) //выбрать масштаб при помощи стрелок

{

t_scale->Position = u_scale->Position;

}

//===========================================================================

void __fastcall Tfrm::i_sMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) //при нажатии кнопки мыши над рисунком

{

if(Button == mbLeft) //если нажата левая кнопка мыши

{

poz.x = X;

poz.y = Y;

move = true;

}

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::i_sMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) //при перемещении курсора мыши над рисунком

{

if(move) //если нажата левая кнопка мыши, изменить положение рисунка

{

i_r->Left = i_s->Left + X - poz.x;

i_r->Top += Y - poz.y;

i_s->Left = i_s->Left + X - poz.x;

i_s->Top += Y - poz.y;

}

if(m_fltr_color->Checked) //если активен режим отсеивания цвета

{

//получить цвет, на который указывает курсор и закрасить этим цветом рисунок предпросмотра

TColor clr;

clr = i_s->Canvas->Pixels[X][Y];

i_color->Canvas->Brush->Color = clr;

i_color->Canvas->FillRect(i_color->Canvas->ClipRect);

}

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::i_sMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) //кнопка мыши отпущена над рисунком

{

if(m_fltr_color->Checked && Button == mbRight) //если отпущена правая кнопка мыши и если активен режим отсеивания цвета

{

long clr;

clr = i_s->Canvas->Pixels[X][Y]; //получить цвет пикселя, на который указывал курсор в момент отпускания кнопки мыши

int r, g, b;

int rzbrs_p, rzbrs_m; //положительное и отрицательное значения разброса

rzbrs_m = s_color_minus->Value;

rzbrs_p = s_color_plus->Value;

cR = GetRValue(clr);

cG = GetGValue(clr);

cB = GetBValue(clr);

long Cvet = 0; //счетчик пикселей цвета, попадающих в допустимый диапазон

for(i=0; i<iH; i++)

{

for(j=0; j<iW; j++)

{

r = GetR(j, i);

g = GetG(j, i);

b = GetB(j, i);

if (r >= cR-rzbrs_m && r <= cR+rzbrs_p && g >= cG-rzbrs_m && g <= cG+rzbrs_p && b >= cB-rzbrs_m && b <= cB+rzbrs_p) //если цвет находится в допустимом диапазоне

{

//сделать этот цвет белым и увеличить счетчик

SetR(j, i, 255);

SetG(j, i, 255);

SetB(j, i, 255);

Cvet++;

}

else

{

//сделать этот цвет черным

SetR(j, i, 1);

SetG(j, i, 1);

SetB(j, i, 1);

}

}

}

i_r->Canvas->Draw(0, 0, im_r);

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

char St[256];

ltoa(iH*iW, St, 10);

strcat(St, " кв.пикс.");

frm->Label6->Caption = St;

strcpy(St, "");

ltoa(Cvet, St, 10);

strcat(St," кв.пикс.");

frm->Label7->Caption = St;

//расчет процента отсеянных пикселей

double proc = float(Cvet)*100 / float((iH*iW));

proc *= 100;

proc = long(proc);

proc /= 100;

frm->Label9->Caption = FloatToStr(proc);

}

if(Button == mbLeft) move = false; //если отпущена левая кнопка мыши

}

//===========================================================================

void __fastcall Tfrm::i_rMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) //при нажатии кнопки мыши над рисунком

{

if(Button == mbLeft)

{

poz.x = X;

poz.y = Y;

move = true;

}

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::i_rMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) //при перемещении курсора мыши над рисунком

{

if(move)

{

i_r->Left = i_s->Left + X - poz.x;

i_r->Top += Y - poz.y;

i_s->Left = i_s->Left + X - poz.x;

i_s->Top += Y - poz.y;

}

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::i_rMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) //кнопка мыши отпущена над рисунком

{

move = false;

}

//===========================================================================

void __fastcall Tfrm::m_openClick(TObject *Sender) //выбор изображения

{

if(open_dlg->Execute()) //если в диалоговом окне открытия рисунка было выбрано подходящее изображение и нажата кнопка "открыть"

{

file_name = open_dlg->FileName; //получить путь к изображению

LoadBMP();

}

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_progressClick(TObject *Sender) //скрыть или показать полосу прогресса

{

frm->pBar->Visible = frm->m_progress->Checked;

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::ExitClick(TObject *Sender) //закрыть приложение

{

Application->Terminate();

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_undoClick(TObject *Sender) //отмена последней операции

{

im_r->LoadFromFile("temp.bmp");

i_r->Picture->LoadFromFile("temp.bmp");

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_reloadClick(TObject *Sender) //перезагрузить изображение

{

if(file_name != "\0") LoadBMP();

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_saveasClick(TObject *Sender) //сохранение изображения

{

if(save_dlg->Execute()) //если в диалоговом окне сохранения рисунка было выбрано подходящее имя и нажата кнопка "сохранить"

{

im_r->SaveToFile(save_dlg->FileName);

}

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_ontopClick(TObject *Sender) //установить стиль окна

{

if (frm->m_ontop->Checked) frm->FormStyle = fsStayOnTop; //всегда сверху

else frm->FormStyle = fsNormal; //нормальное отображение

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_zoominClick(TObject *Sender) //увеличение масштаба

{

frm->t_scale->Position *= 1.5;

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_zoomoutClick(TObject *Sender) //уменьшение масштаба

{

frm->t_scale->Position /= 1.5;

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_realsizeClick(TObject *Sender) //реальный размер

{

frm->t_scale->Position = 100;

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_clearposClick(TObject *Sender) //сброс позиции

{

i_s->Left = 2;

i_s->Top = 2;

i_r->Left = 2;

i_r->Top = 2;

}

//===========================================================================

void __fastcall Tfrm::N1Click(TObject *Sender) //контур Лапласа

{

frm->Caption = "Статус: обработка изображения";

//-----------------------------------------------------------------------

mx3[0][0] = mx3[0][1] = mx3[0][2] =

mx3[1][0] = mx3[1][2] =

mx3[2][0] = mx3[2][1] = mx3[2][2] = -1.0;

mx3[1][1] = 8.0;

//-----------------------------------------------------------------------

add_user = 128;

Paint3x();

}

//===========================================================================

void __fastcall Tfrm::N2Click(TObject *Sender) //кора

{

frm->Caption = "Статус: обработка изображения";

//-----------------------------------------------------------------------

mx5[0][0] = mx5[0][1] = mx5[0][2] = mx5[0][3] = mx5[0][4] =

mx5[1][0] = mx5[1][4] =

mx5[2][0] = mx5[2][4] =

mx5[3][0] = mx5[3][4] =

mx5[4][0] = mx5[4][1] = mx5[4][2] = mx5[4][3] = mx5[4][4] = -1.0;

mx5[1][1] = mx5[1][2] = mx5[1][3] =

mx5[2][1] = mx5[2][3] =

mx5[3][1] = mx5[3][2] = mx5[3][3] = -1.0;

mx5[2][2] = 25.0;

//-----------------------------------------------------------------------

add_user = 0;

Paint5x();

}

//===========================================================================

void __fastcall Tfrm::N3Click(TObject *Sender) //тиснение вогнутое

{

frm->Caption = "Статус: обработка изображения";

//-----------------------------------------------------------------------

mx3[0][0] = mx3[0][2] =

mx3[2][0] = mx3[2][2] = 0.0;

mx3[0][1] =

mx3[1][2] = 1.0;

mx3[1][0] =

mx3[2][1] = -1.0;

mx3[1][1] = 0.0;

//-----------------------------------------------------------------------

add_user = 128;

Paint3x();

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::N4Click(TObject *Sender) //тиснение выпуклое

{

frm->Caption = "Статус: обработка изображения";

//-----------------------------------------------------------------------

mx3[0][0] = mx3[0][2] =

mx3[2][0] = mx3[2][2] = 0.0;

//-----------------------------------------------------------------------

mx3[0][1] =

mx3[1][2] = -1.0;

//-----------------------------------------------------------------------

mx3[1][0] =

mx3[2][1] = 1.0;

mx3[1][1] = 0.0;

//-----------------------------------------------------------------------

add_user = 128;

Paint3x();

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::N5Click(TObject *Sender) //увеличить резкость

{

frm->Caption = "Статус: обработка изображения";

//-----------------------------------------------------------------------

mx3[0][0] = mx3[0][1] = mx3[0][2] =

mx3[1][0] = mx3[1][2] =

mx3[2][0] = mx3[2][1] = mx3[2][2] = -0.1;

mx3[1][1] = 1.8;

//-----------------------------------------------------------------------

add_user = 0;

Paint3x();

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::N6Click(TObject *Sender) //уменьшить резкость

{

frm->Caption = "Статус: обработка изображения";

//-----------------------------------------------------------------------

mx3[0][0] = mx3[0][1] = mx3[0][2] =

mx3[1][0] = mx3[1][2] =

mx3[2][0] = mx3[2][1] = mx3[2][2] = 0.05;

mx3[1][1] = 0.6;

//-----------------------------------------------------------------------

add_user = 0;

Paint3x();

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::n7Click(TObject *Sender) //уменьшить резкость

{

frm->Caption = "Статус: обработка изображения";

//-----------------------------------------------------------------------

mx5[0][0] = mx5[0][4] = mx5[4][0] = mx5[4][4] = 1.0/74;

mx5[0][1] = mx5[0][3] = mx5[4][1] = mx5[4][3] = 2.0/74;

mx5[1][0] = mx5[1][4] = mx5[3][0] = mx5[3][4] = 2.0/74;

mx5[0][2] = mx5[2][0] = mx5[2][4] = mx5[4][2] = 3.0/74;

mx5[1][1] = mx5[1][3] = mx5[3][1] = mx5[3][3] = 4.0/74;

mx5[1][2] = mx5[2][1] = mx5[2][3] = mx5[3][2] = 5.0/74;

mx5[2][2] = 6.0/74;

//-----------------------------------------------------------------------

add_user = 0;

Paint5x();

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::n11Click(TObject *Sender) //контур 1

{

frm->Caption = "Статус: обработка изображения";

//-----------------------------------------------------------------------

mx3[0][0] = mx3[0][2] =

mx3[2][0] = mx3[2][2] = 0.0;

mx3[0][1] =

mx3[1][0] = mx3[1][2] =

mx3[2][1] = -1.0;

mx3[1][1] = 4.0;

//-----------------------------------------------------------------------

add_user = 128;

Paint3x();

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::n21Click(TObject *Sender) //контур 2

{

frm->Caption = "Статус: обработка изображения";

//-----------------------------------------------------------------------

mx3[0][0] = mx3[0][2] =

mx3[2][0] = mx3[2][2] = 1.0;

mx3[0][1] =

mx3[1][0] = mx3[1][2] =

mx3[2][1] = -2.0;

mx3[1][1] = 4.0;

//-----------------------------------------------------------------------

add_user = 64;

Paint3x();

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_fltr_colorClick(TObject *Sender) //активация или дезактивация режима отсеивания цвета

{

int pT, pL;

if(m_fltr_color->Checked) //если режим активирован

{

frm->m_realsize->Click();

N17->Enabled=false;

tb_zoomout->Enabled=false;

tb_zoomin->Enabled=false;

m_zoomout->Enabled=false;

m_zoomin->Enabled=false;

i_r->Picture->SaveToFile("temp.bmp");

i_s->Picture->LoadFromFile("temp.bmp");

i_s->Cursor = crDrag;

pT = p_scale->Top;

pL = p_scale->Left;

p_scale->Visible = false;

p_color->Visible = true;

p_color->Top = pT;

p_color->Left = pL;

i_color->Canvas->Brush->Color = clWhite;

i_color->Canvas->FillRect(i_color->Canvas->ClipRect);

i_s->Hint = "Нажмите правую кнопку для выбора цвета";

N10->Enabled = false;

N8->Enabled = false;

N9->Enabled = false;

N2->Enabled = false;

N12->Enabled = false;

N14->Enabled = false;

N15->Enabled = false;

N16->Enabled = false;

}

else //если режим дезактивирован

{

tb_zoomout->Enabled=true;

tb_zoomin->Enabled=true;

m_zoomout->Enabled=true;

m_zoomin->Enabled=true;

N17->Enabled=true;

i_s->Cursor = crSizeAll;

pT = p_color->Top;

pL = p_color->Left;

p_color->Visible = false;

p_scale->Visible = true;

p_scale->Top = pT;

p_scale->Left = pL;

i_s->Hint = "Нажмите и удерживайте левую кнопку, чтобы переместить рисунок";

N10->Enabled = true;

N8->Enabled = true;

N9->Enabled = true;

N2->Enabled = true;

N12->Enabled = true;

N14->Enabled = true;

N15->Enabled = true;

N16->Enabled = true;

}

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_helptextClick(TObject *Sender) //справка

{

ShellExecute(Application->Handle, 0, "ReadMe.doc", 0, 0, SW_SHOW);

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::m_aboutClick(TObject *Sender) //о программе

{

MessageBox(Application->Handle, "Программа математической фильтрации \nи анализа изображений.\nВсе права защищены. ", "О программе", MB_ICONASTERISK | MB_OK);

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::N12Click(TObject *Sender) //движение

{

int Zerno = 9;

add = StrToIntDef(frm->c_color_add->Text, 0);

frm->Caption = "Статус: обработка изображения";

steps = StrToIntDef(frm->c_steps->Text, 1);

progress = frm->m_progress->Checked;

clockB = clock();

for(step = 1; step<=steps; step++)

{

im_r->SaveToFile("temp.bmp");

im_s->LoadFromFile("temp.bmp");

frm->i_s->Canvas->Draw(0, 0, im_s);

Application->ProcessMessages();

for(i=0; i<iH; i++)

{

for(j=Zerno; j<(iW-Zerno); j++)

{

cR = cG = cB = 0;

for(int k=-Zerno; k<=(Zerno+1); k++)

{

cR += GetR(j+k, i);

cG += GetG(j+k, i);

cB += GetB(j+k, i);

}

cR /= (Zerno*2+1);

cG /= (Zerno*2+1);

cB /= (Zerno*2+1);

if(add)

{

cR += add;

cG += add;

cB += add;

}

CheckRGB();

for(int k=-Zerno;k<(Zerno+1);k++)

{

SetR(j+k, i, cR);

SetG(j+k, i, cG);

SetB(j+k, i, cB);

}

if(progress) frm->pBar->Position = i;

}

}

}

clockE = clock() - clockB;

frm->i_r->Canvas->Draw(0, 0, im_r);

frm->Caption = "Статус: ожидание. Время = " + IntToStr(clockE);

frm->pBar->Position=0;

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::N14Click(TObject *Sender) //негатив

{

frm->Caption = "Статус: обработка изображения";

steps = StrToIntDef(frm->c_steps->Text, 1);

clockB = clock();

Byte *ptr;

for(step = 1; step <=steps; step++)

{

Application->ProcessMessages();

im_r->SaveToFile("temp.bmp");

im_s->LoadFromFile("temp.bmp");

for(int y = 0; y < iH; y++)

{

ptr = (Byte*)im_r->ScanLine[y];

for (int x = 0; x < iW * 3; x+=3)

{

ptr[x] = (Byte)(256 - ptr[x]);

ptr[x+1] = (Byte)(256 - ptr[x+1]);

ptr[x+2] = (Byte)(256 - ptr[x+2]);

}

}

frm->i_r->Canvas->Draw(0, 0, im_r);

}

clockE = clock() - clockB;

frm->Caption = "Статус: ожидание. Время = " + IntToStr(clockE);

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::N15Click(TObject *Sender) //оттенки серого

{

frm->Caption = "Статус: обработка изображения";

steps = StrToIntDef(frm->c_steps->Text, 1);

clockB = clock();

Byte *ptr;

for(step = 1; step <=steps; step++)

{

Application->ProcessMessages();

im_r->SaveToFile("temp.bmp");

im_s->LoadFromFile("temp.bmp");

int r = 0, g = 0, b = 0, color = 0;

for(int y = 0; y < iH; y++)

ptr = (Byte*)im_r->ScanLine[y];

for (int x = 0; x < iW* 3; x+=3)

{

r = ptr[x];

g = ptr[x+1];

b = ptr[x+2];

color = (r + g + b) / 3;

ptr[x] = color;

ptr[x+1] = color;

ptr[x+2] = color;

}

}

frm->i_r->Canvas->Draw(0, 0, im_r);

}

clockE = clock() - clockB;

frm->Caption = "Статус: ожидание. Время = " + IntToStr(clockE);

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::N17Click(TObject *Sender) //активация или дезактивация режима диаграммы цветовых составляющих

{

if(N17->Checked) //режим активирован

{

frm->Caption = "Статус: обработка изображения";

Application->ProcessMessages();

clockB = clock();

im_r->SaveToFile("temp.bmp");

im_s->LoadFromFile("temp.bmp");

frm->i_s->Visible = false;

m_fltr_color->Enabled = false;

frm->Panel1->Visible = true;

graphics->Visible = true;

diag_vis = true;

N10->Enabled = false;

N8->Enabled = false;

N9->Enabled = false;

N2->Enabled = false;

N12->Enabled = false;

N14->Enabled = false;

N15->Enabled = false;

N16->Enabled = false;

Diagramm();

clockE = clock() - clockB;

frm->Caption = "Статус: ожидание. Время = " + IntToStr(clockE);

}

else //режим дезактивирован

{

frm->i_s->Visible=true;

m_fltr_color->Enabled = true;

frm->Panel1->Visible = false;

graphics->Visible = false;

diag_vis = false;

N10->Enabled = true;

N8->Enabled = true;

N9->Enabled = true;

N2->Enabled = true;

N12->Enabled = true;

N14->Enabled = true;

N15->Enabled = true;

N16->Enabled = true;

}

}

//---------------------------------------------------------------------------

void Diagramm() //процедура построения диаграммы

{

for(i=0; i<3; i++) //очистить массив

for(j=0; j<256; j++)

Rasped[i][j]=0;

//очистить график

frm->s_r->Clear();

frm->s_g->Clear();

frm->s_b->Clear();

long rr, gg, bb;

//заполнние массива

for(i=0; i<iH; i++)

{

for(j=0; j<iW; j++)

{

rr = GetR(j, i);

gg = GetG(j, i);

bb = GetB(j, i);

Rasped[0][rr]++;

Rasped[1][gg]++;

Rasped[2][bb]++;

}

}

//построение графиков

for(i=1; i<255; i++)

{

frm->s_r->AddXY(i, Rasped[0][i]);

frm->s_g->AddXY(i, Rasped[1][i]);

frm->s_b->AddXY(i, Rasped[2][i]);

}

move = false;

diag_vis = true;

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::b_corrClick(TObject *Sender) //произвести цветовую коррекцию

{

im_r->SaveToFile("temp.bmp");

im_s->LoadFromFile("temp.bmp");

int r, g, b;

r = frm->Red_raspred->Value;

g = frm->Green_raspred->Value;

b = frm->Blue_raspred->Value;

for(i=0; i<iH; i++)

{

for(j=0; j<iW; j++)

{

cR = GetR(j, i);

cG = GetG(j, i);

cB = GetB(j, i);

cR += r;

cG += g;

cB += b;

CheckRGB();

SetR(j, i, cR);

SetG(j, i, cG);

SetB(j, i, cB);

}

}

i_r->Canvas->Draw(0, 0, im_r);

im_s = im_r;

Diagramm(); //обновить диаграмму

}

//---------------------------------------------------------------------------

void to_color(int num) //процедура приведения к цвету

{

frm->Caption = "Статус: обработка изображения";

steps = StrToIntDef(frm->c_steps->Text, 1);

cR = cG = cB = 0;

clockB = clock();

Byte *ptr;

for(step = 1; step<=steps; step++)

{

Application->ProcessMessages();

im_r->SaveToFile("temp.bmp");

im_s->LoadFromFile("temp.bmp");

int r = 0, g = 0, b = 0;

for(int y = 0; y < iH; y++)

{

ptr = (Byte*)im_r->ScanLine[y];

for (int x = 0; x < iW * 3; x+=3)

{

r = ptr[x];

g = ptr[x+1];

b = ptr[x+2];

//получить среднее значение нужного цвета

if(num == 1) cR = (r + g + b) / 3;

if(num == 2) cG = (r + g + b) / 3;

if(num == 3) cB = (r + g + b) / 3;

ptr[x] = cB;

ptr[x+1] = cG;

ptr[x+2] = cR;

}

}

frm->i_r->Canvas->Draw(0, 0, im_r);

}

clockE = clock() - clockB;

frm->Caption = "Статус: ожидание. Время = " + IntToStr(clockE);

}

void __fastcall Tfrm::N18Click(TObject *Sender) //привести к красному цвету

{

to_color(1);

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::N19Click(TObject *Sender) //привести к синему цвету

{

to_color(3);

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::N20Click(TObject *Sender) //привести к зеленому цвету

{

to_color(2);

}

//---------------------------------------------------------------------------

void __fastcall Tfrm::c_3dClick(TObject *Sender) //2D- или 3D-режим отображения графика

{

graphics->View3D = c_3d->Checked;

}

//---------------------------------------------------------------------------

Размещено на Allbest.ru


Подобные документы

  • Рассмотрение программных продуктов, обеспечивающих решение задач по распознаванию образов. Видеопотоки от камер видеонаблюдения. Изменение размера и формата представления кадра. Отслеживание движения объекта в кадре. Распознавание номеров автотранспорта.

    лабораторная работа [1,4 M], добавлен 28.11.2021

  • Обоснование выбора технологии и программных средств для разработки утилиты. Требования к функциональным характеристикам и моделирование предметной области. Спецификация вариантов использования и расчет показателей экономической эффективности проекта.

    дипломная работа [1,1 M], добавлен 13.12.2013

  • Создание программного средства, осуществляющего распознавание зрительных образов на базе искусственных нейронных сетей. Методы, использующиеся для распознавания образов. Пандемониум Селфриджа. Персептрон Розенблатта. Правило формирования цепного кода.

    дипломная работа [554,8 K], добавлен 06.04.2014

  • Критерии оценки эффективности и качества создания программных средств. Роль трудоемкости и длительности создания программных средств в определении эффективности их создания. Требования к качеству, суммарные затраты на разработку программного средства.

    реферат [26,7 K], добавлен 10.10.2014

  • Нормативные и правовые акты, регламентирующие применение современных программных средств в документационном обеспечении управления в Российской Федерации. Анализ программных средств для внедрения системы электронного документооборота в ООО "СЛМ-Монтаж".

    дипломная работа [163,2 K], добавлен 10.05.2015

  • Нейронные сети и оценка возможности их применения к распознаванию подвижных объектов. Обучение нейронной сети распознаванию вращающегося трехмерного объекта. Задача управления огнем самолета по самолету. Оценка экономической эффективности программы.

    дипломная работа [2,4 M], добавлен 07.02.2013

  • Отображение на плоскости точек из многомерного пространства, интерактивное распознавание отдельных классов образов в качестве объекта разработки программного продукта. Концептуальная модель предметной области. Классы и объекты интерфейса пользователя.

    дипломная работа [1,5 M], добавлен 10.06.2013

  • Основные понятия теории распознавания образов и ее значение. Сущность математической теории распознавания образов. Основные задачи, возникающие при разработке систем распознавания образов. Классификация систем распознавания образов реального времени.

    курсовая работа [462,2 K], добавлен 15.01.2014

  • Обзор задач, возникающих при разработке систем распознавания образов. Обучаемые классификаторы образов. Алгоритм персептрона и его модификации. Создание программы, предназначенной для классификации образов методом наименьшей среднеквадратической ошибки.

    курсовая работа [645,2 K], добавлен 05.04.2015

  • Информатизация России. Рынок программных средств. Основные задачи стандартизации, сертификации и лицензирования в сфере информатизации. Совокупность инженерных методов и средств создания программного обеспечения. Жизненный цикл программного обеспечения.

    лекция [352,8 K], добавлен 09.03.2009

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