Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет_лаба5.docx
Скачиваний:
0
Добавлен:
25.04.2024
Размер:
3.92 Mб
Скачать

ГУАП

КАФЕДРА 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

доцент, канд. тех. наук, доцент

О. О. Жаринов

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 5

ИЗУЧЕНИЕ МЕТОДОВ УПРАВЛЕНИЯ КОНТРАСТНОСТЬЮ ИЗОБРАЖЕНИЙ

по курсу: Мультимедиа технологии

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

подпись, дата

инициалы, фамилия

Санкт-Петербург 2024

Цель работы

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

Вариант задания

Номер варианта: №8

Функция из MATLAB: adapthisteq(L, “NumTiles”, [A B], ‘ClipLimit’, C)

Параметр: В

Теоретические сведения

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

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

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

  • Устранение шума: Цифровые изображения могут содержать различные виды шума, такие как аппаратный шум (например, сигналы от датчиков в камере) или артефакты сжатия изображения. Методы улучшения включают в себя фильтры для уменьшения или удаления такого шума без существенного воздействия на основные детали изображения.

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

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

Обзор имеющихся функций

В первой части лабораторной работы необходимо переписать из методического пособия листинга 2 [2]. В данном листинге приведены 3 основные функции, изменяющие качество изображения: histeq, imadjust, adapthisteq. К сожалению, на Python не нашлось полноценных аналогов данных функций из MATLAB, поэтому пришлось импровизировать. Так, для функции эквализации гистограммы (histeq) удалось найти полноценный аналог, для функции imadjust пришлось создавать функцию, аналогичную по функционалу, а для функции adapthisteq был найден неполноценный аналог (с урезанным функционалом). Таким образом, в таблице 1 показан список используемых переменных, а в листинге 1 – программный код разработанных функций.

Таблица 1. Список используемых переменных

Название

Тип

Описание

Car, landscape, island

Двумерные массивы

Считанные ранее изображения

temp

Двумерный массив

Результат выполнения функций

Image_histeq

Функция

Аналог функции histeq из MATLAB

Image_imadjust

Функция

Аналог функции imadjust из MATLAB

Image_adapthisteq

Функция

Аналог функции adapthisteq из MATLAB

Img_hsv

Двумерный массив

Перевод исходного изображения в HSV

LAB

Двумерный массив

Перевод исходного изображения в LAB

Img_gamma

Двумерный массив

Гамма-коррекция изображения

Листинг 1. Разработанный программный код

def image_histeq(img):

img_hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)

j_hsv = np.copy(img_hsv)

V = img_hsv[:,:,2] # Выделение матрицы яркости

V_out = cv.equalizeHist(V) # Эквализация гистограммы

j_hsv[:,:,2] = V_out

j = cv.cvtColor(j_hsv, cv.COLOR_HSV2BGR)

return j

def image_imadjust(image, gamma=1.0, low_percentile=1, high_percentile=99):

# Растяжение диапазона интенсивностей

p_low, p_high = np.percentile(image, (low_percentile, high_percentile))

img_rescale = exposure.rescale_intensity(image, in_range=(p_low, p_high))

# Гамма-коррекция

img_gamma = exposure.adjust_gamma(img_rescale, gamma)

return img_gamma

def image_adapthisteq(img, kernel_size=[8, 8], clip_limit=0.02, convert2lab: bool=False):

if convert2lab:

LAB = color.rgb2lab(img)

L = LAB[:,:,0] / 100

L = exposure.equalize_adapthist(L, clip_limit=clip_limit, kernel_size=kernel_size)

LAB[:,:,0] = L * 100

J = color.lab2rgb(LAB)

else:

J = exposure.equalize_adapthist(img, clip_limit=clip_limit, kernel_size=kernel_size)

return np.float32(J)

# Применение функции эквализации гистограммы

temp = image_histeq(car)

# Применение функции увеличения контраста

temp = image_imadjust(landscape)

# Применение функции контрастно-ограниченного адаптивного выравнивания гистограммы (CLAHE)

temp = image_adapthisteq(island, convert2lab=False)

Далее, необходимо выбрать несколько изображений на которых будут производится преобразования. Были выбраны 3 изображения, вид и матрица яркости которых представлены на рисунках 1-3. Первая картинка была сгенерирована нейросетью Kandinsky [3], вторая была взята из портфолио одного Австралийского фотографа [4], а последняя из открытого доступа [5]

Рисунок 1 – Парящий остров

Рисунок 2 – Машина

Рисунок 3 – Пейзаж

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

Рисунок 4 – Результат изменения изображения после histeq

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

Далее, необходимо протестировать самописный аналог функции imadjust из MATLAB. Изначально, данная функция осуществляет увеличение контраста изображения путем растяжения диапазона интенсивностей исходного изображения с одновременным выполнением гамма-коррекции. Поскольку полноценного аналога на Python обнаружить не удалось, то пришлось разбираться как устроена данная функция на MATLAB [6], а затем переписывать функционал её на Python. Удалось выяснить, что при тех параметрах, которые показаны в методическом пособии, данная функция изменяет интенсивность от 1% до 99% от исходного изображения, при этом гамма-коррекция не выполняется. Таким образом, на рисунке 5 показан результат выполнения функции на Python, а на рисунке 6 – результат выполнения в MATLAB.

Рисунок 5 – Результат изменения изображения после imadjust на Python

Рисунок 6 - Результат изменения изображения после imadjust на MATLAB

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

И наконец, заключительная функция adapthisteq из MATLAB имеет неполноценный аналог на Python. Поэтому, для того чтобы оценить масштаб упущенных возможностей данной функции необходимо было посмотреть документацию исходной функции [7] и найденного аналога [8]. Было выяснено, что в найденном аналоге отсутствует такое большое количество разнообразных параметров, какие есть у оригинальной команды. Из-за этого получаемые результаты немного различаются. Так, например, на рисунках 7 и 8 показаны результаты применения данной функции в зависимости от исполняемой среды.

Рисунок 7 – Результат изменения изображения на Python

Рисунок 8 – Результат изменения изображения на MATLAB

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

Соседние файлы в предмете Мультимедиа технологии