Автоматизированная система колоризации полутонового изображения

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

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

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

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

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

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

3.4.2 Степень риска для собственной жизни

Разрабатываемая система не несет прямой угрозы жизни пользователя системы. Система работает независимо от других систем, не влияет на работу предприятия или чего-либо еще (см пункт 1.3). Автоматизированная система не предполагает использование на производстве, функционирует в офисном помещении. Офисные помещения соответствуют санитарным правилам и нормам СанПиН 2.2.1/2.1.1.1278-03 «Гигиенические требования к естественному, искусственному и совмещенному освещению жилых и общественных зданий», СанПиН 2.2.3.1329-03 «Требования по защите персонала от воздействия импульсных электромагнитных полей» и СанПиН 2.2.4.548-96 «Гигиенические требования к микроклимату производственных помещений» и СанПиН 2.2.2/.2.4.1340-03 при работе с персональным компьютером. Таким образом, система функционирует в безопасной для человека среде, т.е. степень риска для собственной жизни пользователя в данной системе минимальна - класс 1.

3.4.3 Ответственность за безопасность других лиц

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

3.4.4 Количество конфликтных производственных ситуаций за смену

Работа ведется по модели «человек - машина», следовательно, пользователь в процессе деятельности имеет конфликты с машиной и сам с собой. В системе так же может возникнуть конфликтная ситуация между пользователем и экспертом системы в связи с несогласованностью действий. Количество возникающих конфликтных ситуаций не должно превышать одного за смену, так как единственной проблемой несогласованности может быть необученная или отсутствующая нейронная сеть. Данный показатель напряженности имеет 2 класс, соответствующему 1-3 конфликтным ситуациям.

3.5 Монотонность нагрузок

3.5.1 Число элементов, необходимых для реализации простого задания или многократно повторяющихся операций

Необходимым условием отнесения операций или действий к монотонным является не только их частая повторяемость и малое количество приемов. Это может наблюдаться и при других работах, но и их однообразие и, самое главное, их низкая информационная содержательность, когда действия и операции производятся автоматически и практически не требуют пристального внимания, переработки информации и принятия решений. Этим можно сказать, что в ходе работы практически не задействуют «интеллектуальные» функции. Во время работы системы эксперт выполняет одну и ту же последовательность действий. Пользователь системы так же выполняет шаблонную работу. Различая связаны с выбором различных параметров и работой с различными изображениями. По этому показателю система относится ко 2 классу напряженности.

3.5.2 Продолжительность выполнения простых заданий или повторяющихся операций

Все системы-колоризаторы по этому показателю можно отнести ко 2 классу, так как продолжительности повторяющихся действий не превышает 60 секунд. К повторяющимся действиям относятся:

- ввод параметров сети (< 25 сек);

- задание параметров обучения (< 25 сек);

- запуск обучения с выбором типа отображения (< 10 сек).

3.5.3 Время активных действий

Наблюдаемый объект при работе эксперта по большей части не является активным. Время активных действий пользователя примерно 15% (к этому времени относятся: выбор изображение и активация выполнения колоризации), поэтому монотонность нагрузок можно отнести к классу 1.

3.5.4 Монотонность производственной обстановки

Монотонность работ связана с пассивными действиями пользователя. В системе большая часть работ автоматизирована, а пользователь ожидает результатов обработки системы. Время пассивного ожидания составляет примерно 85% (к этому времени относятся: обучение сети и выполнение обработки изображения), поэтому монотонность по этому показателю следует отнести к классу 2.

3.6 Режим работы

3.6.1 Фактическая продолжительность рабочего дня

Все параметры («Фактическая продолжительность рабочего дня», «Сменность работы», «Наличие регламентированных перерывов и их продолжительность (без учета обеденного перерыва)») напряженности режима работы этого класса можно отнести к классу 1, так как у системы нету привязки к режиму рабочего дня - система ориентирована на обычного пользователя.

3.6.2 Сменность работы

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

3.6.3 Общая оценка напряженности трудового процесса

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

Таблица 3.1 - Оценка условий труда по показателям напряженности трудового процесса

Показатели

Класс условий труда

1

2

3.1

3.2

3.3

1 Интеллектуальные нагрузки

1.1

Содержание работы

+

1.2

Восприятие сигналов и их оценка

+

1.3

Распределение функций по степени сложности задания

+

1.4

Характер выполняемой работы

+

2 Сенсорные нагрузки

2.1

Длительность сосредоточенного наблюдения

+

2.2

Плотность сигналов за 1 час работы

+

2.3

Число объектов одновременного наблюдения

+

2.4

Размер объекта при длительности сосредоточенного внимания

+

2.5

Работа с оптическими приборами при длительности сосред. внимания

+

2.6

Наблюдение за экраном видеотерминалов

+

2.7

Нагрузка на слуховой аппарат

+

2.8

Нагрузка на голосовой аппарат

+

3 Эмоциональные нагрузки

3.1

Степень ответственности за результат собственной деятельности

+

3.2

Степень риска для собственной жизни

+

3.3

Ответственность за безопасность других лиц

+

3.4

Количество конфликтных ситуаций производственных ситуаций

+

4 Монотонность нагрузок

4.1

Число элементов, необходимых для реализации простого задания или многократно повторяющихся операций

+

4.2

Продолжительность простых заданий

+

4.3

Время активных действий

+

4.4

Монотонность производственной обстановки

+

5 Режим работы

5.1

Фактическая продолжительность рабочего дня

+

5.2

Сменность работы

+

5.3

Наличие регламентированных перерывов и их продолжительность

+

Количество показателей в каждом классе

13

10

0

0

0

Общая оценка напряженности труда

+

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

Общая оценка напряженности труда администратора относится к «оптимальному» классу 1.

4. ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ СОЗДАНИЯ АВТОМАТИЗИРОВАННОЙ СИСТЕМЫ

Автоматизированная система колоризации полутоновых изображений (АСКПИ) предназначена для автоматизации процесса, в ходе которого в монохромное изображение или последовательность изображений добавляется цвет.

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

Ввод в эксплуатацию системы предполагает получение экономического эффекта за счет повышения производительности труда персонала и снижения количества сотрудников.

Чтобы доказать целесообразность создания АСКПИ, необходимо произвести расчет следующих показателей:

- единовременных затрат на создание;

- единовременных затрат на внедрение;

- текущих затрат на обеспечение функционирования системы;

- экономические результаты от внедрения.

По результатам этих расчетов определяется экономическая эффективность разработки АСКПИ.

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

Таблица 4.1 Программы аналоги

Название продукта

Цена (за 2011год), руб.

Adobe Photoshop

26000

AKVIS Coloriage v.8.0

20000

Photomania DX

22000

В пункте 1.2 дипломного проекта был сделан краткий обзор систем-аналогов. В таблице 4.1 указаны цены на рассматриваемые аналоги.

Рассмотренные аналоги обладают большой функциональностью, когда как разрабатываемая АС направлена на решение узкого круга задач. Для решения конкретно поставленной задачи будет экономически более выгодно и целесообразно воспользоваться АСКПИ, которая обладает более низкой стоимостью.

4.1 Планирование и организация процесса разработки

Планирование и организация процесса разработки системы выполняется по следующему плану:

- составление перечня работ по разработке АСКПИ;

- определение состава и количества исполнителей каждой работы;

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

- составление плана-графика выполнения работ.

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

.(4.1)

Экспертные оценки и расчетные величины трудоемкости приводятся в таблице 4.2.

Таблица 4.2 - Экспертные оценки и расчетные величины трудоемкости работ

Вид работ

Оценка трудоемкости

Ожидаемая трудоемкость

1

2

3

4

5

1. Организационная подготовка к созданию АСКПИ. Определение ее функций и целей, требований к системе

4

6

7

5,83

2. Концептуальное проектирование системы

6

10

12

9,67

3. Анализ функциональной схемы системы, определение структуры потоков данных

4

5

6

5

4. Анализ структуры файлов входных данных, детализация требований к системе

3

5

10

5,5

5. Разработка алгоритмов. Разработка интерфейса пользователя

25

33

35

32

6. Разработка и отладка программного обеспечения интерфейсной части системы

6

8

10

8

7. Разработка и отладка программного обеспечения, реализующего алгоритмы функционирования системы

37

38

42

38,5

8. Тестирование и отладка системы

2

4

9

4,5

9. Разработка документации на систему

5

5

5

5

Продолжительность каждой работы определяется по формуле:

, (4.2)

где ? численность исполнителей, чел.

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

Таблица 4.3 - Сводная таблица для планирования работ

Наименование работы

Какие работы нужно выполнить перед данной

Исполнители

Труд-сть работы чел.дн.

Прод-ность работы, дн.

Должность

Коли-во

1

2

3

4

5

6

1. Организационная подготовка к созданию АСКПИ. Определение ее функций и целей, требований к системе

?

программист

1

6

6

2. Концептуальное проектирование системы

1

программист

1

10

10

3. Анализ функциональной схемы системы, определение структуры потоков данных

2

программист

1

5

5

4. Детализация требований к системе

3

программист

1

6

6

5. Разработка алгоритмов. Разработка интерфейса пользователя

4

программист

1

32

32

1

2

3

4

5

6

6. Разработка и отладка программного обеспечения интерфейсной части системы

5

программист

1

8

8

7. Разработка и отладка программного обеспечения, реализующего алгоритмы функционирования системы

6

программист

1

39

39

8. Тестирование и отладка системы

7

программист

1

5

5

9. Разработка документации на систему

8

программист

1

5

5

Рисунок 4.1 - План график разработки системы

План-график разработки системы (рисунок 4.1) имеет линейно-последовательный вид, поскольку все работы проведены одним исполнителем и, соответственно, те работы, которые могли бы выполняться параллельно, на практике были осуществлены последовательно. Длительность разработки 116 дней.

4.2 Технико-экономическое обоснование АСКПИ

Задачи и содержание технико-экономического обоснования разработки АСКПИ состоят в следующем:

1. Доказательство целесообразности создания АСКПИ на основе анализа следующих составляющих:

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

- качественная оценка системы (технические, математические и информационные возможности);

- экономическая целесообразность разработки АСКПИ;

2. Доказательство целесообразности внедрения АСКПИ на основе расчетов:

- единовременных затрат на внедрение;

- текущих затрат на функционирование системы;

- показателей экономической эффективности.

4.3 Расчет затрат на разработку АСКПИ

Укрупненный расчет затрат на разработку Кп АСКПИ можно выполнить по формуле:

, (4.3)

где ? фонд основной заработной платы разработчиков, р.,

? коэффициент дополнительной зарплаты,

? коэффициент отчислений на социальные нужды от основной и дополнительной заработной платы,

? коэффициент накладных расходов организации, разрабатывающей проект,

? коэффициент прочих расходов,

? машинное время, затраченное для отладки программного обеспечения АСКПИ, ч.,

? стоимость машино-часа работы ЭВМ, р.

Укрупненный расчет фонда основной заработной платы исполнителей работ по разработке АСКПИ производится по формуле:

, (4.4)

где ? суммарная трудоемкость работ по разработке АСКПИ,

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

? количество дней рабочего времени разработчиков;

Себестоимость машино-часа работы ПК определяется по формуле:

См-ч = ,(4.5)

где А ? годовая сумма амортизации, р.,

Зэ ? затраты на силовую электроэнергию, р.,

Зм ? затраты на материалы в год, р.,

Зн ? накладные расходы, р.,

Фд ? действительный годовой фонд времени работы ПК, ч.

Расчет затрат на заработную плату обслуживающего персонала производится по формуле:

Зп = 10000 12 1,1 1,34 = 183 312 р. (4.6)

для количество работников = 10, месячный оклад работника = 10000 р., коэффициент, учитывающий дополнительную заработную плату = 1,1, коэффициент, учитывающий отчисления на социальные нужды = 1,34, получаем Зп = Зп / 10 = 18 331,2 р.

Годовые амортизационные отчисления по ПК считаются по формуле:

А=5 000 р.,(4.7)

где ? стоимость ПК, используемого при отладке АСКПИ.

Затраты на электроэнергию в год Зэ определяются следующим образом:

Зэ = Wу • Cэ • Tв = = 15 300 р.,(4.8)

где ? установленная мощность, кВт,

Cэ ? стоимость силовой электроэнергии, р./кВт,

Tв ? время, в течение года, когда ПК потребляет электроэнергию, ч.

Затраты на текущие ремонты Зр и на материалы Зм при укрупненном расчете (10% от стоимости КСА) можно принять: Зр + Зм = = 2 000р.

В накладные расходы включаются затраты на оплату труда АУП, затраты на амортизацию и содержание площадей, затраты на отопление, освещение и прочие. Накладные расходы возьмём равными 70% от суммы заработной платы и учитываем, что количество компьютеров в лабораторном классе равно 10: Зн=(18331,2 *0,7/10)*10=12834 р.

В накладные расходы Зн включаются затраты на оплату труда АУП, затраты на амортизацию и содержание площадей, затраты на отопление, освещение и прочие.

Фонд времени Фд устанавливается, исходя из номинального фонда времени и времени профилактики оборудования и ремонтов:

Фд = S · h · D - Tпр=8· 1· 255 - 40 = 2000 ч, (4.9)

где S -- продолжительность смены, ч. - 8 часов,

h -- количество смен - одна,

D -- число рабочих дней в году, дн. - 255 дней,

Tпр -- время ремонтов и профилактики оборудования в год, ч., 1 раз в месяц по 8 ч. - 96 ч. в год.

Отсюда, себестоимость машино-часа работы ПК:

См-ч==(18331,2+5000+15300+2000+12834)/2000= 26,73р.

Затраты на разработку АСКПИ:

Кп =83520· [(1 + 0,14) · (1 + 0,34) + 0,7 +0,1] + 480 · 26,73= 207231,55 р.

Результаты расчета затрат на разработку АСКПИ приведены в таблице 4.4.

Таблица 4.4 - Результаты расчета затрат на разработку АСКПИ

Параметр

Значение

Фонд основной заработной платы р.

83520

Годовые амортизационные отчисления по КСА А, р.

5000

Затраты на электроэнергию в год Зэ, р.

15 300

Затраты на текущие ремонты Зр и на материалы Зм, р.

2000

Накладные расходы Зн, р.

12834

Фонд времени Фд

2000

Себестоимость машино-часа работы КСА См-ч, р.

26,73

Суммарные затраты на разработку AC Кп, р.

207231,55

4.4 Расчет-прогноз минимальной цены разработки АСКПИ

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

Zmin = Кп + Пmin. (4.10)

Сумма прибыли Пmin рассчитывается, исходя из планируемого минимального уровня рентабельности затрат разработчика:

Пmin = Кп · (Rmin /100), (4.11)

где ? минимальный уровень рентабельности, 20 %.

Тогда прибыль равна: Пmin = 207231,55· 0,2 = 41446,31 р.

Zmin = Кп + Пmin= Кп + Кп (Rmin /100). (4.12)

Zmin = 248 667,86 р. - цена разработки при минимальном уровне рентабельности 20%.

4.5 Расчет целесообразного объема продаж и оценка безубыточности

Для анализа целесообразности затрат на разработку АСКПИ, следует применить метод анализа безубыточности проекта и рассчитать целесообразный объем продаж.

Метод анализа заключается в том, чтобы выявить точку безубыточности (ТБ). Под ней подразумевается точка кривой (прямой), показывающей рост объема продаж в системе двух координатных осей, в которой доходы от продажи равны суммарным затратам. Для анализа безубыточности необходимы следующие данные:

- затраты (единовременные) на разработку АСКПИ, р.;

- затраты на рекламу, сопровождение на одну сделку S1, p. (4000р.);

- цена продажи Z, р.

Объем продаж в стоимостном выражении Q является функцией от количества продаж N и рассчитывается по формуле:

Q(N) = ZN.(4.13)

Суммарные затраты на разработку и реализацию проекта определяются по формуле:

S(N) = КП + S1N.(4.14)

ТБ находится из соотношения:

Q(NТБ) = S(NТБ).(4.15)

Подставив в выражение (4.15) формулы (4.13) и (4.14), получим:

Z · NТБ = КП + S1N,(4.16)

Откуда

.(4.17)

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

Цену одной копии программы возьмем равной 19000 рублей. При оценке спроса изучались аналогичные продукты конкурентов, их ценовые каталоги. Оценка издержек осуществлялась на основе анализа уровня и структуры издержек. Тогда по формуле 4.17, получим:

NТБ = 207231,55/(19000-4000) = 13,8>14 (экз.).

Точка безубыточности служит разработчику хорошим ориентиром в оценке риска затрат на разработку. График безубыточности приведен на рисунке 4.2.

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

Рисунок 4.2 - График безубыточности и целесообразного объема продаж

Поэтому рассчитывается целесообразный объем продаж NЦ из соотношения:

ZNЦ = (КП + S1N) + Пmin .(4.18)

.(4.19)

Откуда NЦ ? (207231,55+41446,31)/(19000 - 4000) =16,57=17 (экз.).

Анализ точки безубыточности и целесообразного объема продаж при разных ценах продаж приведен в таблице 4.5

Таблица 4.5 - Анализ безубыточности при разных ценах продаж

Цена продажи (р.)

NТБ (р.)

NЦ (р.)

16000

17

21

17000

16

19

18000

15

18

19000

14

17

20000

13

16

21000

12

15

22000

12

14

23000

11

13

Таким образом, в системе заинтересованы научные организации, средние и крупные фирмы, в деятельность которых входят подобные задачи колоризации полутоновых изображений. При N ? 14 разработка АС будет безубыточной. Для получения минимальной прибыли объем продаж должен быть больше или равен 15.

4.6 Расчет единовременных затрат на внедрение

Единовременные затраты на внедрение АСКПИ () определяются по формуле:

К = Зпр + Кк i, (4.20)

где Зпр = 207231,55 р. ? затраты на разработку проекта АСКПИ,

Кк ? величина капитальных затрат,

? коэффициент участия ПК.

Величина капитальных затрат определяется по формуле:

,(4.21)

где = 20000 р. ? сметная стоимость ПК, сюда входит: системный блок, монитор, клавиатура и мышь,

= 1500 р. ? затраты на установку, монтаж и запуск ПК в работу,

= 800 р. ? транспортно-заготовительные расходы.

Капитальные затраты составят:

р.

Таким образом, единовременные затраты на внедрение составят:

K = 207 231,55 + 22399 * 1 = 229 630,55 р.

4.7 Расчет текущих затрат на функционирование АСКПИ

Текущие затраты на функционирование АСКПИ рассчитываются путем определения суммарных затрат, вызываемых решением комплекса задач (процедур) АСКПИ и общесистемных затрат по формуле:

Зтек = Зi + Зсист, (4.22)

где Зсист ? общесистемные затраты за год, р./год,

Зi ? затраты, при решении i-ой задачи АСКПИ, р./год,

? число задач, решаемых в течение года.

Затраты могут быть рассчитаны по формуле:

Зтекпм.в., (4.23)

где Зп ? годовые затраты на заработную плату научных работников, решающих данную задачу с учетом всех начислений в условиях АСКПИ, р.;

Зм.в. ? стоимость работы комплекса средств автоматизации по данной задаче, р./год.

Затраты, связанные с работой ПК по данной задаче, могут быть рассчитаны по формуле:

Зм.в .= См-ч*t,(4.24)

где См-ч ? себестоимость часа работы ПК, руб./ч.,

t ? время решения задачи с использованием ПК в год, ч.

Себестоимость машино-часа работы ПК рассчитана выше и составляет:

См-ч = 26,73 р.

Отсюда, Зм.в = 12830,4 р.

Зтек =183 312 + 12 830,4= 196 142,4 р.

4.8 Расчет экономических результатов от внедрения

Для оценки экономических результатов от внедрения АСКПИ необходимо выявить ее влияние на конечные результаты деятельности предприятия (организации).

Рассмотрим три ситуации внедрения автоматизированной системы в различные по размеру организации в таблице 4.6.

Таблица 4.6 - Внедрение АС в различные по величине организации

Количество решаемых задач

Необходимое количество научных сотрудников

Необходимое количество научных сотрудников компьютеров с использованием АСКПИ

Количество высвобождающихся работников

30

3

1

2

60

4

1

3

90

6

1

5

Годовая экономия от внедрения АСКПИ определяется по формуле:

Эг = Эi ? Зтек,(4.25)

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

Эi ? экономия по i-ой статье затрат (равняется заработной плате 2 работников), т.р.,

Зтек ? затраты на функционирование АСКПИ.

Э1=2*10000*12*(1+0,34)*(1+0,14)= 366 624 р.

Таким образом, годовая экономия от внедрения рассматриваемой задачи в рамках АСКПИ Эг будет равна: Эг=366 624 - 207 231,55=159392,45р.

4.8 Расчет экономической эффективности инвестиционных затрат на внедрение

Метод расчета чистой дисконтированной стоимости предполагает, что предприятие заранее задает минимально допустимую ставку процента, при которой капитальные вложения могут считаться эффективными. Такая ставка процента называется расчетной ставкой процента (“субъективная” ставка процента фирмы).

Базисом для установления расчетной ставки может быть ставка процента на заемный капитал, который предприятие должно выплачивать кредитору. Если процентная ставка не учитывает инфляцию, то ее называют номинальной ставкой процента . Реальная ставка процента учитывает уровень инфляции .

Реальная ставка процента рассчитывается по формуле:

.(4.26)

Номинальная ставка процента , уровень инфляции .

Отсюда, .

Чистая дисконтированная стоимость (интегральный эффект) рассчитывается по формуле:

ЭI = Эjг j - Kj j ,(4.27)

где ? период функционирования проекта, г.,

Kj ? инвестиционные затраты в j-м году, т.р.,

Эjг ? экономический результат (экономия, прибыль) в j-м году, т.р.,

? коэффициент дисконтирования для года.

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

. (4.28)

Чистая дисконтированная стоимость равна:

ЭI iг i-K. (4.29)

Расчета чистой дисконтированной стоимости будем проводить с использованием таблицы 4.7.

Таблица 4.7 - Расчет чистой дисконтированной стоимости

Год

Единовременные затраты на внедрение, руб.

Дополнительная прибыль и амортизация руб.

Ряд платежей и поступлений, руб.

Расчетная процентная ставка, 7,96 %

Коэффициент дисконтирования

Текущая дисконтированная стоимость, руб.

0

229 630

-

-229 630

-

-229 630

1

-

159 392

159 392

0,93

148235

2

-

159 392

159 392

0,858

136785

3

-

159 392

159 392

0,795

126717

Всего

229 630

478176

248546

-

182 107

Интегральный эффект составил ЭI = 182 107 > 0, поэтому затраты на внедрение АСКПИ можно считать эффективными.

Срок возврата капитальных вложений около 19-х месяцев, что является допустимым для аналогичных АСКПИ.

На рисунке 4.3 представлен график интегрального эффекта от внедрения АСКПИ за три года.

Рисунок 4.3 - Интегральный эффект от внедрения АСКПИ

ЗАКЛЮЧЕНИЕ

В соответствии с требованиями дипломного проекта была разработана автоматизированная система колоризации полутоновых изображений. В ходе работы над дипломным проектом были изучены методики обработки изображения, способы преобразования изображения с помощью нейронной сети, различные способы сегментации изображения. Были проведены испытания на различных функциях активации нейронной сети и различных параметрах обучения. Выявлено, что линейная и тангенциальная функция активации показывают наилучший показатель обучения. Оптимальным значением числа нейронов в скрытом слое является 15, наиболее удачным алгоритмом обучения являются алгоритмы обратного распространения и LMS. Создана информационно-логическая модель автоматизированной системы в нотации UML с помощью инструментального средства Enterprise Architect 8.0. В ходе работы были сформулированы требования к техническому обеспечению и обоснован выбор средств автоматизации. Программное обеспечение системы разработано в среде IDEA 10.0 на языке высокого уровня Java 1.6 под управлением ОС Windows 7. Программное обеспечение полностью соответствует требованиям, описанным в техническом задании.

В разделе безопасности жизнедеятельности проведен анализ напряженности труда пользователя системы. Общая оценка напряженности труда пользователя относится к «оптимальному» классу 1, результаты анализа представлены в таблице 3.1.

В разделе технико-экономического обоснования произведен расчет экономической эффективности инвестиционных затрат на внедрение, интегральный эффект составил 182 107 руб. (затраты можно считать эффективными), срок возврата капитальных вложений составил около 19 месяцев, что является допустимым для аналогичных систем.

Список использованных источников

1 Онлайн энциклопедия [Электронный ресурс]. - www.wikipedia.org

2 Головко, В.А под ред. проф. Галушкина, А.И. Нейронные сети: обучение, организация и применение [Текст]/ Головко, В.А. - ИПРЖР, Москва, 2001 г.

3 Eitan Sharon Segmentation by Weighted Aggregation CVPR [Текст]. - 2004 г., 45 с.

4 Компьютерная Графика и Мультимедиа Сетевой журнал Выпуск №4(4)/2006 Методы сегментации изображений: автоматическая сегментация [Электронный ресурс]. - http://cgm.computergraphics.ru/content/view/147

5 Эффективная сегментация изображений на графах [Электронный ресурс]. - http://habrahabr.ru/blogs/algorithm/81279/

6 Борисов, Е.С. Нейронные сети: обучение с учителем [Электронный ресурс]/ Борисов, Е.С.- http://scorcher.ru/neuro/science/perceptron/ mem32.htm

7 Doyle, W. Operations useful for similarity invariant pattern recognition. // Journal ACM. [Текст]/ Doyle, W.. - 1962 Том. 9, № 2. С. 259-267.

8 Хайкин, С. «Нейронные сети» [Текст]/ Хайкин, С. - Москва, 2006 г. - 1105 с.

9 Леоненков, А. Самоучитель UML [Текст] / А. Леоненков. - СПб. : БХВ- Санкт-Петербург, 1999. - 304 с

10 Дерябкин, В.П. Проектирование автоматизированных систем обработки информации и управления. Курс лекций. СГАУ, 2011 г. [Текст]/ Дерябкин, В.П.. - 120с.

11 Прохоров, С.А. Аппроксимативный анализ случайных процессов. [Текст]/А.С.Прохоров. -2-е изд., перераб. и доп./СНЦ РАН, 2001. - 125с.

12 Хорстман, К.С., Корнелл, Г. Java 2 для профессионалов Том 2, 2009 г. [Текст]/Хорстман, К.С., Корнелл, Г.. - 586 с.

13 СТО СГАУ 02068410-004-2007. Общие требования к оформлению учебных текстовых документов: Методические указания [Текст]. - Самара, 2007

14 СТП СГАУ 6.1.4. Общие требования к оформлению учебных текстовых документов [Текст]. - Самара, Самарский аэрокосмический университет, 1997. - 16 с.

15 Семенов, А.Б. Обработка и анализ изображений с использованием языка JAVA [Электронный ресурс]/Семенов, А.Б.. - Курс подготовлен при поддержке Sun Microsystems, Тверь 2007 - www.sun.ru

16 Колоризация полутонового изображения [Текст] / А.П. Платонов, И.В. Лезина // Королевские чтения: всероссийская молодежная научная конференция / Самарск. гос. аэрокосмич. ун-т им. академика С.П. Королева. Самара: СГАУ, 2011.

ПРИЛОЖЕНИЯ

Приложение 1. Руководство пользователя

Автоматизированная система

«Колоризация полутоновых изображений»

А.1 Введение

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

А.2 Необходимые условия применения

Минимальные системные требования к техническому и программному обеспечению:

- IBM - совместимый компьютер с тактовой частотой процессора 233 МГц и более;

- объем оперативной памяти не менее 1 Гб;

- жесткий диск не менее 1 Гб

- монитор с разрешением 800x600;

- видеокарта 128Mб с поддержкой 256 цветов;

- манипулятор мышь;

- Операционная система с поддержкой JVM.

А.3 Подготовка к работе

Для работы системы необходимо запустить модуль start.bat.

А.4 Описание операций

Главная форма приложения

Рисунок А.1 - Главная форма приложения

На главной форме приложения пользователю предоставляется выбор действия с помощью меню приложения. Пользователь может перейти к работе с нейронными сетями, просмотреть справку работы с приложением либо перейти непосредственно с работе с изображением. В случае выбора пункта меню «Изображение» появляется окно выбора изображения

Рисунок А.2 - Окно выбора изображения

После выбора изображения появляется окно выбора параметров сегментирования. Здесь можно выбрать функцию сегментирования (Гаусса либо Лапласа) и задать параметры функции, после чего нажать кнопку «Сегментировать», либо выполнить сегментацию вручную, нажав кнопку «Выполнить вручную».

Рисунок А.3 - Выбор параметров сегментирования

В разработанном приложении перед сегментацией изображения пользователь задает следующие параметры: Функция сегментирования (Лаплас или Гаусс), коэффициент размытия (для функции Гаусса), коэффициент сегментирования (на основании которого принимается решение о соединении двух графов), минимальный размер сегмента (в пикселях). После этого происходит автоматическая сегментация изображения на основе выбранных параметров (рисунок А.4).

Рисунок А.4 - Сегментированное изображение

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

Рисунок А.5 - Выполнение сегментации вручную

В случае выбора в пункте меню главного окна пункта «Нейронная сеть» появится окно редактирования параметров нейронных сетей:

Рисунок А.6 - Окно работы с нейронными сетями

В появившемся окне отображается список всех сетей, полученных в приложении. Каждую сеть можно удалить и отредактировать. Также отсюда производится создание новых сетей. Для обучения выбранной сети нужно нажать кнопку «Обучить». Обучение сетей производится так же пользователем:

Рисунок А.7 - Обучение нейросети

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

Рисунок А.8 - График ошибки обучения

Приложение 2. Листинг основных классов программы

В качестве алгоритма сегментации изображения был реализован алгоритм Efficient Graph-Based Image Segmentation авторов PedroF. Felzenszwalb (MIT) и DanielP. Huttenlocher (Cornell University). Для повышения производительности работы приложения было решено хранить изображение в форме одномерного вектора:

public class Image {

privateint w;

privateint h;

publicint[] data;

privateBufferedImage cache;

public Image(BufferedImage image) {

w = image.getWidth();

h = image.getHeight();

data = new int[w * h]; // allocate space for image data

for (int i = 0; i < w * h; i++)

data[i] = image.getRGB(i % w, i / w);

}

public Image(int width, int height) {

w = width;

h = height;

data = new int[w * h]; // allocate space for image data

}

publicintgetIJ(int i, int j) {

return data[j * w + i];

}

public void setIJ(int i, int j, intval) {

data[j * w + i] = val;

}

//caching buffered image for more high speed work

public void resetCache() {

cache = null;

}

publicBufferedImagetoBufferedImage() {

if (null == cache) {

cache = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

for (int i = 0; i < w; i++) {

for (int j = 0; j < h; j++) {

cache.setRGB(i, j, getIJ(i, j));

}

}

}

returncache;

}

}

В качестве универсальной структуры работы с графами, позволяющей быстро соединять несколько графов и пересчитывать минимальные веса для решения «задачи Штейнера», была выбрана структура Disjoint-setdatastructure:

public class DisjointSet {

privateintnum;

privateUniElt[] elts;

publicDisjointSet(int elements) {

elts = new UniElt[elements];

for (int ii = 0; ii <elts.length; ii++)

elts[ii] = new UniElt();

num = elements;

for (int i = 0; i < elements; i++) {

elts[i].rank = 0;

elts[i].p = i;

elts[i].size = 1;

}

}

publicint find(int x) {

int y = x;

while (y != elts[y].p)

y = elts[y].p;

elts[y].p = y;

return y;

}

public void join(int x, int y) {

if (elts[x].rank >elts[y].rank) {

elts[y].p = x;

elts[x].size += elts[y].size;

} else {

elts[x].p = y;

elts[y].size += elts[x].size;

if (elts[x].rank == elts[y].rank)

elts[y].rank++;

}

num--;

}

}

Для реализации понятия «множество» в алгоритме Краскала применяется структура данных Disjoint-setdatastructure. Работа с ней оптимизирована на выполнение двух основных операций: узнать для некоторой вершины, какому множеству в текущий момент она принадлежит; быстро объединить эти множества в одно.

Обучение сети производится в классах наследниках класса LearningRule:

public abstract class LearningRule extends Observable implements Runnable,

Serializable {

private static final long serialVersionUID = 1L;

protected NeuralNetwork neuralNetwork;

private transient TrainingSet trainingSet;

private transient volatile boolean stopLearning = false;

public LearningRule() {

}

public void setTrainingSet(TrainingSet trainingSet) {

this.trainingSet = trainingSet;

}

public TrainingSet getTrainingSet() {

return trainingSet;

}

public NeuralNetwork getNeuralNetwork() {

return neuralNetwork;

}

public void setNeuralNetwork(NeuralNetwork neuralNetwork) {

this.neuralNetwork = neuralNetwork;

}

public void run() {

this.learn(this.trainingSet);

}

synchronized public void setStarted() {

this.stopLearning = false;

}

synchronized public void stopLearning() {

this.stopLearning = true;

}

synchronized public boolean isStopped() {

return this.stopLearning;

}

protected void notifyChange() {

setChanged();

notifyObservers();

clearChanged();

}

public abstract void learn(TrainingSet trainingSet);

}

Каждый новый класс обучения наследуется от предыдущего, переопределяя его методы:

public class BackPropagation extends SigmoidDeltaRule {

private static final long serialVersionUID = 1L;

public BackPropagation() {

super();

}

@Override

protected void updateNetworkWeights(double[] patternError) {

this.adjustOutputNeurons(patternError);

this.adjustHiddenLayers();

}

protected void adjustHiddenLayers() {

int layerNum = this.neuralNetwork.getLayersCount();

for (int i = layerNum - 2; i > 0; i--) {

Layer layer = neuralNetwork.getLayerAt(i);

for (Neuron neuron : layer.getNeurons()) {

double delta = this.calculateDelta(neuron);

neuron.setError(delta);

this.updateNeuronWeights(neuron);

} // for

} // for

}

private double calculateDelta(Neuron neuron) {

List<Connection> connectedTo = ((Neuron) neuron).getOutConnections();

double delta_sum = 0d;

for (Connection connection : connectedTo) {

double d = connection.getToNeuron().getError()

* connection.getWeight().getValue();

delta_sum += d; // weighted sum from the next layer

} // for

TransferFunction transferFunction = neuron.getTransferFunction();

double netInput = neuron.getNetInput();

double f1 = transferFunction.getDerivative(netInput);

double delta = f1 * delta_sum;

return delta;

}

}

Базовый класс функций активации:

public abstract class TransferFunction implements Serializable {

private static final long serialVersionUID = 1L;

abstract public double getOutput(double net);

public double getDerivative(double net) {

return 1d;

}

@Override

public String toString() {

return getClass().getName();

}

}

Тангенсальная функция активации:

public class Tanh extends TransferFunction implements Serializable {

private static final long serialVersionUID = 2L;

private double slope = 2d;

public Tanh() {

}

public Tanh(double slope) {

this.slope = slope;

}

public Tanh(Properties properties) {

try {

this.slope = (Double) properties.getProperty("transferFunction.slope");

} catch (NullPointerException e) {

throw new RuntimeException("properties are not set just leave default values");

} catch (NumberFormatException e) {

throw new RuntimeException("Invalid transfer function properties! Using default values.");

}

}

@Override

final public double getOutput(double net) {

// conditional logic helps to avoid NaN

if (net > 100) {

return 1.0;

} else if (net < -100) {

return -1.0;

}

double E_x = Math.exp(this.slope * net);

return (E_x - 1d) / (E_x + 1d);

}

@Override

final public double getDerivative(double net) {

double out = getOutput(net);

return (1d - out * out);

}

public double getSlope() {

return this.slope;

}

public void setSlope(double slope) {

this.slope = slope;

}

}

Класс нейросети:

public class NeuralNetwork extends Observable implements Runnable, Serializable {

private static final long serialVersionUID = 4L;

private NeuralNetworkType type;

private List<Layer> layers;

private List<Neuron> inputNeurons;

private List<Neuron> outputNeurons;

private LearningRule learningRule;

private transient Thread learningThread;

private Map<Class, PluginBase> plugins;

private String label = "";

public NeuralNetwork() {

this.layers = new ArrayList<Layer>();

this.plugins = new HashMap<Class, PluginBase>();

this.addPlugin(new LabelsPlugin());

}

public void addLayer(Layer layer) {

layer.setParentNetwork(this);

this.layers.add(layer);

}

public void addLayer(int idx, Layer layer) {

layer.setParentNetwork(this);

this.layers.add(idx, layer);

}

public void removeLayer(Layer layer) {

this.layers.remove(layer);

}

public void removeLayerAt(int idx) {

this.layers.remove(idx);

}

public Iterator<Layer> getLayersIterator() {

return this.layers.iterator();

}

public List<Layer> getLayers() {

return this.layers;

}

public Layer getLayerAt(int idx) {

return this.layers.get(idx);

}

public int indexOf(Layer layer) {

return this.layers.indexOf(layer);

}

public int getLayersCount() {

return this.layers.size();

}

public void setInput(double... inputVector) throws RuntimeException {

if (inputVector.length != inputNeurons.size()) {

throw new RuntimeException("Input vector size does not match network input dimension!");

}

int i = 0;

for (Neuron neuron : this.inputNeurons) {

neuron.setInput(inputVector[i]);

i++;

}

}

public double[] getOutput() {

double[] outputVector = new double[outputNeurons.size()];

int i = 0;

for (Neuron neuron : this.outputNeurons) {

outputVector[i] = neuron.getOutput();

i++;

}

return outputVector;

}

public void calculate() {

for (Layer layer : this.layers) {

layer.calculate();

}

}

public void reset() {

for (Layer layer : this.layers) {

layer.reset();

}

}

public void run() {

this.calculate();

}

public void learnInNewThread(TrainingSet trainingSetToLearn) {

learningRule.setTrainingSet(trainingSetToLearn);

learningThread = new Thread(learningRule);

learningRule.setStarted();

learningThread.start();

}

public void learnInNewThread(TrainingSet trainingSetToLearn, LearningRule learningRule) {

setLearningRule(learningRule);

learningRule.setTrainingSet(trainingSetToLearn);

learningThread = new Thread(learningRule);

learningRule.setStarted();

learningThread.start();

}

public void learnInSameThread(TrainingSet trainingSetToLearn) {

learningRule.setTrainingSet(trainingSetToLearn);

learningRule.setStarted();

learningRule.run();

}

public void learnInSameThread(TrainingSet trainingSetToLearn, LearningRule learningRule) {

setLearningRule(learningRule);

learningRule.setTrainingSet(trainingSetToLearn);

learningRule.setStarted();

learningRule.run();

}

public void stopLearning() {

learningRule.stopLearning();

}

public void pauseLearning() {

if (learningRule instanceof IterativeLearning)

((IterativeLearning) learningRule).pause();

}

public void resumeLearning() {

if (learningRule instanceof IterativeLearning)

((IterativeLearning) learningRule).resume();

}

public void randomizeWeights() {

for (Layer layer : this.layers) {

layer.randomizeWeights();

}

}

public void randomizeWeights(double minWeight, double maxWeight) {

for (Layer layer : this.layers) {

layer.randomizeWeights(minWeight, maxWeight);

}

}

public void initializeWeights(double value) {

for (Layer layer : this.layers) {

layer.initializeWeights(value);

}

}

public void initializeWeights(Random generator) {

for (Layer layer : this.layers) {

layer.initializeWeights(generator);

}

}

public void initializeWeights(double min, double max) {

for (Layer layer : this.layers) {

layer.initializeWeights(min, max);

}

}

public NeuralNetworkType getNetworkType() {

return type;

}

public void setNetworkType(NeuralNetworkType type) {

this.type = type;

}

public List<Neuron> getInputNeurons() {

return this.inputNeurons;

}

public void setInputNeurons(List<Neuron> inputNeurons) {

this.inputNeurons = inputNeurons;

}

public List<Neuron> getOutputNeurons() {

return this.outputNeurons;

}

public void setOutputNeurons(List<Neuron> outputNeurons) {

this.outputNeurons = outputNeurons;

}

public LearningRule getLearningRule() {

return this.learningRule;

}

public void setLearningRule(LearningRule learningRule) {

learningRule.setNeuralNetwork(this);

this.learningRule = learningRule;

}

public Thread getLearningThread() {

return learningThread;

}

public void notifyChange() {

setChanged();

notifyObservers();

clearChanged();

}

public void createConnection(Neuron fromNeuron, Neuron toNeuron, double weightVal) {

Connection connection = new Connection(fromNeuron, toNeuron, weightVal);

toNeuron.addInputConnection(connection);

}

@Override

public String toString() {

if (plugins.containsKey("LabelsPlugin")) {

LabelsPlugin labelsPlugin = ((LabelsPlugin) this.getPlugin(LabelsPlugin.class));

String label = labelsPlugin.getLabel(this);

if (label != null) return label;

}

return super.toString();

}

public void save(String filePath) {

ObjectOutputStream out = null;

try {

File file = new File(filePath);

out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)));

out.writeObject(this);

out.flush();

} catch (IOException ioe) {

throw new RuntimeException("Error while saving:", ioe);

} finally {

if (out != null) {

try {

out.close();

} catch (IOException e) {

throw new RuntimeException("Error while saving network", e);

}

}

}

}

public static NeuralNetwork load(String filePath) {

ObjectInputStream oistream = null;

try {

File file = new File(filePath);

if (!file.exists()) {

throw new RuntimeException("Cannot find file: " + filePath);

}

oistream = new ObjectInputStream(new BufferedInputStream(new FileInputStream(filePath)));

NeuralNetwork nnet = (NeuralNetwork) oistream.readObject();

return nnet;

} catch (IOException ioe) {

throw new RuntimeException("Cannot load network: ", ioe);

} catch (ClassNotFoundException cnfe) {

throw new RuntimeException("Cannot load network: ", cnfe);

} finally {

if (oistream != null) {

try {

oistream.close();

} catch (IOException ioe) {

throw new RuntimeException("OIStream error: ", ioe);

}

}

}

}

public static NeuralNetwork load(InputStream inputStream) {

ObjectInputStream oistream = null;

try {

oistream = new ObjectInputStream(new BufferedInputStream(inputStream));

NeuralNetwork nnet = (NeuralNetwork) oistream.readObject();

return nnet;

} catch (IOException ioe) {

throw new RuntimeException("Cannot load network: ", ioe);

} catch (ClassNotFoundException cnfe) {

throw new RuntimeException("Cannot load network: ", cnfe);

} finally {

if (oistream != null) {

try {

oistream.close();

} catch (IOException ioe) {

throw new RuntimeException("OIStream error: ", ioe);

}

}

}

}

public void addPlugin(PluginBase plugin) {

plugin.setParentNetwork(this);

this.plugins.put(plugin.getClass(), plugin);

}

public PluginBase getPlugin(Class pluginClass) {

return this.plugins.get(pluginClass);

}

public void removePlugin(String pluginName) {

this.plugins.remove(pluginName);

}

public String getLabel() {

return label;

}

public void setLabel(String label) {

this.label = label;

}

}

Класс многослойного персептрона:

public class MultiLayerPerceptron extends NeuralNetwork {

private static final long serialVersionUID = 2L;

public MultiLayerPerceptron(List<Integer> neuronsInLayers) {

NeuronProperties neuronProperties = new NeuronProperties();

neuronProperties.setProperty("useBias", true);

neuronProperties.setProperty("transferFunction", TransferFunctionType.SIGMOID);

this.createNetwork(neuronsInLayers, neuronProperties);

}

public MultiLayerPerceptron(int... neuronsInLayers) {

NeuronProperties neuronProperties = new NeuronProperties();

neuronProperties.setProperty("useBias", true);

neuronProperties.setProperty("transferFunction",

TransferFunctionType.SIGMOID);

neuronProperties.setProperty("inputFunction", WeightedSum.class);

Vector<Integer> neuronsInLayersVector = new Vector<Integer>();

for (int i = 0; i < neuronsInLayers.length; i++)

neuronsInLayersVector.add(new Integer(neuronsInLayers[i]));

this.createNetwork(neuronsInLayersVector, neuronProperties);

}

public MultiLayerPerceptron(TransferFunctionType transferFunctionType, int... neuronsInLayers) {

NeuronProperties neuronProperties = new NeuronProperties();

neuronProperties.setProperty("useBias", true);

neuronProperties.setProperty("transferFunction", transferFunctionType);

neuronProperties.setProperty("inputFunction", WeightedSum.class);

Vector<Integer> neuronsInLayersVector = new Vector<Integer>();

for (int i = 0; i < neuronsInLayers.length; i++)

neuronsInLayersVector.add(new Integer(neuronsInLayers[i]));

this.createNetwork(neuronsInLayersVector, neuronProperties);

}

public MultiLayerPerceptron(List<Integer> neuronsInLayers, TransferFunctionType transferFunctionType) {

NeuronProperties neuronProperties = new NeuronProperties();

neuronProperties.setProperty("useBias", true);

neuronProperties.setProperty("transferFunction", transferFunctionType);

this.createNetwork(neuronsInLayers, neuronProperties);

}

public MultiLayerPerceptron(List<Integer> neuronsInLayers, NeuronProperties neuronProperties) {

this.createNetwork(neuronsInLayers, neuronProperties);

}

private void createNetwork(List<Integer> neuronsInLayers, NeuronProperties neuronProperties) {

this.setNetworkType(NeuralNetworkType.MULTI_LAYER_PERCEPTRON);

NeuronProperties inputNeuronProperties = new NeuronProperties(InputNeuron.class, TransferFunctionType.LINEAR);

Layer layer = LayerFactory.createLayer(neuronsInLayers.get(0), inputNeuronProperties);

boolean useBias = true;

if (neuronProperties.hasProperty("useBias")) {

useBias = (Boolean) neuronProperties.getProperty("useBias");

}

if (useBias) {

layer.addNeuron(new BiasNeuron());

}

this.addLayer(layer);

Layer prevLayer = layer;

for (int layerIdx = 1; layerIdx < neuronsInLayers.size(); layerIdx++) {

Integer neuronsNum = neuronsInLayers.get(layerIdx);

layer = LayerFactory.createLayer(neuronsNum, neuronProperties);

if (useBias && (layerIdx < (neuronsInLayers.size() - 1))) {

layer.addNeuron(new BiasNeuron());

}

this.addLayer(layer);

if (prevLayer != null)

ConnectionFactory.fullConnect(prevLayer, layer);

prevLayer = layer;

}

NeuralNetworkFactory.setDefaultIO(this);

this.setLearningRule(new MomentumBackpropagation());

if (Neuroph.getInstance().shouldFlattenNetworks()) {

FlatNetworkPlugin.flattenNeuralNetworkNetwork(this);

}

}

public void connectInputsToOutputs() {

ConnectionFactory.fullConnect(getLayers().get(0), getLayers().get(getLayers().size() - 1), false);


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

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

    курсовая работа [43,5 K], добавлен 14.10.2012

  • Компьютерная графика. Пиксели, разрешение, размер изображения. Типы изображений. Черно-белые штриховые и полутоновые изображения. Индексированные цвета. Полноцветные изображения. Форматы файлов. Цвет и его модели. Цветовые модели: RGB, CMYK, HSB.

    реферат [18,1 K], добавлен 20.02.2009

  • Типы изображений (черно-белые, полутоновые, цветные) и их форматы. Устройства, создающие цифровые изображения, и их параметры. Применение и характеристики методов сжатия изображений. Поиск по содержимому в базах данных изображений. Структуры баз данных.

    презентация [360,4 K], добавлен 11.10.2013

  • Методика устранения посторонних шумов и коррекции искажения типа дисфокусировки. Обрезка сильно искаженных краев изображения. Построение яркостной гистограммы изображения и его преобразование в индексный формат с восьмицветовой палитрой в пакете Matlab.

    контрольная работа [4,7 M], добавлен 13.01.2012

  • Яркость точек и гистограммы изображения. Изменение яркости и контрастности. Метод ранговой фильтрации с оценкой середины диапазона. Наложение шумов на изображение. Преобразование изображения в негатив. Получение матрицы яркостей и построение гистограмм.

    курсовая работа [1,5 M], добавлен 11.12.2012

  • Технология считывания данных в современных устройствах оцифровки изображений. Принцип работы черно-белых и цветных сканеров. Цифровое кодирование изображений. Программные интерфейсы и TWAIN. Способ формирования изображения. Преимущество галогенной лампы.

    реферат [2,2 M], добавлен 02.12.2012

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

    курсовая работа [2,0 M], добавлен 12.11.2012

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

    курсовая работа [2,5 M], добавлен 27.11.2012

  • Функциональные возможности библиотеки OpenGL. Разработка процедуры визуализации трехмерной сцены, интерфейса пользователя и подсистемы управления событиями с целью создания приложения для построения динамического изображения 3D-модели объекта "Самолет".

    курсовая работа [1,7 M], добавлен 28.06.2011

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

    курсовая работа [1,1 M], добавлен 29.06.2013

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