Мониторинг биосферы и дистанционное зондирование. Обработка растровых изображений

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

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

Институт информационных технологий и управления в технических системах

Кафедра ИС









Расчетно-графическая работа

Мониторинг биосферы и дистанционное зондирование. Обработка растровых изображений


Выполнил: студент 441 класса

Авдошкин А.С.

Проверил: преподаватель кафедры КЭЭМ

Сырых О.А.








Севастополь 2015 год

Содержание


Введение

Раздел 1. Методы обработки изображений

1.1Обработка изображений. Сегментация

.2Методы сегментации. Кластеризация

.3Пороговая сегментация

.4Метод выращивания регионов

.5Интерактивная сегментация. Волшебная палочка

.6Интерактивная сегментация. Умные ножницы

Выводы раздела 1

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

2.1Выбор среды разработки

.2Создание пользовательского интерфейса программного модуля

.3Функции приложения. Пороговая сегментация

.4Кластеризация изображения. Метод разрастания областей

.5Интерактивная сегментация. «Волшебная палочка»

.6Интерактивная сегментация. Умные ножницы

Выводы раздела 2

Вывод

Список использованной литературы

Приложение


Введение


Актуальность темы. Широкое применение информационных технологий затронуло в настоящее время практически все сферы производственной деятельности. Во многих отраслях последние достижения этого направления связаны с началом применения географических информационных систем для решения разного рода производственных задач. Но одной из наиболее важных частей ГИС являются данные, которые составляют основу системы. Одним из методов получения геоданных является дистанционное зондирование земной поверхности. Различные средства дистанционного зондирования Земли (ДЗЗ) получили в настоящее время широкое применение во всем мире.

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

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

Для достижения поставленной цели необходимо решить следующие задачи:

.Ознакомиться с теоретическими основами обработки изображений;

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

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

В первом разделе даются краткие теоретические сведения о методах обработки изображений.

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


Раздел 1. Методы обработки изображений


.1Обработка изображений. Сегментация


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

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

Задачи автоматической сегментации делятся на два класса:

-выделение областей изображения с известными свойствами;

-разбиение изображения на однородные области.

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

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

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

Ясно, что задача разбиения изображения на однородные области поставлена некорректно. Далеко не всегда для изображения есть единственно «правильная» сегментация, и далеко не всегда задача сегментации имеет единственное решение. По той же причине нет и объективного критерия оценки качества разбиения изображения.

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

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


.2Методы сегментации. Кластеризация


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

В качестве признаков точки изображения можно использовать представление ее цвета в некотором цветовом пространстве, примером метрики (меры близости) может быть евклидово расстояние между векторами в пространстве признаков. Тогда результатом кластеризации будет квантование цвета для изображения. Задав отображение в пространство признаков, можно воспользоваться любыми методами кластерного анализа. Наиболее популярные методы кластеризации, используемые для сегментации изображений - к-средних. средних - это итеративный метод, который используется, чтобы разделить изображение на K кластеров. Базовый алгоритм приведён ниже:

-выбрать K центров кластеров, случайно или на основании некоторой эвристики;

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

-заново вычислить центры кластеров, усредняя все пиксели в кластере;

-повторять шаги 2 и 3 до сходимости (например, когда пиксели будут оставаться в том же кластере).

Здесь в качестве расстояния обычно берётся сумма квадратов или абсолютных значений разностей между пикселем и центром кластера. Разность обычно основана на цвете, яркости, текстуре и местоположении пикселя, или на взвешенной сумме этих факторов. K может быть выбрано вручную, случайно или эвристически.

Этот алгоритм гарантированно сходится, но он может не привести к оптимальному решению. Качество решения зависит от начального множества кластеров и значения K.

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

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


1.3Пороговая сегментация


Пороговая обработка, вероятно, самый простой метод сегментации, что привлекает к нему большое внимание специалистов. Метод ориентирован на обработку изображений, отдельные однородные участки которых различаются средней яркостью. Простейшим и вместе с тем часто применяемым видом сегментации является бинарная сегментация, когда имеется только два типа однородных участков. При этом преобразование каждой точки исходного изображения x(i1,i2) в выходное y(i1,i2) выполняется по правилу (1.1).


(1.1.)


Где x0 - единственный параметр обработки, называемый порогом. Уровни выходной яркости y0 и y1, могут быть произвольными, они лишь выполняют функции меток, при помощи которых осуществляется разметка получаемой карты - отнесение ее точек к классам H0 или H1 соответственно. Если образуемый препарат подготавливается для визуального восприятия, то часто их значения соответствуют уровням черного и белого. Если существует более двух классов, то при пороговой обработке должно быть задано семейство порогов, отделяющих яркости различных классов друг от друга.

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


1.4Метод выращивания регионов


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

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

Метод разрастания областей из семян требует дополнительного ввода. Результат сегментации зависит от выбора семян. Шум на изображении может вызвать то, что семена плохо размещены. Метод разрастания областей без использования семян - это изменённый алгоритм, который не требует явных семян. Он начинает с одной области A1 - пиксель, выбранный здесь незначительно влияет на конечную сегментацию. На каждой итерации он рассматривает соседние пиксели так же, как метод разрастания областей с использованием семян. Но он отличается тем, что если минимальная d меньше, чем заданный порог T, то он добавляется в соответствующую область Aj. В противном случае пиксель считается сильно отличающимся от всех текущих областей Ai и создаётся новая область A{n+1}, содержащая этот пиксель.

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


.5Интерактивная сегментация. Волшебная палочка


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

В интерактивной сегментации изображений обычно рассматривается задача разбиения только на 2 области - объект и фон (разбиение на большее число областей получается многократным разбиением на 2 области).

Волшебная палочка является, наверное, самым известным и, возможно, самым простым алгоритмом интерактивной сегментации изображений. Она встроена практически в каждый современный графический редактор.

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

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

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

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


.6Интерактивная сегментация. Умные ножницы


Алгоритм "умные ножницы" (англ. intellegent scissors), представленный в 1996 году, быстро завоевал популярность и был встроен в самый мощный и широко распространенный редактор фотоизображений Adobe Photoshop под именем "магнитное лассо" (англ.magnetic lasso).При использовании "умных ножниц" пользователь обводит границу между объектом и фоном. Пользовательуказывает точки на границе с некоторым промежутком, а "умные ножницы" проводят граничную линию между последовательно указанными точками.

Рассмотрим алгоритм проведения граничной линии от одной точки до другой, используемый "умными ножницами". Будем считать, что у нас есть изображение A с цветами пикселей A(x,y) и дана метрическая функция p(C1,C2), задающая расстояние между двумя цветами. Рассмотрим растровую решетку как граф, устроенный следующим образом. Вершинами графа служат углы пикселей, а ребрами графа - стороны пикселей. Будем считать, что пользователь в качестве последовательных граничных точек указал два угла пикселей, соответствующих вершинам графа P и Q (Рисунок 1.1).


Рисунок 1.1. Граф изображения

Каждому ребру приписывается длина, обратно зависящая от разницы между цветами пикселей, которые примыкают к ребру вычисляемая по формуле (1.2.)


(1.2.)


Где d - приписываемая длина ребра, L - геометрическая длина ребра, C1 и C2 - цвета пикселей по обе стороны от ребра, а K - некоторая константа. В качестве граничной линии на участке между граничными точками P и Q "умные ножницы" выбирают кратчайший путь на графе, т.е. последовательность ребер, соединяющих вершины P и Q и имеющих минимальную суммарную длину. Поскольку ребра, соответствующие резким цветовым перепадам, имеют меньшую приписанную длину, "умные ножницы" стремятся провести границу именно по таким ребрам.

Таким образом, «Умные ножницы» трактуют всё изображение как граф, каждая вершина которого соответствует пикселю изображения, что позволяет достаточно быстро и точно проводить интерактивную сегментацию изображения.


Выводы раздела 1


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

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

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

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

5.Алгоритм «Волшебная палочка» позволяет производить выделение отдельных сегментов изображения при условии что правильно выбран порог, и цвета фона и выделяемого фрагмента различны.

.«Умные ножницы» трактуют всё изображение как граф, каждая вершина которого соответствует пикселю изображения, что позволяет достаточно быстро и точно проводить интерактивную сегментацию изображения.


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


2.1Выбор среды разработки


В качестве среды разработке при создании приложения была использована IntelliJ IDEA 2013, так как в данной среде наиболее удобно реализована работа с языком программирования Java.

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

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

Таким образом, в качестве среды разработке при создании приложения была использована IntelliJ IDEA 2013, так как при помощи данной среды, легко можно создать графический интерфейс для работы с растровым изображением.


.2Создание пользовательского интерфейса программного модуля


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

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

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

Пользовательский интерфейс включающий в себя четыре основных части:

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

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

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

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

Пользовательский интерфейс данного приложения представлен на рисунке 2.1.


Рисунок 2.1 Пользовательский интерфейс


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


.3Функции приложения. Пороговая сегментация


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

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

Результаты выполнения пороговой сегментации представлен на Рисунках 2.2 - 2.3.

Рисунок 2.2 Исходное изображение


Рисунок 2.3 Результат пороговой сегментации


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


.4Кластеризация изображения. Метод разрастания областей


При помощи редактора кода, были добавлены подпункты меню «Кластеризация» и «Разрастание областей». Данные подпункты включают в себя функции для сегментации изображения соответствующими методами.

Алгоритм для реализации кластеризации представлен в подпункте 1.2.данной работы. Результат кластеризации представлен на рисунке 2.4.


Рисунок 2.4. Результат кластеризации


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


Рисунок 2.5 Метод разрастания из семян


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


.5Интерактивная сегментация. «Волшебная палочка»


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

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

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

Рисунок 2.6 Результат выполнения «Волшебная палочка»


Таким образом, алгоритм «волшебная палочка» позволяет пользователю самостоятельно определять регионы которые необходимо отделить от фона.


.6Интерактивная сегментация. Умные ножницы


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

Результат вырезания фрагмента, путем применения алгоритма «умные ножницы» представлен на рисунке 2.7.


Рисунок 2.7 Результат выполнения «Умные ножницы»


Таким образом, реализация алгоритма «Умные ножницы», позволяет достаточно точно проводить интерактивную сегментацию изображения, но за счет того что алгоритм работает с графом, его работа достаточно продолжительна.


Выводы раздела 2


1.В качестве среды разработке при создании приложения была использована IntelliJ IDEA 2013, так как при помощи данной среды, легко можно создать графический интерфейс для работы с растровым изображением. В соответствии с имеющимися на участке карты объектами был создан классификатор.

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

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

4.Методы сегментации основанные на кластеризации и разрастании областей, позволяют, произвести более точное разбиение изображения на регионы, в зависимости от какого либо заданного признака чем метод пороговой сегментации.

5.Алгоритм «волшебная палочка» позволяет пользователю самостоятельно определять регионы которые необходимо отделить от фона.

6.Реализация алгоритма «Умные ножницы», позволяет достаточно точно проводить интерактивную сегментацию изображения, но за счет того что алгоритм работает с графом, его работа достаточно продолжительна.


Вывод


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

Было проведено ознакомление с теоретическим материалом основ цифровой обработки изображений.

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

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


Список использованной литературы


1.Журкин И. Г., Шайтура С. В. Геоинформационные системы. - Москва: КУДИЦ-ПРЕСС, 2009. - 272 с. - ISBN 978-5-91136-065-8

2.Модели данных в ГИС. #"justify">.Джеймс Гослинг.Спецификация языка Ява Изд. 3-е, испр. и доп. Под ред. Я. И. Алексеева. - М., 1928. - 800 с.

4.The Java Tutorial Second EditionМ.: «Информационные технологи», 1997. - 290 с.

5.Мэтью Мак-Дональд IntelliJIDEA 2007. Недостающее руководство IntelliJIDEA 2007. - СПб.: «БХВ-Петербург», 2007. - С. 784. - ISBN 978-5-7502-0343-3

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

Приложение А


Программный код

static int setImageToClaster(ImageView v, Image im){reader = im.getPixelReader();step = 1;sigma = 37;= reader;w = (int)im.getWidth();h = (int)im.getHeight();writableImage = new WritableImage(w, h);writer = writableImage.getPixelWriter();= writer;typeClasster = 0;<Claster> clasters = new ArrayList<Claster>();<Block> blocks = new ArrayList<Block>();.add(new Claster(typeClasster, Color.BLACK, 128));countBlock = 0;countIter = 0;(int i = 0; i < w; i+= step){(int j = 0; j < h; j += step){.add(new Block(typeClasster, new Index(i, j, w, h), new Index(i+step, j+step, w, h)));.get(typeClasster).setColorRGB(blocks.get(countBlock).R, blocks.get(countBlock).G, blocks.get(countBlock).B);++;

}

}.get(0).resetRgb();

// clasters.add(new Claster(++typeClasster, Color.BLUE, 255));min = 300;index = 0;check = true;(check && countIter < 15){++;.add(new Claster(++typeClasster, Color.AZURE, 255));= false;(int j = 0; j < blocks.size(); j++){blockCenter = blocks.get(j).getValue();= 300;(int i = 0; i < clasters.size()-1; i++){temp = abs(((Claster)clasters.get(i)).getCenterClasster() - blockCenter);(min > temp){= temp;= i;

}

}(min > sigma){= true;= typeClasster;

}.get(j).setTYPECLASSTER(clasters.get(index).getTYPECLASSTER());.get(index).setColorRGB(blocks.get(j).R, blocks.get(j).G, blocks.get(j).B);

}(int i = 0; i < clasters.size(); i++){.get(i).resetRgb();

}

}(int j = 0; j < blocks.size(); j++){.get(j).setColor(clasters.get(blocks.get(j).getTYPECLASSTER()).color);

}(v, writableImage);= null;= null;countIter+1;

}static Block[][] bloksForMagic;static boolean isNormalIndex(int i, int j){((i >= 0) && (j >= 0) && (i < bloksForMagic.length) && (j < bloksForMagic[0].length)){true;

}false;

}static void setMagicBlock(Claster claster, int i,int j,int sigma,int step, int countRecurs){.setColorRGB(bloksForMagic[i][j].R, bloksForMagic[i][j].G, bloksForMagic[i][j].B);[i][j].setTYPECLASSTER(claster.getTYPECLASSTER());(countRecurs < 300000){(int k = (-1)*step; k <= step; k+=step){(int s = (-1)*step; s <= step; s+=step){(isNormalIndex(i+k, j+s) &&!(k==0&&s==0)){((abs(bloksForMagic[i+k][j+s].getValue() - [i][j].getValue()) <= sigma)&&

(bloksForMagic[i+k][j+s].getTYPECLASSTER()==0)&& bloksForMagic[i+k][j+s].getValue()!=255){[i+k][j+s].setValue(bloksForMagic[i][j].getValue());(claster, i+k, j+s, sigma, step, ++countRecurs);

}

}

}

}

}

}static class Vertex implements Comparable{int vertex;double value;Vertex(int vertex, double value){.vertex = vertex;.value = value;

}

@Overrideboolean equals(Object obj) {a = (Vertex)obj;(a.value==value && a.vertex == vertex);

}

@Overrideint compareTo(Object o) {temp = (Vertex)o;result = 1;(o.hashCode() == this.hashCode()){= 0;

} else {(temp.value==value){= -1;

}else= (new Double(value)).compareTo(new Double(temp.value));

}result;

}

};static void setIntelectIns(ImageView view, Polygon polygon){reader = view.getImage().getPixelReader();w = (int)view.getImage().getWidth(), h = (int)view.getImage().getHeight();imToCopy = new WritableImage(w, h);imToPast = new WritableImage(w, h);writerToPast = imToPast.getPixelWriter();writerToCopy = imToCopy.getPixelWriter();(int i = 0; i < w; i++){(int j = 0; j < h; j++){(polygon.contains(i+dx, j+dy)){.setColor(i, j,reader.getColor(i, j));.setColor(i,j,Color.WHITE);

}else {.setColor(i, j,reader.getColor(i, j));.setColor(i, j, Color.rgb(0,0,0,0));

}

}

}.setImage(imToPast);clipboard = Clipboard.getSystemClipboard();content = new ClipboardContent();.putImage(imToCopy);.setContent(content);

}static ArrayList<ArrayList<Vertex>> setOfVertex;static double[] weightOnVertex;static TreeMultiset<Vertex> usedVertex;final static int INF = 2000000000;static int toVertex(int i, int j, int cols, int rows){index = (i)*cols + (j);index;

}static void createGraph(Image im){w = (int)im.getWidth() + 1;h = (int)im.getHeight() + 1;reader = im.getPixelReader();= new ArrayList<ArrayList<Vertex>> (w*h);

(int i = 0; i < w*h; i++){.add(new ArrayList<Vertex>());

}value; int indToVertex, indVertex;(int i = 1; i < (h-1); i++){(int j = 1; j < (w-1); j++){= toVertex(i, j, w, h);

//top(i==1){= 1.0/(abs((int)(255*reader.getColor(j-1,i-1).getBrightness()) - (int)(255*reader.getColor(j,i-1).getBrightness()))+1);= toVertex(i-1, j, w, h);.get(indVertex).add(new Vertex(indToVertex, value));.get(indToVertex).add(new Vertex(indVertex, value));

}

//right= 1.0/(abs((int)(255 * reader.getColor(j, i - 1).getBrightness()) - (int)(255 * reader.getColor(j, i).getBrightness()))+1);= toVertex(i, j+1, w, h);.get(indVertex).add(new Vertex(indToVertex, value));.get(indToVertex).add(new Vertex(indVertex, value));

//left(j==1){= 1.0/(abs((int)(255*reader.getColor(j-1,i-1).getBrightness()) - (int)(255*reader.getColor(j-1,i).getBrightness()))+1);= toVertex(i, j-1, w, h);.get(indVertex).add(new Vertex(indToVertex, value));.get(indToVertex).add(new Vertex(indVertex, value));

}

//bottom= 1.0/(abs((int)(255*reader.getColor(j-1, i).getBrightness()) - (int)(255*reader.getColor(j, i).getBrightness()))+1);= toVertex(i+1, j, w, h);.get(indVertex).add(new Vertex(indToVertex, value));.get(indToVertex).add(new Vertex(indVertex, value));

}

}

}static ArrayList<Integer> getPathInGraph(int startX, int startY, int endX, int endY, int w, int h){++; h++;length = w*h;fromVertex = toVertex(startX, startY,w,h);= TreeMultiset.create();= new double[length];[] used = new boolean[length];(int i = 0; i < length; i++){[i] = INF;[i] = false;

}.add(new Vertex(fromVertex,0));<Integer> answer = new ArrayList<Integer>();startVertex = toVertex(startX, startY, w, h);endVertex = toVertex(endX, endY, w, h);[startVertex] = 0;[] p = new int[length];(usedVertex.size()>0) {v;temp = usedVertex.elementSet().first();= temp.vertex;.elementSet().remove(temp);[v] = true;(weightOnVertex[v]==INF){;

}(int j = 0; j < setOfVertex.get(v).size(); ++j) {to = setOfVertex.get(v).get(j).vertex;len = setOfVertex.get(v).get(j).value;(weightOnVertex[v] + len < weightOnVertex[to]) {[to] = weightOnVertex[v] + len;[to] = v;

}(!used[to]){.add(new Vertex(to,weightOnVertex[to]));[to] = true;

}

}

}= null;= null;(int i = endVertex; i!=startVertex; i = p[i]){.add(i);

}answer;

}static int sigmaParam;static void setSigmaParam(int s){= s;

}static int setImageToMagic(ImageView v, Image im){step = 1;sigma = sigmaParam;brightPixel;w = (int)im.getWidth();h = (int)im.getHeight();typeClasster = 0;countBlock = 0;countIter = 0;[]arrayPoint = new Index[100];countPoint = 1;[countPoint] = new Index(w/2, h/2, w, h);[][] twoDArrayBlock = new Block[w][h];reader = im.getPixelReader();= reader;= (int)(reader.getColor(startPointX, startPointY).getBrightness()*255);writableImage = new WritableImage(w, h);writer = writableImage.getPixelWriter();= writer;<Claster> clasters = new ArrayList<Claster>();<Block> blocks = new ArrayList<Block>();.add(new Claster(typeClasster, Color.BLACK, 128));(int i = 0; i < w; i+= step){(int j = 0; j < h; j += step){.add(new Block(typeClasster, new Index(i, j, w, h), new Index(i+step, j+step, w, h)));[i][j] = blocks.get(countBlock);.get(typeClasster).setColorRGB(blocks.get(countBlock).R, blocks.get(countBlock).G, blocks.get(countBlock).B);++;

}

}.get(0).resetRgb();.add(new Claster(++typeClasster, Color.AZURE, 255));= twoDArrayBlock;(clasters.get(typeClasster), startPointX, startPointY, sigma, step, 0);.get(typeClasster).resetRgb();write = new WritableImage(w, h);writer1 = write.getPixelWriter();= writer1;(int j = 0; j < blocks.size(); j++){(blocks.get(j).getTYPECLASSTER()==0){.get(j).setColor(Color.rgb(blocks.get(j).R, blocks.get(j).G, blocks.get(j).B, 0));

}else.get(j).setColor(Color.rgb(blocks.get(j).R, blocks.get(j).G, blocks.get(j).B));

}clipboard = Clipboard.getSystemClipboard();content = new ClipboardContent();.putImage(write);.setContent(content);= writer;(int j = 0; j < blocks.size(); j++){(blocks.get(j).getTYPECLASSTER()==0){.get(j).setColor(Color.rgb(blocks.get(j).R, blocks.get(j).G, blocks.get(j).B));

}else.get(j).setColor(Color.WHITE);

}(v, writableImage);= null;= null;= null;brightPixel;

}static int setImageToSegmentFill(ImageView v, Image im){step = 1;sigma = 25;w = (int)im.getWidth();h = (int)im.getHeight();typeClasster = 0;countBlock = 0;countIter = 0;[]arrayPoint = new Index[100];countPoint = 1;[countPoint] = new Index(w/2, h/2, w, h);[][] twoDArrayBlock = new Block[w][h];reader = im.getPixelReader();= reader;writableImage = new WritableImage(w, h);writer = writableImage.getPixelWriter();= writer;<Claster> clasters = new ArrayList<Claster>();<Block> blocks = new ArrayList<Block>();.add(new Claster(typeClasster, Color.BLACK, 128));(int i = 0; i < w; i+= step){(int j = 0; j < h; j += step){[i][j] = null;

}

}(int i = 0; i < w; i+= step){(int j = 0; j < h; j += step){.add(new Block(typeClasster, new Index(i, j, w, h), new Index(i+step, j+step, w, h)));[i][j] = blocks.get(countBlock);.get(typeClasster).setColorRGB(blocks.get(countBlock).R, blocks.get(countBlock).G, blocks.get(countBlock).B);++;

}

}.get(0).resetRgb();maxx = 0;(int i = 0; i < w; i+= step){(int j = 0; j < h; j += step){(twoDArrayBlock[i][j].getTYPECLASSTER()==0){.add(new Claster(++typeClasster, Color.AZURE, 255));= twoDArrayBlock;(clasters.get(typeClasster), i, j, sigma, step, 0);.get(typeClasster).resetRgb();

}

}

}(int j = 0; j < blocks.size(); j++){.get(j).setColor(clasters.get(blocks.get(j).getTYPECLASSTER()).color);

}(v, writableImage);= null;= null;= null;maxx;

}



МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ СЕВАСТОПОЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Институт информационных технологий и управления в технических системах

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ