Управление контрастностью (Гамма-коррекция) — КиберПедия 

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Управление контрастностью (Гамма-коррекция)

2017-11-17 740
Управление контрастностью (Гамма-коррекция) 0.00 из 5.00 0 оценок
Заказать работу

Функция RGBd=imadjust (RGBs, [ low_in, high_in ], [ low_out, high_out ], gamma)создает полноцветное изображение RGBd путем контрастирования исходного полноцветного изображения RGBs. При этом исходное изображение RGBs отображается в RGBd и интервал яркость [low_in, high_in] переходит в [low_out, high_out]. Преобразование осуществляется отдельно для каждой из цветовых составляющих. Диапазоны преобразования интенсивностей составляющих [low_in, high_in] и [low_out, high_out], а также показатель gamma задаются одинаковыми для всех составляющих. В случае необходимости различных диапазонов преобразования данная функция позволяет это делать.

Параметр gamma определяет форму кривой характеристики передачи уровней яркости. Если gamma < 1, то то характеристика передачи уровней будет вогнутой и результирующее изображение будет темнее, чем исходное. По умолчанию параметр gamma=1, что соответствует линейной характеристике передачи уровней и отсутствию гамма-коррекции.

Рис.6. Параметр gamma

Команда может быть применена в одном из следующих вариантов: Id = imadjust(Is, [low high], [bottom top], gamma),

newmap = imadjust(map, [low high], [bottom top], gamma),

RGBd = imadjust (RGBs, [low high], [bottom top], gamma),

RGBD = imadjust(RGBS, [lR, hR; lG hG; lB hB],

[bR, tR; bG tG; bB tB], [gR, gG, GB]

Пример 7.6. Произвести контрастирование изображения

>> D_imadjust=imadjust(RGB, [0.2 0.8], [ ], 0.5);

% контрастирование исходного изображения

>> subplot(1,2,1), imshow(RGB);

% вывод исходного и обработанного

>> subplot(1,2,2), imshow(D_imadjust);

% изображения в одно окно

 

 

 

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

 

Фильтрация изображений

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

 

Принципы фильтрации

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

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

 

Рис.1. Маска пикселя i, j

 

Наиболее распространена маска 3х3, рис.1. В общем случае маска может быть матрицей размера m*n. Центральным элементом маски является элемент, расположенный посредине маски.

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

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

 

Функции фильтрации

Функция B=imfilter(A, H) обрабатывает многомерный массив A многомерным фильтром H. Результирующий массив B имеет ту же размерность и формат представления данных, что и массив A.

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

Прежде чем выполнять фильтрацию, выбирается фильтр и присваивается переменной h. Функция h=fspecial(type, P1, P2) возвращает маску h предопределенного двумерного линейного фильтра, задаваемого строкой type. Маска h предназначена для передачи в функции imfilter, filter2 или conv2, выполняющих двумерную линейную фильтрацию. В зависимости от типа фильтра для него могут быть определены один или два дополнительных параметра Р1, Р2. Возможные значения параметра type:

'gaussian' - Фильтр нижних частот Гаусса.'sobel' - Фильтр Собеля для выделения горизонтальных границ.'prewitt' - Фильтр Превитта для выделения горизонтальных границ.'laplacian' - ВЧ фильтр Лапласа.'log' - Фильтр Лапласа-Гаусса, аналогичный последовательному применению фильтров Гаусса и Лапласа.'average' - Усредняющий НЧ фильтр.'unsharp' - Фильтр повышения резкости изображения.

 

 

Функция B=imfilter(A, H, option1, option2,...) выполняет многомерную фильтрацию массива A фильтром H, который определяется командойfspecial, в соответствии с заданными опциями, которые могут принимать следующие значения:

Граничные опции.

Х - значения элементов внешних границ исходного массива принимают значения массива Х. Когда граничные опции не определены, функция imfilter использует значение X=0;

'symmetric ' - значения элементов внешних границ исходного массива вычисляются как зеркальное отражение края этого массива;

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

'circular' - значения элементов внешних границ исходного массива вычисляются как периодическая структура исходного массива.

Опции результирующих размеров.

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

'full' - Результирующий массив содержит полный результат фильтрации. Его размеры больше, чем у исходного массива.

Опции корреляции и конволюции.

'corr' - Функция imfilter выполняет многомерную фильтрацию с использованием корреляции. Эта операция аналогична фильтрации, которая выполняется функцией filter2. Когда определены опции корреляции или конволюции, тогда функция imfilter использует корреляцию.

'conv' - Функция imfilter выполняет многомерную фильтрацию с использованием конволюции.

N-D конволюция относительно N-D корреляции является отражением матрицы фильтрации.

 

Рис.2 Исходное изображение   Рис.3 Изображение, обработанное фильтром Гаусса
8.3. Фильтр Гаусса. Функция h=fspecial(‘gausian’, n, sigma) возвращает маску h фильтра нижних частот Гаусса. Размер маски определяет параметр n. Если n - двухкомпонентный вектор, то размер маски n(1) n(2). Если n скаляр, то размер маски n n. Параметр sigma задает среднеквадратическое отклонение распределения Гаусса, которое используется при формировании маски h. Если при вызове функции параметры n и sigma опущены, то размер маски устанавливается равным 3 3, а среднеквадратическое отклонение 0.5.Фильтр Гаусса является фильтром нижних частот. Маска фильтра такова, что центральный элемент маски имеет наибольшее значение, он соответствует пику распределения Гаусса. Значения остальных элементов уменьшаются по мере удаления от центрального элемента. Уменьшение происходит в соответствии с распределением Гаусса. Маска формируется с использованием следующих соотношений:

;

,

где M и N - размеры маски;
- среднеквадратическое отклонение распределения Гаусса. Пример 8.1. Обработать изображение на рис.2 фильтром Гаусса. Результат показан на рис.3. >> f = fspecial('gaussian', 5, 5)f = 0.0369 0.0392 0.0400 0.0392 0.0369 0.0392 0.0416 0.0424 0.0416 0.0392 0.0400 0.0424 0.0433 0.0424 0.0400 0.0392 0.0416 0.0424 0.0416 0.0392 0.0369 0.0392 0.0400 0.0392 0.0369>> imshow(imfilter(rgb, f)) 8.4.Фильтр Собеля Функция h=fspecial(‘sobel’) возвращает маску фильтра Собеля для выделения горизонтальных границ:

.

Для выделения вертикальных границ достаточно транспонировать данную маску h. Пример 8.2. Обработать изображение на рис.2 фильтром Собеля. Результат показан на рис.4,5.>> f = fspecial('sobel') f = 1 2 1 0 0 0 -1 -2 -1
>> imshow(imfilter(rgb,f)) Рис.4. Маска фильтра Собеля (горизонтальными границами) >> imshow(imfilter(rgb,f'))   Рис.5. Маска фильтра Собеля (вертикальными границами)
8.5. Фильтр Превитта. Функция h=fspecial(‘prewitt’) возвращает маску фильтра Превита для выделения горизонтальных границ:

.

Для выделения вертикальных границ достаточно транспонировать данную маску h. Пример 8.3. Обработать изображение на рис.2 фильтром Превитта. Результат показан на рис.6,7.>> f = fspecial('prewitt')f = 1 1 1 0 0 0 -1 -1 -1
>> imshow(imfilter(rgb,f)) >> imshow(imfilter(rgb,f'))
Рис.6. Маска фильтра Превитта (горизонтальными границами) Рис.7. Маска фильтра Превитта (вертикальными границами)
8.6. ВЧ фильтр Лапласа. Функция h=fspecial(‘laplasian’, a) возвращает маску h ВЧ фильтра Лапласа. Размер маски 3 3. Параметр а управляет соотношением между центральным и граничными элементами маски. Данный параметр должен устанавливаться в диапазоне [0, 1]. По умолчанию а=0.2. Фильтр Лапласа относится к ВЧ фильтрам и предназначен для выделения границ (перепадов) во всех направлениях. Маска фильтра конструируется следующим образом:

,

где - параметр в диапазоне [0,1], передаваемый в функцию fspecial. Пример 8.4. Обработать изображение на рис.2 фильтром Лапласа. Результат показан на рис.8.

>> f = fspecial('laplacian')

f =

0.1667 0.6667 0.1667

0.6667 -3.3333 0.6667

0.1667 0.6667 0.1667

>> imshow(imfilter(rgb, f))

Рис.8. Фильтр Лапласа Рис.9. Фильтр Лапласа-Гаусса. Результат имеет тот же формат и размерность, что и входное изображение. 8.7.Фильтр Лапласа-Гаусса.

Функция h=fspecial(‘log’, n, sigma) возвращает маску h фильтра, аналогичного последовательному применению фильтров Гаусса и Лапласа, так называемого лапласиана-гауссиана. Размер маски определяет параметр n. Если n - двухкомпонентный вектор, то размер маски n(1) n(2). Если n - скаляр, то размер маски n n. Параметр sigma задает среднеквадратическое отклонение Гаусса, которое используется при формировании маски h. Если при вызове функции параметры n и sigma опущены, то размер маски устанавливается равным 5 5, а среднеквадратическое отклонение 0.5.

Лапласиан-гауссиан также относится к ВЧ фильтрам, но в отличие от фильтра Лапласа выделяет более резкие перепады. Маска фильтра создается по формуле

,

где M и N - размеры маски; - среднеквадратическое отклонение распределения Гаусса. Формула для вычисления выведена выше.

Пример 8.5. Обработать изображение на рис.1 фильтром Лапласа-Гаусса. Результат показан на рис.8.

>> f = fspecial('log')

f =

0.0448 0.0468 0.0564 0.0468 0.0448

0.0468 0.3167 0.7146 0.3167 0.0468

0.0564 0.7146 -4.9048 0.7146 0.0564

0.0468 0.3167 0.7146 0.3167 0.0468

0.0448 0.0468 0.0564 0.0468 0.0448

>> imshow(imfilter(rgb, f))

Результат имеет тот же формат и размерность, что и входное изображение. 8.8. Усредняющий НЧ фильтр.

Функция h=fspecial(‘average’, n) возвращает маску h усредняющего НЧ фильтра. Размер маски определяет параметр n. Если n - двухкомпонентный вектор, то размер маски n(1) n(2). Если n - скаляр, то размер маски n n. Если при вызове функции параметр n опущен, то размер маски устанавливается равным 3 3.

Усредняющий фильтр относится к фильтрам нижних частот. Он предназначен для фильтрации высокочастотного шума, и его работа сопровождается размытием изображения. Каждый элемент маски равен 1/MN, где М и N - размеры маски (количество строк и столбцов).

Пример 8.6. Обработать изображение на рис.2 усредняющим НЧ фильтром. Результат показан на рис.10.

>> f = fspecial('average', 6)

f =

0.0278 0.0278 0.0278 0.0278 0.0278 0.0278

0.0278 0.0278 0.0278 0.0278 0.0278 0.0278

0.0278 0.0278 0.0278 0.0278 0.0278 0.0278

0.0278 0.0278 0.0278 0.0278 0.0278 0.0278

0.0278 0.0278 0.0278 0.0278 0.0278 0.0278

0.0278 0.0278 0.0278 0.0278 0.0278 0.0278

>> imshow(imfilter(rgb, f))

 

 

 

 

Рис.10. Усредняющий Рис.11. Фильтр повышения

НЧ фильтр резкости 8.9. Фильтр повышения резкости.

Функция h=fspecial(‘unsharp’, a) возвращает маску h фильтра, повышающего резкость изображения. Размер маски 3 3. Параметр а управляет соотношением между центральным и граничными элементами маски. Данный параметр должен устанавливаться в диапазоне [0, 1]. По умолчанию а =0.2.

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

,

где - параметр в диапазоне [0,1], передаваемый в функцию fspecial.

Пример 8.7. Обработать изображение на рис.1 фильтром повышения резкости. Результат показан на рис.10.

>> f = fspecial('unsharp')

f =

-0.1667 -0.6667 -0.1667

-0.6667 4.3333 -0.6667

-0.1667 -0.6667 -0.1667

>> imshow(imfilter(rgb, f))

 

 

Выделение контуров объектов

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

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

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

Загрузив графический файл, получим матрицу интенсивности цвета (или компоненты цвета) изображения Z, которую можно интерпретировать как функцию двух переменных i,j – координат пикселов. Построим для каждой карты цвета линии уровня. Следует учитывать, что когда MATLAB выводит матрицу изображения как изображение – пиксел с координатой (0,0) распологается в нижнем левом углу окна вывода, а при построении линий уровня в графическом окне точка (0,0) соответствует верхнему левому углу. Поэтому при построении линий уровня получается перевернутое отображение, и чтобы его отобразить с той же ориентацией, как у исходного изображения, нужно выполнить преобразование по вертикали i в n-I, где n – число строк.

 

Пример 9.1. Построить линии уровня рис.1.

>> I=imread('c:\yashina\face\01.jpg');

>> size(I)

ans =

436 335 3

 

% Следовательно, в матрице цвета 436 строк (y) и 335

% столбцов (x).

% Вводим индекс i1, который пробегает по столбцу снизу % вверх

 

>> i=1:436;j=1:335;i1=436+1-i;

>> I1(i,j)=I(i1,j,1);

>> contour(I1,20)

 

Линии уровня красной компоненты изображений А и В показаны на рис.2 и рис.4.

 

Рис.1. Исходное изображение А Рис.2. Изображение А с выделенными контурами

 

Пример 9.2. Построить линии уровня рис.3.

 

 

Рис.3. Исходное изображение В Рис.4. Изображение В с выделенными контурами

 

 

Пример 9.3. Рассмотрим изображение на рис.5. Построение линий уровня для сложной фотографии не даст удовлетворительного результата. Поэтому вырежем одиночный объект, рис.6, и построим линии уровня для этого фрагмента.

 

 

Рис.5. Полное исходное изображение

 

 

Рис.6. Область исходного изображения

 

На рис.7 построены линии уровня командой

>> contour(Img,10) % 10 линий уровня

Рис.7. 10 линий уровня

На рис.8 построены линии уровня командой

>> contour(Img,5) % 5 линий уровня

Рис.8. 5 линий уровня

Специальная функция для обработки изображений, распознающая контуры объектов, - edge дает следующий результат:

Рис.9. Результат работы функции edge

Пример обработки изображения для анализа качества дорожного покрытия

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

 

Пример 10.1. Определить количество связанных компонентов на фрагменте дорожного полотна (рис.1).

 

Рассмотрим фотографию реального дорожного полотна, выполненную фотокамерой Nikon D-70, на которой имеются различные объекты – дорожная разметка, «заплаты», канализациооный люк, зона мокрого асфальта. Эти объекты имеют сложную цветовую структуру, причем некоторые из них накладываются друг на друга, поэтому для их автоматического распознавания требуется разработка многоступенчатых алгоритмов. В тоже время функции MATLAB могут давать результаты даже на такого сложного для анализа изображения.

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

 

>> I=imread ('DSC_2021','jpg');

% Открытие графического файла *.jpg

>> I1 = rgb2gray(I);

% Преобразование из rgb-формата в полутоновый формат

>> I2=histeq(I1);

% Увеличение контрастности с помощью эквализации гистограммы

>> I3=imcrop(I1);

% Выделение фрагмента с прерывистой разметкой

 

Рис.1. Выделение фрагмента изображения

 

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

 

>> figure, imshow(I3) % Вывод на экран %изображения

 

 

Рис.2. Фрагмент изображения на рис. 1. Полутоновый формат   Рис.3. Фрагмент, преобра-зованный в бинарный формат  

 

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

>> I4=im2bw(I3);

 

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

 

>> [L,num] = bwlabel(I4,8)

% Использование процедуры подсчета

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

% после выполнения процедуры и может

% использоваться в дальнейших исследованиях)

num =

 

Значение переменной num соответствует вычисленному количеству белых связных компонент на рис.3.

 

Пример 10.2. Определение отремонтированных участков дорожного покрытия по фотографии.

Рассмотрим изображение, также выполненное фотокамерой Nikon D-70

 

Рис.4. Фотография дорожного

покрытия в примере 10.2

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

 

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

 

 

Переведем изображение в полутоновй формат, вырежем фрагмент с заплатой.

>>>> I=imread (‘DSC_3561’,’jpg’);

% Открытие графического файла *.jpg

>> I1 = rgb2gray(I);

% Преобразование из rgb-формата в полутоновый формат

>> I3=imcrop(I1);

% Выделение фрагмента с заплатой

 

Проведем анализ цвета заплаты и фона, ри.

 

   
Рис.6. Фрагмент с заплатой Рис.7. Гистограмма рис.6

 

 

Гистограмма позволяет определить порог бинаризации. На рис.7 видим два максимума. Максимум с меньшим значением цвета и большей частотой соответствует заплете. Выполним преобразование в бинарный формат так, что 1 будет соответствовать интервалы [70,100] – левому максимуму на рис.7.

 

>> I2=roicolor(I,70,100)

 

Результат показан на рис. 8.

 

Рис.8. Бинаризация с выбранным порогом Рис. 9. Негативное преобразование изображения

 

 

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

 

Рис.10. Выделенная заплата Рис.11. Фильтр Гаусса

 

Применение фильтра Гаусса дает результат, показанный на рис.11. Небольшое количество белых вкраплений удалось убрать. Лучше выполняет задачу усредняющий фильтр – рис.12. В то же время, можно сделать вывод, что для задач идентификации объектов методы фильтрации не дают удовлетворительных результатов.

 

Рис.12. Усредняющий фильтр Рис.13. Попиксельная обработка

 

Использование попиксельной обработри, убирающей белое пятно, если его размер меньше заданного порога, дает результат, показанный на рис.13. В итоге, пикселы, соответствующие заплатке, определены и объект детектирован.

 

Литература

 

1. Оригинальный материал компании MathWorks - разработчика программной среды MatLab. http://www.mathworks.com/

2. Гонсалес Р., Вудс Р., Эддинс С. Цифровая обработка изображений в среде MATLAB. – Москва: Техносфера, 2006. – 616 с.

3. Гонсалес Р., Вудс Р. Цифровая обработка изображений. – Москва: Техносфера, 2005.

4. В.П. Дьяконов. Matlab 6.5 SP1/7 + Simulink 5/6. Основы применения. М.: Солон-Пресс, 2005.-800с.

5. Конюшенко В.В. MATLAB. Начало работы с MATLAB. Перевод с английского. http://kappasoft.narod.ru/cdrom/books.htm

6. А.П.Буслаев, В.В.Дорган, Д.М.Кузьмин, В.М.Приходько, В.Ю.Травкин, Яшина М.В. Распознавание изображений и мониторинг состояния дорог, автотранспорных потоков и безопасности движения. Вестник МАДИ(ГТУ) N 4, 2005. 8 с., 102-109 стр.

7. А.П.Буслаев, В.В.Дорган, Е.А.Крылов, В.М.Приходько, В.Ю.Травкин, Яшина М.В. Автоматическое распознавание средств операти вного управления автодорожным движением и оценка их эффективности. Наука и техника транспорта, НТТ N 2, 2005

8. К вопросу об интеллектуальных системах в автомобильно-дорожном движении. – А.П. Буслаев, Д.М. Кузьмин «Наука и техника в дорожной отрасли», 2006.

9. Физика. Большой энциклопедический словарь /Г.ред. А.М. Прохоров – 4-е изд. – М.: Большая Российская энциклопедия, 1999.-944 с.

 

 


Поделиться с друзьями:

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

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

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

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.161 с.