Использование OpenCV для задач сегментации изображений
Исследование проблем сегментации изображений и существующих способов их решения. Выбор инструментальных средств. Информация по установке и использованию библиотеки компьютерного зрения OpenCV. Программирование алгоритмов сегментации при ее помощи.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.08.2018 |
Размер файла | 5,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Федеральное агентство связи
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«Поволжский государственный университет телекоммуникаций и информатики»
Факультет Информационных систем и технологий
Направление Информатика и вычислительная техника
Кафедра Информационных систем и технологий
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА
Использование OpenCV для задач сегментации изображений
Разработал М.А. Бауман
Самара 2017
Реферат
В дипломной работе проводится исследование алгоритмов сегментации изображений при помощи библиотеки компьютерного зрения OpenCV, а также область их применения. Кроме того, рассмотрены само понятие компьютерного зрения и его функции.
Введение
В настоящее время в области компьютерных технологий семимильными шагами развивается такая дисциплина как компьютерное зрение. Основная задача данной дисциплины - это обработка графических данных и интерпретация содержимого на изображении. Одной из основных задач компьютерного зрения является поиск одного или нескольких объектов на изображении, то есть качественно отделить объекты от фона. Однако большинство методов поиска объекта основаны на сегментации. Сегментация изображений является неотъемлемой частью компьютерного зрения. Сегментация разделяет изображение на составляющие части или объекты. Она отделяет объект от фона с целью облегчения обработки изображения и идентификации его содержимого. Компьютерное зрение и, в частности, методы сегментации охватывают все больше сфер нашей жизни. На сегодняшний день компьютерное зрение используется в таких отраслях как медицина, военная промышленность, транспортная промышленность, робототехника и др. И в этих отраслях перед машинами поставлены серьезные задачи: определение злокачественных изменений в медицине, навигация ракет в военной промышленности, автономное управление автомобилями и т.д. А потому от систем и методов компьютерного зрения требуется максимальная точность, надежность и скорость выполнения поставленных задач. На сегодняшний день все большее внимание уделяется системам, использующим машинное зрение в качестве основного источника информации. Это привело к возникновению потребности в новых алгоритмах обработки и сегментации изображений. Несмотря на это, задача качественной сегментации до сих пор не решена в полном объеме.
Все вышесказанное определило актуальность темы работы - Использование OpenCV для задач сегментации изображений.
Целью дипломного проекта (работы) является исследовать методы сегментации изображений, используя библиотеку OpenCV с открытым исходным кодом, одну из самых обширных библиотек в области компьютерного зрения
Объектом исследования выступает библиотека компьютерного зрения OpenCV.
Предметом исследования являются алгоритмы сегментации изображений.
Основными источниками информации для написания работы послужили книга Learning OpenCV, официальный сайт библиотеки OpenCV и различные научные статьи, связанные с темой сегментации изображений.
Цель и задачи написания работы определили ее структуру, которая состоит из введения, трех глав и заключения.
Во введении обосновывается актуальность работы, цель, задачи, объект и предмет исследования.
Первая глава раскрывает общие положения о компьютерном зрении, его задачах и функциях, а также о сегментации изображений и ее классификации.
Вторая глава содержит сведения о библиотеке компьютерного зрения OpenCV, ее истории, структуре и о ее возможностях.
Третья глава - самая главная. В ней содержатся исследования конкретных алгоритмов сегментации изображений, реализованных в OpenCV. Так же имеется листинг каждого алгоритма и результаты его работы в виде скриншотов.
В заключении сделаны основные выводы и результаты по проделанной работе.
1. Теоретические сведения
1.1 Компьютерное зрение
Возможность видеть и распознавать объекты - естественная и привычная возможность для человека. Однако для компьютера пока что - это чрезвычайно сложная задача. В настоящее время проводятся работы по обучению машины хотя бы тому, что человек использует каждый день, даже не замечая того.
Наверное, чаще всего обычный человек сталкивается с компьютерным зрением в супермаркете на кассе. Разумеется, речь идет о считывании штрих-кодов. Ведь они специально были разработаны именно таким образом, чтобы максимально упростить компьютеру процесс считывания. Однако есть и более сложные задачи: распознавание лиц, анализ медицинских снимков, считывание номеров автомобилей, дефектоскопия на производстве и т.д. Активно развивается использование компьютерного зрения в области систем дополненной реальности.
Итак, компьютерное зрение - это теория и технология создания машин, способных производить обнаружение, отслеживать и классифицировать объекты, а также это процесс преобразования данных, полученных с фотоаппаратов и видеокамер, в новое представление. Новым представлением может быть процесс конвертирования цветного изображения в чёрно-белое или устранение эффекта движения камеры из последовательности изображений. Все эти преобразования осуществляются для достижения определенной цели. Входные данные могут содержать некоторую контекстную информацию, такую как "датчик глубины определил объект в радиусе 1 метра" или "камера установлена в машине". Решением может быть "в этой сцене есть человек " или " на снимке есть 12 опухолевых клеток".
Не стоит обманывать себя и думать, что задачи компьютерного зрения такие уж и легкие. Насколько сложным может быть поиск, скажем, автомобиля, когда имеется только его образ? Интуиция может быть весьма обманчивой. Человеческий мозг разделяет сигнал, поступивший от органов зрения на множество каналов, которые впоследствии передают различного вида информацию в человеческий мозг. Мозг устроен таким образом, что внимание концентрируется только на важных участках изображения, исключая при этом остальные. Существует масса ответных сигналов, перемещающиеся в зрительном канале, которые пока плохо изучены. Сигналы, поступающие на ассоциативные входы, пришедшие от датчиков контроля мышц и всех других чувств, позволяют мозгу опираться на перекрестные ассоциации, накопленные за годы прожитых лет. За счет обратной связи в мозге, процесс повторяется вновь и вновь и включает в себя датчик (глаз), который механически управляет освещением с помощью радужной оболочки и настраивает прием на поверхности сетчатки.
Однако, в системе компьютерного зрения всё, что получает компьютер от камеры или с диска - это матрицу чисел. Главным образом, нет ни автоматического управления фокусом и диафрагмой, ни встроенного распознавания образов, ни перекрестных ассоциаций с многолетним опытом работы. Можно сказать, что системы компьютерного зрения все еще достаточно примитивны.
Рис. 1.1 - Представление объекта в ПК
На рисунке 1.1 изображён автомобиль. На нём человек видит боковое зеркало со стороны водителя. Компьютер же "видит" только матрицу чисел. Любое число из этой сетки имеет довольно-таки большую шумовую составляющую и само по себе дает нам мало информации, однако, эта матрица чисел - это все, что "видит" компьютер. Наша задача сводится к преобразованию матрицы чисел к виду: "боковое зеркало".
Имея только двумерное представление трехмерного мира, невозможно однозначно восстановить 3D сигнал. Формально, такого рода некорректная задача не имеет однозначного или окончательного решения. Двумерное изображение можно представить любым из бесконечных сочетаний 3D-сцен, даже если данные были совершенны. К тому же, как упоминалось ранее, данные подвержены шуму и искажениям. Такого рода повреждения связаны с изменениями в мире (погода, освещение, отражения, перемещения), недостатками в объективе и механических установках, конечным временем интеграции на датчике (размытие при движении), электрическими шумами в датчике или другой электронике, артефактами сжатия после захвата изображения. Учитывая все эти проблемы, как мы можем добиться хоть какого-то прогресса?
При проектировании практической системы, дополнительные знания контекста зачастую могут быть использованы, чтобы обойти ограничения, накладываемые визуальными датчиками. Рассмотрим следующий пример: мобильный робот должен найти и подобрать степлер. Робот может использовать следующий факт: стол -- это объект, который находится внутри офиса и чаще всего степлер можно найти на столах. Это дает неявную ссылку о размере; степлер должен поместиться на столе. Это так же помогает устранить ложные "распознавания" расположения степлера в невозможных местах (например, на потолке или окне). Робот может проигнорировать 200-футовый рекламный дирижабль с рекламой о степлере, потому что дирижаблю не хватает на фоне древесины стола. В иных случаях, когда приходиться извлекать изображения степлера из базы данных, может оказаться так, что на этих изображениях степлер будет огромных размеров или же иметь необычную форму, что повлечет за собой исключение этих изображений из рассмотрения. То есть фотограф, вероятно, взял только изображения степлеров реальных размеров. Люди также имеют тенденцию снимать объекты так, чтобы они были в центре изображения, и были повёрнуты «по-обычному» - скажем, вряд ли кто-то станет фотографировать человека вверх ногами. Таким образом, фотографии, сделанные людьми, содержат немного неявной информации.
Контекстная информация также может быть смоделирована явно методами машинного обучения. Скрытые переменные, такие как размер, ориентация притяжения и т.д. можно соотнести с их значениями в маркированном обучающем множестве. В альтернативе, можно попытаться измерить скрытые переменные смещения с помощью дополнительных датчиков. Используя датчик глубины, можно точно измерить размер объекта.
Следующая проблема компьютерного зрения -- это шум. Как правило, мы имеем дело с шумом, когда используем статистические методы. Например, может быть невозможно обнаружить контур в изображении простым сравнением соседних точек. Но если мы соберем статистику по локальной области, то задача обнаружения контура становится легче. Контур должен появиться в виде строки непосредственных ответов по локальной области, каждый из которых ориентирован в соответствии с его соседями. Так же возможно компенсировать шум, принимая статистические данные в течение долгого времени. Тем не менее иные методы учета шума или искажения путем создания четких моделей позволяют распознавать непосредственно из имеющихся данных. Например, природа искажений от объектива хорошо известна, и чтобы почти полностью исправить такие искажения, необходимо знать только параметры простой полиномиальной модели.
Те или иные действия или решения, принимаемые в компьютерном зрении, сделаны на основе данных полученных с камеры в контексте конкретной цели или задачи. Можно удалить шум или повреждения в изображении так, что система безопасности будет выдавать предупреждения, если кто-то попытается залезть на забор или же система мониторинга будет подсчитывать, сколько людей переступило через определенную область в парке аттракционов. ПО с использованием компьютерного зрения для роботов, которые передвигаются по офису будут использовать иные стратегии, нежели стационарные камеры видеонаблюдения, поскольку эти две системы имеют существенно различные контексты и задачи. Как правило, контекст задач компьютерного зрения ограничен и потому, рассчитывая на эти ограничения, задачу можно упростить и, как следствие, конечное решение будет более надежным.
В некоторых случаях, высоко функциональной библиотеки будет достаточно, чтобы решить более сложные проблемы в области компьютерного зрения. Даже если это не так, то основные компоненты библиотеки являются достаточно полными, чтобы позволить создать новое решение самостоятельно, тем самым решить почти любую проблему компьютерного зрения. Есть несколько проверенных и надежных методов, которые используют многие компоненты библиотеки. Как правило, после создания проекта обнаруживаются слабые места и исправляются с помощью собственного кода и умений (более известно, как "решить проблему которая фактически имеется, а не ту, которую вы вообразили"). Тогда можно использовать данное решение как эталон для оценки улучшений, которые будут сделаны в дальнейшем. С этого момента любые слабые места могут быть решены за счет встроенного решения.
1.2 Области применения компьютерного зрения
Одним из наиболее важных применений является обработка изображений в медицине. В этой области компьютерное зрение используется с целью получения информации из изображений для постановки медицинского диагноза пациентам. В большинстве случаев, изображения получают с помощью рентгенографии, ультразвуковых исследований, микроскопии, томографии и ангиографии. Примером информации, полученной из таких изображений, является обнаружение опухолей, атеросклероза или других злокачественных изменений. Также компьютерное зрение может применяться для измерения размеров органов, кровотока и т. д. Эта прикладная область также способствует медицинским исследованиям, предоставляя новую информацию, например, о строении мозга или качестве медицинского лечения.
Военное применение является, пожалуй, самой большой областью компьютерного зрения. Явными примерами являются обнаружение вражеских транспортных средств и солдат и управление ракетами. Наиболее совершенные системы управления ракетами направляют ракету в заданную область, вместо конкретной цели, а выбор целей производится только в тот момент, когда ракета достигает заданной области, основываясь на получаемых видеоданных. Современное военное определение «боевая осведомленность» подразумевает, что различные датчики, включая датчики изображения, предоставляют большой набор информации о поле боя, которая может быть использована для принятия стратегических решений. В этом случае, автоматическая обработка данных используется с целью уменьшения сложности или увеличения надежности получаемой информации.
Другой прикладной областью компьютерного зрения является промышленность. Здесь информацию получают для целей поддержки производственного процесса. Примером является изменение положения и ориентации деталей, поднимаемых рукой робота. Другим примером может служить контроль качества, когда детали или конечный продукт автоматически проверяются на наличие дефектов.
Одними из новейших областей внедрения компьютерного зрения являются автономные транспортные средства, включая наземные (роботы, машины), воздушные, подводные. Уровень автономности варьируется от полностью автономных (беспилотных) до транспортных средств, где системы, основанные на компьютерном зрении, помогают водителю или пилоту в различных ситуациях. Полностью автономные транспортные средства используют компьютерное зрение для навигации, то есть для получения информации о месте своего нахождения, для создания карты окружающей обстановки, для обнаружения препятствий. Они также могут быть использованы для специфических задач, к примеру, для обнаружения лесных пожаров. Примерами таких систем могут быть система предупредительной сигнализации о препятствиях на машинах и системы автономной посадки самолетов. Некоторые производители машин демонстрировали системы автономного управления автомобилем, однако эта технология все ещё не достигла того уровня, когда её можно запустить в массовое производство.
1.3 Основные функции компьютерного зрения
Реализация систем компьютерного зрения очень сильно зависит от области их применения, аппаратной платформы и требований по производительности. Некоторые системы являются самостоятельными и решают специфические проблемы измерения и детектирования. Другие системы являются подсистемами более крупных систем, способных содержать информационные базы данных (поиск аналогичных изображений), интерфейсы человек-машина (компьютерные игры), подсистемы контроля и управления механическими манипуляторами (роботы) и т.д. Однако, существуют функции, характерные многим системам компьютерного зрения:
Получение изображений - цифровые изображения получаются от одного или нескольких датчиков изображения, которые, помимо различных видов светочувствительных камер, включают радары, датчики расстояния, ультразвуковые камеры и т. д. В зависимости от типа датчика, полученные данные могут быть обычным 2D изображением, 3D изображением или последовательностью изображений.
Предварительная обработка - перед тем, как применить методы компьютерного зрения к изображению с тем, чтобы получить какую-либо информацию, необходимо обработать изображение, для того, чтобы они, в зависимости от используемого метода, удовлетворяли определенным условиям.
Выделение деталей - детали различного уровня сложности выделяются из изображения.
Детектирование / Сегментация: на определённом этапе обработки принимается решение о том, какие точки или участки изображения являются важными для дальнейшей обработки.
Высокоуровневая обработка: на этом шаге входные данные обычно представляют небольшой набор данных, например, набор точек или участок изображения, в котором предположительно находится определённый объект.
1.4 Типичные задачи компьютерного зрения.
Каждая область применения компьютерного зрения, описанная выше в п.1.2, связана с рядом задач. Наиболее хорошо определённые проблемы измерения или обработки изображений могут быть решены с использованием множества методов. Некоторые примеры типичных задач компьютерного зрения представлены ниже.
1.4.1 Распознавание
Классическая задача в машинном зрении и обработке изображений состоит в определении, содержат ли видеоданные некоторый характерный объект, особенность или активность. Эта задача может быть достоверно и легко решена человеком, но до сих пор не решена удовлетворительно в компьютерном зрении в общем случае: случайные объекты в случайных ситуациях.
Существующие способы решения данной задачи эффективны лишь для отдельных объектов, таких как простые геометрические объекты (к примеру, многогранники), печатные или рукописные символы, человеческие лица, автомобили и только в определённых условиях, обычно это определённое освещение, фон и положение объекта относительно камеры.
Существует несколько уровней распознавания:
· Объект (сцена) присутствует на изображении:
Рис. 1.2 - Классификация, категоризация изображений
· Известно местоположение объекта, объект выделен на изображении:
Рис. 1.3 - Обнаружение, выделение, локализация объекта
· Известны пиксели, принадлежащие объекту:
Рис. 1.4 - Объектная сегментация
1.4.2 Движение
Существуют задачи, связанные с оценкой движения, в которых последовательность изображений (видеоданные) обрабатывается для нахождения оценки скорости каждой точки изображения или 3D сцены. Примерами таких задач являются:
· определение трехмерного движения камеры;
· слежение, то есть следование за перемещениями объекта (например, машин или людей).
1.4.3 Восстановление изображений
Задача восстановления изображений - это удаление шума (шум датчика, размытость движущегося объекта и т. д.). Наиболее элементарным подходом к решению этой задачи являются различные типы фильтров, например, фильтры нижних или средних частот. Более сложные методы используют представления того, как должны выглядеть те или иные участки изображения, и на основе этого их изменение.
Более высокий уровень удаления шумов достигается в процессе первоначального анализа видеоданных на наличие различных структур, таких как линии или границы, а затем управления процессом фильтрации на основе этих данных.
1.5 Цветовые пространства
Цветовое пространство - модель представления цвета, основанная на использовании цветовых координат. Цветовое пространство строится таким образом, чтобы любой цвет был представлен точкой с определёнными координатами.
Чаще всего для хранения цифровых изображений используется цветовое пространство RGB. Впервые подобная модель была предложена Джеймсом Максвеллом в 1861 году, однако широкое распространение получила гораздо позже. В модели RGB (от англ. red - красный, green - зелёный, blue - голубой) все цвета получаются путём смешения трёх базовых (красного, зелёного и синего) цветов в различных пропорциях. Доля каждого базового цвета в итоговом может восприниматься, как координата в соответствующем трёхмерном пространстве, поэтому данную модель часто называют цветовым кубом. На рис. 1.5 представлена модель цветового куба.
Рис. 1.5 - Цветовой куб
Цветные изображения в модели RGB строятся из трёх отдельных изображений-каналов. На рис. 1.6 показано разложение исходного изображения на цветовые каналы.
Рис. 1.6 - Разложение на цветовые каналы
Однако, RGB не всегда хорошо подходит для анализа информации. Эксперименты показывают, что геометрическая близость цветов достаточно далека от того, как человек воспринимает близость тех или иных цветов друг к другу.
Но существуют и другие цветовые пространства. Весьма интересно в нашем контексте пространство HSV (Hue, Saturation, Value).
В нем присутствует:
· ось Value, определяющая количество света. Ей выделен отдельный канал, в отличие от RGB, где это значение нужно вычислять каждый раз. Фактически, это черно-белая версия изображения, с которой уже можно работать;
· ось Hue представляется в виде угла и отвечает за основной тон;
· ось Saturation (расстояние от центра к краю) определяет насыщенность цвета.
HSV гораздо ближе к человеческому восприятию цвета, чем RGB. Человек не сможет различить цвета, если показать ему в темноте красный и зеленый объекты. В HSV происходит то же самое. Чем ниже по оси V мы продвигаемся, тем меньше становится разница между оттенками, так как снижается диапазон значений насыщенности. На схеме это выглядит как конус, на вершине которого предельно черная точка, см. рисунок 1.7.
Рис. 1.7 - Коническое представление модели HSV
1.6 Сегментация изображений
1.6.1 Что такое сегментация изображений
Эта работа посвящена теме отделения объекта или его части от всего изображения. Причины для этого должны быть очевидны. Например, в камерах слежения для обеспечения безопасности в основном фиксируется одна и та же сцена, которая в действительности не вызывает интереса. Наибольший интерес представляет появление в кадре людей, транспортных средств или какого-то предмета, которые отсутствовали в сцене на протяжении длительного времени. Выделение этих событий позволяет отсекать моменты во времени, в которые ничего интересного не происходило.
Помимо выделения объекта на изображении, существует множество ситуаций, при которых возникает необходимость только в части объекта, например, при выделении лица или кисти руки человека. Помимо этого, может потребоваться предобработка изображения для преобразования его в осмысленный набор суперпикселей, которые сегментируют изображение на содержимое: конечности, волосы, лицо, туловище, листья деревьев, озеро, путь, газон и т.д. Использование суперпикселей экономит время при вычислениях; например, при запуске классификатора объектов изображения, потребуется найти только ограничительную рамку для каждого суперпикселя. Это позволяет отслеживать эти большие куски, а не каждую точку в отдельности.
Главная цель компьютерного зрения - это извлечение информации из изображений. Для облегчения обработки изображения, его следует разбить на сегменты.
Сегментацией изображения называют разделение цифрового изображения на множество областей или секторов, однородных по некоторому критерию. Такими критериями могут быть яркость, цвет или текстура. При решении задач обработки изображений и компьютерного зрения, сегментация играет важную роль.
Существует множество методов сегментации изображений, основанных на разных математических моделях. Казалось бы, использование различных методов должно приводить к одинаковому результату, однако поскольку сегментация зависит от большого количества различных факторов, ни один из алгоритмов не дает достаточно точной информации о границах и областях. Сегментация обычно используется как часть некой системы (например, системы машинного зрения), следовательно, качество работы алгоритма оценивается исходя из работы системы в целом, один и тот же алгоритм сегментации может оказаться хорошим для одной задачи и плохим для другой. Каждый из алгоритмов сегментации имеет определенную область применения, которая зависит от входных данных, от требований для распознавания, скорости принятия решений и от объемов вычислений. Для каждой конкретной задачи нужно подбирать алгоритм, отвечающий необходимым требованиям.
Сегментация активно используется в медицине, например, для обнаружения опухолей и других патологий, определение объёмов тканей, различных диагностик, планирование лечения; в распознавании отпечатков пальцев, при выделении объектов на спутниковых снимках, в системах управления дорожным движением, распознавание лиц, а также для обработки объектов видеопоследовательности. Это позволяет сконцентрировать внимание на существенных деталях и пренебрегать качеством малозначимых.
Следует отметить, что все алгоритмы сегментации можно разделить автоматические, т. е. не требующие взаимодействия с пользователем, и интерактивные, требующие участия пользователя. Автоматические алгоритмы сегментации изображений используются в автономных системах, например, на производстве в системах контроля деталей на наличие дефектов или в системе автопилота автомобиля. Интерактивная сегментация изображений активно используется для анализа медицинских данных, редактирования изображений, а также является составной частью многих алгоритмов компьютерного зрения.
1.6.2 Подзадачи сегментации
· Определение общности пикселей, нахождение сходства;
· Построение математической модели, отражающей необходимое нам понимание «общности»;
· Нахождение решения выбранной математической модели.
1.6.3 Классификация алгоритмов сегментации
· Пороговые алгоритмы
· Алгоритмы наращивания областей
· Алгоритмы на основе кластеризации
· Граничные алгоритмы
1.6.4 Пороговые алгоритмы
Если необходимо распознавать изображение, области которого значительно различаются по яркости, то рекомендуется использовать пороговые алгоритмы, например, для сегментации алгоритмом порогового распределения необходимо получить бинарное изображение из полутонового [1]. Для этого устанавливается некоторое пороговое ограничение. После квантования функция изображения отображает элементы изображения с уровнем яркости больше порогового в значение 1, меньшее порогового 0. В таких случаях оптимальное значение порога определяется достаточно легко на основе анализа гистограмм. Дальнейшее его естественное развитие - сегментация с адаптивным порогом.
Данные алгоритмы позволяют сегментировать простые изображения, но, как правило, не дают хорошего результата на изображениях с наличием неровного освещения, вспышек, теней и различных помех, что, к сожалению, часто встречается в реальных ситуациях.
1.6.5 Алгоритмы наращивания областей
Если на изображении имеет место устойчивая связность внутри отдельных сегментов, то рекомендуется использовать алгоритмы наращивания областей - происходит группировка соседних элементов с одинаковыми или близкими уровнями яркости, которые после объединяются в однородные области. Наиболее распространенные алгоритмы нахождения областей включают в себя такие алгоритмы, как слияние- расщепление областей, алгоритм водоразделов и алгоритм центроидного связывания [2].
При центроидном связывании на основании информации об объекте выбираются стартовые точки, которым присваиваются различные метки. Точки с одинаковыми метками образуют отдельные множества. Такой алгоритм наиболее пригоден для сегментации простых изображений. Для более сложных изображений выбор точек проводится по итерациям, на каждой из которых рассматривается набор точек на предмет принадлежности их соседей данному множеству. Точки, включенные в множество на предыдущих итерациях, не рассматриваются. Так проводится анализ всех множеств по очереди. Точки, добавленные к множеству на данной итерации, называются фронтом, а объединение фронтов - волной, поэтому такие алгоритмы получили название - волновые.
Алгоритм слияния-расщепления разделяет точки изображения путем разбиения некоторым образом изображения на квадраты, которые затем анализируются для их проверки на однородность (чаще всего это однородность по яркости). Если квадрат удовлетворяет условиям однородности, он заменяется четырьмя «подквадратами», а подходящие по условию однородности 4 квадрата могут быть объединены в одну область.
К недостаткам алгоритмов нахождения областей в первую очередь относят то, что они выделяют общие фрагменты, зачастую не показывая информации об изменении яркости внутри области и возможных внутренних границах. Однако эти алгоритмы зарекомендовали себя более эффективными при работе с зашумленными изображениями.
1.6.6 Алгоритмы на основе кластеризации
Отдельной ветвью выделяются алгоритмы сегментации, основанные на кластеризации [3]. Их преимущество - они автоматические и могут быть использованы для любого количества признаков и классов. Существующие алгоритмы кластеризации, такие как К-средних, медоидный, CURE, ROCK, DBSCAN, созданы для нахождения кластеров, соответствующих какой-либо статической модели. Эти алгоритмы могут дать сбой, если параметры модели были выбраны некорректно, по отношению к классифицируемым данным, или если модель не охватывает в должной мере характеристики кластеров. Также многие алгоритмы допускают погрешности, если данные состоят из кластеров разной формы, плотности и размеров. Предложен алгоритм, измеряющий сходство двух кластеров с помощью динамической модели. В процессе кластеризации слияние двух кластеров происходит только, если внутренняя связность и схожесть двух кластеров тесно связана с внешней связностью кластеров между собой и близостью элементов внутри кластера.
1.6.7 Граничные алгоритмы
Другой способ сегментации заключается в нахождении точек, лежащих на границах областей [4]. Характеристика яркости - основная для определения границ, хотя часто используются такие характеристики, как текстура и, конечно же, градиент. Границей называют сильные локальные изменения яркости на изображении. Фактически они разделяют области. Часто граница определяется как скачок значения первой производной яркости изображения.
Алгоритмы выделения границ состоят из фильтрации, усиления, выделения и локализации. Разработано много способов выделения границ, например, операторы Превитта, Робертса, Канни, Собела.
В общем, существующие алгоритмы делятся на алгоритмы сравнения с эталоном и дифференциально-градиентные алгоритмы [5]. Оба подхода определяют, когда колебание градиента яркости становится достаточно большим, чтобы утверждать, что здесь находится граница объекта. Принципиальная разница алгоритмов заключается в способе локальной оценки градиентного значения и определении локальной направленности границ, что немаловажно в некоторых схемах распознавания объектов.
В целом, выделение границ дает весьма неплохие результаты для интерпретации изображения. Карты границ могут быть построены в различных масштабах, что позволяет получать коррелированные результаты. Также алгоритмы выделения границ требуют меньше ресурсов для вычислений, и результирующая информация занимает гораздо меньше места для хранения. Алгоритм выделения границ рекомендуется использовать тогда, когда границы довольно четкие и стабильные.
К недостаткам можно отнести то, что многие схемы имеют большую вычислительную сложность, что не оправдано для многих приложений и не позволяет использовать алгоритмы в системах реального времени.
сегментация изображение зрение opencv
2. Библиотека OpenCV
2.1 Что такое OpenCV
OpenCV - библиотека компьютерного зрения с открытым исходным кодом. Библиотека написана на C и C++ и работает на компьютерах под управлением Linux, Windows, Mac OS X. Так же активно развиваются интерфейсы библиотеки для Python, Ruby, Matlab и других языков программирования.
Библиотека OpenCV была разработана с целью повышения вычислительной эффективности и с уклоном на приложения реального времени. OpenCV написана с использованием оптимизированного C и может использовать многоядерные процессоры. В дальнейшем, если потребуется автоматическая оптимизация на аппаратных платформах Intel, существует возможность покупки библиотеки IPP (Integrated Perfomance Primitives), которая состоит из процедур с низкоуровневой оптимизацией для различных алгоритмических областей. OpenCV будет автоматически использовать библиотеку IPP во время выполнения программы.
Одной из основных целей OpenCV является предоставление простого в использовании интерфейса, который позволит людям довольно таки быстро строить сложные приложения, использующие компьютерное зрения. Библиотека OpenCV содержит более тысячи функций, которые охватывают многие области компьютерного зрения, такие как: инспекция фабричной продукции, медицина, безопасность, пользовательский интерфейс, калибровка камеры, стереозрение и робототехника. И все это благодаря тому, что компьютерное зрение и машинное обучение часто идут "рука об руку", к тому же OpenCV полностью включает в себя библиотеку общего назначения MLL (Machine Learning Library). MLL библиотека ориентирована на распознавание статических образов и кластеризацию. MLL очень полезна для задач компьютерного зрения, которые составляют основу OpenCV.
2.2 История появления OpenCV
OpenCV появился по инициативе Intel Research для продвижения ресурсоемких приложений. С этой целью, Intel запустил ряд проектов, в числе которых были: трассировка лучей в реальном времени и 3D отображение. Один из авторов, работник Intel, будучи гостем университета, заметил, что некоторые ведущие университеты, такие как MIT Media Lab, имели на тот момент хорошо развитую и внутренне открытую инфраструктуру по развитию компьютерного зрения и код, который "кочевал" от студента к студенту, тем самым давая каждому последующему студенту бесценный опыт для развития их собственных проектов компьютерного зрения. Так, новому студенту не нужно было изобретать основные функции самому, а использовать те, что были написаны до него. Таким образом, задумка OpenCV -- это способ сделать компьютерное зрение общедоступным.
При содействии Intel Performance Library Team, задача реализации кода ядра и алгоритмических спецификаций OpenCV была направлена команде Intel из России. Все начиналось в исследовательской лаборатории корпорации Intel при использовании ПО Performance Libraries наряду с опытом из России.
Главным в российской команде был Вадим Писаревский, которому удалось написать и оптимизировать большую часть OpenCV и который до сих пор прикладывает немало усилий для развития OpenCV. Вместе с ним в разработке ранней инфраструктуры участвовал Виктор Ерухимов, а также управляющий российской лабораторией Валерий Курякин.
С 2000 по 2008 год OpenCV разрабатывалась и поддерживалась в основном Intel, и Нижегородское отделение корпорации с самого начала играло ведущую роль в формировании облика библиотеки. В первые годы существования OpenCV стремительно расширялась вширь, обрастая базовой функциональностью, такой как основные структуры данных, алгоритмы обработки изображений (image processing), базовые алгоритмы компьютерного зрения, ввод и вывод изображений и видео. Уже в это время были реализованы алгоритмы детекции человеческих лиц (каскадный классификатор), поиска стереосоответствия, оптического потока и другие. Однако, в 2004 году Intel практически прекратил поддержку библиотеки. Многие участники проекта, которые к тому времени уже сложились как эксперты в области компьютерного зрения, не захотели переквалифицироваться, и покинули компанию.
В любом проекте с открытым кодом важно достичь критической массы, при которой проект станет самоподдерживаемым. На данный момент библиотека OpenCV скачана более четырнадцати миллионов раз, и это число растет. Пользователи все больше и больше вносят свой вклад в развитие OpenCV, и центр развития в значительной степени вышел за пределы Intel. Путь развития OpenCV показан на рисунке 2.1.
Рис. 2.1 - Путь развития OpenCV
За это время OpenCV пострадала от бума и спада доткомов (компании, чья бизнес модель целиком основывается на работе в рамках сети Интернет), а также от многочисленных изменений в руководстве. Во время этих колебаний, были времена, когда работники Intel не принимали участия в развитии библиотеки вообще. Тем не менее, с появлением многоядерных процессоров и множества новых приложений компьютерного зрения, значение OpenCV стало расти. Сегодня OpenCV активно развивается в ряде институтов, так что в скором времени ожидается множество новых обновлений, связанных с: калибровкой сразу нескольких камер, восприятием глубины сцены, методами смешивания зрения с датчиками глубины, лучшим распознаванием образов и еще большей поддержкой для роботов.
2.3 Структура и содержимое OpenCV
OpenCV структурирована по четырем основным компонентам. Компонент CV содержит основные алгоритмы обработки изображений и высокоуровневые алгоритмы компьютерного зрения (см. рис. 2.2); ML - библиотеку машинного обучения, которая включает в себя средства статистической классификации и кластеризации. Модуль HighGUI (High-level Graphical User Interface) предоставляет функции, которые позволяют взаимодействовать с операционной системой, файловой системой и аппаратными средствами ЭВМ такими, как камеры. HighGUI позволяет открывать окна, показывать изображения, читать и записывать графические файлы и видео, просто обращаться с мышью и клавиатурой.
Рис. 2.2 - Основные модули OpenCV
2.4 Примитивные типы данных в OpenCV
OpenCV включает в себя множество примитивных типов данных. Эти данные не являются примитивными с точки зрения C, но являются самыми элементарными с точки зрения OpenCV.
Самый простейший тип - CvPoint. Это простая структура состоит только из двух полей x и y типа int.
CvPoint2D32f содержит два поля: x и y типа float.
CvPoint3D32f содержит три поля: x, y и z типа float.
CvSize содержит два поля: width и height типа int.
CvSize2D32f содержит два поля: width и height типа float.
CvRect содержит четыре поля: x, y, width и height типа int.
CvScalar содержит четыре переменные типа double. На самом деле CvScalar включает в себя одно поле val, которое является указателем на массив, содержащий четыре числа типа double.
Конструкторы для типов данных cvPointXXX(), cvSize(), cvRect(), cvScalar() - чрезвычайно полезны, потому что упрощают код. Например, чтобы нарисовать белый прямоугольник с координатами углов (5, 10) и (20, 30), достаточно написать простой код (см. листинг 2.1).
Листинг 2.1 - Пример структуры прямоугольника.
cvRectangle(
myImg // Изображение,
cvPoint(5,10) // Верхний левый угол,
cvPoint(20,30) // Нижний правый угол,
cvScalar(255,255,255) // Цвет
);
cvScalar в отличии от всех остальных структур содержит три конструктора. Первый может принимать один, два, три или четыре аргумента и присваивать их соответствующим элементам val[]. Второй конструктор cvRealScalar() принимает один аргумент и устанавливает соответствующее значение val[0], остальные элементы устанавливаются в 0. Третий конструктор cvScalarAll() так же принимает один аргумент и инициализирует все элементы val[] этим значением.
2.5 Типы изображений, представленные матрицами
На рисунке 2.3 представлена иерархия классов или структур трёх типов изображений. При использовании OpenCV, неоднократно будет использоваться тип IplImage. IplImage это базовая структура, используемая для кодирования того, что мы называем "изображение". Эти изображения могут быть чёрно-белыми, цветными, 4-х канальными (RGB+Alpha), и каждый канал может содержать либо целые, либо вещественные значения. Следовательно, этот тип является более общим, чем вездесущие 3-х канальные 8-битные изображения, которые сразу приходят на ум.
OpenCV располагает обширным арсеналом операторов для работы с этими изображениями, которые позволяют изменять размеры изображений, извлекать отдельные каналы, складывать два изображения, и т.д. В этой главе такие операторы будут рассмотрены более тщательно.
Рис. 2.3 - Иерархия классов трёх типов изображений
Несмотря на то, что OpenCV написана на C, структуры, используемые в OpenCV, объектно-ориентированные; в действительности, IplImage происходит от CvMat, которая является производной от CvArr.
Прежде, чем перейти к деталям, необходимо взглянуть на другой тип данных: CvMat, структура для матриц. Хотя OpenCV полностью написана на C, относительная взаимосвязь между CvMat и IplImage похожа на наследование в C++. IplImage можно рассматривать как производную от CvMat. Класс CvArr можно рассматривать как абстрактный базовый класс. В прототипах функций зачастую будет указано CvArr (точнее указатель CvArr). В таких случаях вместо CvArr можно использовать и указатель CvMat и указатель IplImage.
2.6 Структура CvMat
Понятие матрицы в OpenCV несколько абстрактно, нежели в линейной алгебре. В частности, элементы матрицы не обязательно должны быть просто числами. К примеру, создание новой двумерной матрицы имеет следующий прототип (см. листинг 2.2).
Листинг 2.2 - Прототип CvMat.
cvMat* cvCreateMat(int rows, int cols, int type);
Здесь type может быть любым из длинного списка предопределенных типов; тип задаётся так: CV_ <глубина в битах> (S|U|F) C <число каналов>. Например, матрица может состоять из 32-битных чисел с плавающей точкой (CV_32FC1), 8-битных без знаковых триплетов (CV_8UC3) и из множества других. Элементами CvMat могут быть не только числа. Возможность представить один элемент составным значением позволяет делать такие вещи, как представление нескольких цветовых каналов в изображении RGB. С простыми изображениями, содержащими красную, зелёную и синюю составляющую, большинство операторов будут работать с каждым каналом по отдельности (если не указано обратное).
Внутренняя структура CvMat довольно-таки проста (см. листинг 2.3). Матрицы имеют ширину, высоту, тип, шаг (длина строки в байтах, а не в int или float) и указатель на массив данных. Получить доступ к элементам матрицы можно непосредственно через указатель на CvMat или через специальные функции. Например, для получения размера матрицы можно либо вызвать функцию cvGetSize(CvMat*), либо непосредственно обратиться к соответствующим полям через указатель как matrix -> height и matrix -> width.
Листинг 2.3 - Структура CvMat.
typedef struct CvMat{
int type; // Тип элементов
int step; // Шаг
int* refcount;//Только для внутреннего использования
union {
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data; // Данные матрицы
union {
int rows; //Кол-во строк
int height;//Высота
};
union {
int cols; //Кол-во столбцов
int width; //Ширина
};
}CvMat;
Матрицы могут быть созданы несколькими способами. Наиболее распространенным является подход с использованием cvCreateMat(), которая по существу использует более элементарные функции cvCreateMatHeader() и cvCreateData(). cvCreateMatHeader() создает структуру CvMat, без выделения памяти под данные, в то время, как cvCreateData() выделяет память под данные.
2.7 Структура IplImage
В сущности, это объект CvMat, но с некоторыми дополнениями для интерпретации матрицы как изображения. Изначально структура была частью библиотеки IPL (Intel's Image Processing). Подробное описание структуры в листинге 2.4.
Листинг 2.4 - Структура Iplimage.
typedef struct _IplImage{
int nSize; // sizeof(IplImage)
int ID; // Версия (=0)
int nChannels;// Число каналов
int alphaChannel; // Не используется в OpenCV
int depth; // Глубина в битах
char colorModel[4]; // Не используется в OpenCV
char channelSeq[4]; // Не используется в OpenCV
int dataOrder; // Расположение каналов.
// 0 - чередование цветных каналов
// 1 - раздельное расположение цветных каналов
int origin; // Начало координат
// 0 - верхний левый угол
// 1 - нижний левый угол
int align; // Выравнивание строк изображения (4 или 8)
int width; // Ширина в пикселях
int height; // Высота в пикселях
struct _IplROI* roi; // ROI. Если NULL, то выделяется все //изображение
struct _IplImage* maskROI; // может быть NULL
void* imageId; // может быть NULL
struct _IplTileInfo* tileInfo; // может быть NULL
int imageSize; // Память в байтах
char* imageData; // Указатель на данные изображения
int widthStep; // Число байт в одной строке
int BorderMode[4]; // Не используется в OpenCV
int BorderConst[4]; // Не используется в OpenCV
char* imageDataOrigin; // Используется для правильного
//освобождения памяти
} IplImage;
После вездесущих переменных ширины и высоты, наиболее важными являются переменные глубины и количества каналов.
Следующие немаловажные поля структуры origin и dataOrder. Переменная origin может принимать одно из двух значений: IPL_ORIGIN_TL или IPL_ORIGIN_BL, что соответствует верхнему левому или нижнему левому углу изображения, соответственно. Отсутствие стандартного подхода (верхний против нижнего) является важным источником ошибок в процедурах компьютерного зрения. В частности, в зависимости от того, откуда пришло изображение, какие операционная система, кодек, формат хранения и т.д. - все это влияет на расположение начала координат конкретного изображения. Например, можно подумать, что выборка из пикселей находится на лицевой стороне в верхнем квадранте изображения, в действительности же на изнаночной стороне в нижней четверти. Лучше всего проверять этот момент перед выводом изображения на экран.
Параметр imageData содержит указатель на первую строку данных изображения. Если изображение содержит несколько плоскостей (когда dataOrder = IPL_DATA_ORDER_PLANE), то они размещаются последовательно, в виде отдельных изображений с height*nChannels строками, но, как правило, они чередуются таким образом, что количество строк равно высоте, а каждая строка содержит чередующиеся каналы. OpenCV поддерживает только IPL_DATA_ORDER_PIXEL, в то время как IPL/IPP поддерживает IPL_DATA_ORDER_PIXEL и IPL_DATA_ORDER_PLANE.
Параметр widthStep содержит количество байт между пикселями одного столбца (количество байт в одной строке). Переменной ширины недостаточно для того, чтобы рассчитать это расстояние, потому что каждая строка может быть выравнена с определенным числом байт для достижения более быстрой обработки изображения; соответственно, могут существовать зазоры между окончанием i-ой строки и началом (i+1)-ой строки.
ПараметрdataOrderможетприниматьзначения
IPL_DATA_ORDER_PIXEL или IPL_DATA_ORDER_PLANE. Эти значения указывают каким образом должны быть упакованы данные по каналам, пиксель за пикселем (чередуются или стандартно).
2.8 Набор графических инструментов HighGUI
Функции OpenCV, которые позволяют взаимодействовать с операционной системой, файловой системой и аппаратными средствами, такими, как камера, собраны в библиотеке HighGUI (что означает "высокоуровневый графический пользовательский интерфейс"). HighGUI позволяет открывать окна для отображения изображений, читать и записывать графические файлы (изображения и видео), обрабатывать простые события мыши, указателя и клавиатуры. Данная библиотека также позволяет создавать такие полезные элементы, как ползунок. HighGUI имеет достаточный функционал для разработки различного рода приложений. При этом наибольшая польза от использования данной библиотеки в её кроссплатформенности.
Библиотека HighGUI состоит из трех частей:
· аппаратной;
· файловой;
· GUI.
Аппаратная часть в первую очередь касается работы с камерой. В большинстве ОС обработка камеры довольно-таки утомительна. HighGUI предоставляет простые механизмы подключения и последующего получения изображения с камеры.
Все, что касается файловой системы, в первую очередь связано с загрузкой сохранением изображения. Важной особенностью библиотеки является наличие методов, которые одинаково обрабатывают видеопоток из файла и с камеры. Та же идея заложена и в методы обработки изображений. Функции просто полагаются на расширения файлов и автоматически обрабатывают все операции по кодированию и декодированию изображений.
Третья часть HighGUI - GUI. Библиотека предоставляет несколько простых функций, которые позволяют открывать окно и отображать в нем изображения. Тут же (в окне) существует возможность обрабатывать события, поступившие от мыши и клавиатуры. В таблице 2.1 представлены основные функции.
Таблица 2.1 Основные функции в HighGUI
Функция |
Назначение |
|
cvNamedWindow |
Создание окна. |
|
cvDestroyWindow |
Уничтожение окна. |
|
cvDestroyAllWindows |
Уничтожение всех окон |
|
cvResizeWindow |
Изменить размеры окна. |
|
cvMoveWindow |
Изменить позицию окна. |
|
cvGetWindowHandle |
Получить указатель на окно. |
|
cvGetWindowName |
Получить имя окна по указателю. |
|
cvShowImage |
Отобразить картинку в окно. |
|
cvCreateTrackbar |
Создать ползунок и добавить его к окну. |
|
cvGetTrackbarPos |
Узнать позицию ползунка. |
|
cvSetTrackbarPos |
Установить позицию ползунка. |
|
cvSetMouseCallback |
Установить функцию обработки события от мыши. |
|
cvWaitKey |
Ожидание нажатия клавиши на клавиатуре. |
2.9 Работа с видео
В мире компьютеров, компьютерное зрение может означать множество связных с ним вещей. В некоторых случаях анализируются кадры, полученные из заранее неизвестного источника. В других, анализируется видео с диска. И наконец, возникает потребность в анализе видео потока в реальном времени, получаемого с камеры.
В OpenCV есть несколько функций для работы с видео, наиболее используемыми из которых являются функция чтения и записи видео.
Функция cvCreateCameraCapture() принимает идентификатор, указывающий к какой камере необходимо получить доступ. Если камера одна, то идентификатор можно установить в 0. index - это сумма из порядкового номера и "домена". "Домен" указывает на тип камеры.
CvCapture - структура, содержащая необходимую информацию для чтения кадров из камеры или из видеопотока. В зависимости от источника, необходимо использовать одну из перечисленных в листинге 2.5 функций.
Листинг 2.5 - Прототипы чтения видеопотока.
CvCapture* cvCreateFileCapture(const char* filename);
CvCapture* cvCreateCameraCapture(int index);
cvCreateFileCapture() принимает всего один аргумент - имя AVI-или MPG-файла. После вызова этой функции OpenCV открывает и подготавливает файл для чтения. Если открытие файла произошло успешно, то функция вернет указатель на структуру CvCapture. Если по какой-то причине, файл не существует или не найден соответствующий кодек, функция вернет NULL. Также необходимо достаточно знать, в каком случае какой кодек уместно применять и установлен ли он на компьютере. Например, необходимо прочитать файл, закодированный с помощью DIVX или сжат с помощью MPG4 на компьютере с ОС Windows. Для корректной обработки должна быть установлена соответствующая библиотека, которая предоставит все необходимые ресурсы для декодирования видео. Крайне необходимо проверять возвращаемое значение на NULL, т.к. все компьютеры имеют разный набор ПО (например, может отсутствовать библиотека для декодирования видео).
...Подобные документы
OpenCV – библиотека компьютерного зрения с открытым исходным кодом, предоставляющая набор типов данных, функций и численных алгоритмов для обработки изображений. Ее реализация на C/C++. Цели использования технологии. Основные модули библиотек 1-3.
презентация [121,8 K], добавлен 14.12.2013Метод главных компонент. Процесс распознавания. Ковариационная матрица, диагональная матрица собственных чисел. Использовании метрики Махаланобиса и Гауссовского распределения для оценки близости изображений. Входные вектора. Библиотека OpenCV.
статья [22,1 K], добавлен 29.09.2008Анализ основных аспектов технологии компьютерного зрения, необходимых для выполнения работы. Изучение характеристик библиотеки OpenCV, оценка актуальности работы по распознаванию жестов рук. Поэтапный отчет о работе над программным обеспечением.
курсовая работа [669,9 K], добавлен 20.05.2017Компьютерная графика и обработка изображений электронно-вычислительными машинами являются наиболее важным аспектом использования ЭВМ во всех сферах человеческой деятельности. Разработка "подсистемы линейной сегментации", описание алгоритма и логики.
дипломная работа [1,1 M], добавлен 23.06.2008Выбор методов обработки и сегментации изображений. Математические основы примененных фильтров. Гистограмма яркости изображения. Программная реализация комплексного метода обработки изображений. Тестирование разработанного программного обеспечения.
курсовая работа [1,3 M], добавлен 18.01.2017Анализ существующих проблем и обзор библиотеки обработки изображений и алгоритмов общего назначения OpenCV. Особенности разработки и детальный анализ требований к программе. Основная логика ее работы и реализация. Трекинг лица и объекта по цвету.
дипломная работа [1,3 M], добавлен 26.06.2017Современные системы текстурного анализа изображений. Примеры текстурной сегментации одноканальных изображений. Использование признаков, полученных на основе гистограммы яркостей второго порядка, для классификации спектрозональных аэрофотоснимков.
реферат [573,5 K], добавлен 15.01.2017Изучение и программная реализация в среде Matlab методов обработки, анализа, фильтрации, сегментации и улучшения качества рентгеновских медицинских изображений. Цифровые рентгенографические системы. Разработка статически обоснованных алгоритмов.
курсовая работа [4,7 M], добавлен 20.01.2016Анализ существующих алгоритмов фильтрации и сегментации изображений. Разработка алгоритмов обработки видеопотока на основе выделенных быстрых методов. Реализация принимающей части цепочки сервер-клиент, получающую видеопоток с мобильного устройства.
дипломная работа [337,5 K], добавлен 24.01.2016Обработка изображений на современных вычислительных устройствах. Устройство и представление различных форматов изображений. Исследование алгоритмов обработки изображений на базе различных архитектур. Сжатие изображений на основе сверточных нейросетей.
дипломная работа [6,1 M], добавлен 03.06.2022Сравнительная оценка существующих программ, повышающих разрешение изображений на языке Borland Delphi. Выбор оптимального инструментария для разработки логической схемы. Форма поиска файлов, преобразования изображений и реализации алгоритмов интерполяции.
дипломная работа [3,0 M], добавлен 29.11.2011Исследование вертикальных проекций яркости и размаха яркости. Программная реализация алгоритма автоматического анализа цифровых изображений номерных знаков с целью сегментации цифробуквенных символов. Разработка графического пользовательского интерфейса.
дипломная работа [1,5 M], добавлен 12.04.2013Применение различных методов компрессии изображений и анимации. Определение наиболее подходящего формата сжатия. Выбор кодеков при помощи программы RIOT. Применение дополнительных способов оптимизации с использование программ OptiPNG, PNGOUT и TweakPNG.
лабораторная работа [1,5 M], добавлен 31.05.2013Положения алгоритмов сжатия изображений. Классы приложений и изображений, критерии сравнения алгоритмов. Проблемы алгоритмов архивации с потерями. Конвейер операций, используемый в алгоритме JPEG. Характеристика фрактального и рекурсивного алгоритмов.
реферат [242,9 K], добавлен 24.04.2015Обнаружение деталей и их границ изображения. Применение ранговых алгоритмов. Использование алгоритмов адаптивного квантования мод в режиме пофрагментной обработки. Обобщенная линейная фильтрация изображений. Восстановление отсутствующих участков.
курсовая работа [1,8 M], добавлен 17.06.2013Основные понятия о представлении изображения. Определение величины порога с помощью гистограммы яркостей. Глобальная, локальная, адаптивная пороговая обработка. Метод дискриминантного критерия. Исследования на искусственных и предметных изображениях.
дипломная работа [5,1 M], добавлен 23.12.2012Анализ проблем, возникающих при совмещении изображений в корреляционно-экстремальных навигационных системах. Использование двумерного дискретного преобразования Фурье. Нахождение корреляционной функции радиолокационного и моделируемого изображений.
дипломная работа [3,6 M], добавлен 07.07.2012Основы программирования на языке VB.NET. Область применения трехмерных изображений. Форматы хранения пакетов инженерной графики. Преимущества трехмерного моделирования. Разработка программы по вращению трехмерных изображений на языках VB.NET и VRML.
курсовая работа [195,1 K], добавлен 11.03.2013Необходимость применения систем электронного документооборота. Выводы по ценам, функциональным возможностям, сегментации рынка. Схема обработки информации автоматизированной системой. Нормативно-справочная информация для системы, структура алгоритмов.
дипломная работа [2,9 M], добавлен 24.06.2009Задачи цифровой обработки изображений. Методы пороговой сегментации. Создание программы представления рисунка в виде матрицы и применения к нему пороговой обработки. Разработка интерфейса программы загрузки и фильтрации изображения с выбранным порогом.
курсовая работа [2,0 M], добавлен 12.11.2012