Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Система RGB.






Цветное изображение состоит из трех цветов: синего, зеленого и красного. Это, так называемая система RGB (от английского Red, Green, Blue). Она принята во всем мире и все устройства – компьютеры, телефоны, мониторы и т.д. ее поддерживают. Белый цвет, как известно, состоит из всех трех цветов, однако стоит нам уменьшить уровень одного из них, как получим совершенно другой результирующий цвет. Уровни принято изменять в пределах от 0 до 1.

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

Рис. 4.1 – принцип работы RGB системы.

 

На рисунке 4.1 выделенный фрагмент изображения содержит пиксель (его значения в матрицах помечены черным), имеющий результирующий цвет состоящий из 0, 5176 красного, 0, 1608 зеленого и 0, 0627 синего.

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

 

Черно – белые изображения представлены в виде матрицы, каждый элемент которой описывает величину яркости. Величины изменяются от 0 до 255, 0 – это полностью черный пиксель, 255 – полностью белый пиксель.

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

Например, если фон приблизительно одинаков по уровню и колеблется где-то от 16 до 30, то объект на изображении более яркий и уровни света колеблются в районе 150. Соответственно, функция распознает край объекта как линию. Результатом работы функции будет двоичное изображение. Двоичное изображение – это изображение, пиксели которого принимают только два значения: 0 – (черный цвет) и 1 – (белый цвет). На нашем двоичном изображении после работы функции edge будет видна белая линия границы всех контрастных объектов (рис. 4.2).

 

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

 

Рис.4.2 – линии найденные на изображении.

 

Следующая задача, которая возникает: последовательный вывод координат линий. Т.е. нужно, чтобы карандаш прорисовывал линию не отрываясь, от начала до конца. Единственно верное решение в таком случае – последовательное следование по пикселям линии до ее конца. Для этого в программе введена еще одна двоичная матрица, такого же размера как и наше двоичное изображение с линиями, только заполнена она нулями полностью. Называется она mask – это видно в коде программы.

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

Функция DrawLine начинает просмотр всех 8 рядом находящихся пикселей начала линии. Начинается осмотр справа по часовой стрелке. Если функция натыкается на соседний пиксель линии, то она передает свои текущие координаты в командное окно и перескакивает на новый пиксель, далее процесс повторяется, таким образом мы последовательно выводим в командное окно координаты линии. При этом также заполняется матрица mask, и точно так же все перемещения сверяются по ней и программа не передаст одни и те же координаты дважды. Как только функция доходит до конца линии (нет больше рядом находящихся пикселей), то процесс выполнения программы возвращается к построчному просмотру изображения и поиску следующей линии. При этом все пиксели в которых побывали обе эти функции помечены в матрице mask. Т.е. те линии координаты которых уже выведены не принимаются в дальнейший поиск.

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

Принцип таков: градируем все изображение в строго определенные уровни. Так как каждый пиксель черно-белого изображения может принимать значение от 0 до 255, мы берем эту разницу и делим на пример на 10 промежутков. От 0 до 25, от 26 до 50 и т.д. В коде программы это переменная NOGrades, которая определяет количество таких интервалов. Далее просматриваем каждый пиксель черно-белого изображения и смотрим в какой интервал он попадает. После того как определили интервал, приравниваем его (пиксель) значение к середине интервала. Таким образом, пиксели в нашем изображении принимают строго определенные значения.

 

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

Рис.4.3 – линии областей штриховки

 

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

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.