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

ГУАП

КАФЕДРА № 41

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

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

доц., к.т.н., доц.

О.О. Жаринов

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

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

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

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

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

по курсу: МУЛЬТИМЕДИА-ТЕХНОЛОГИИ

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

СТУДЕНТ ГР. №

4117

А.В. Иванова

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

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

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

Цель работы:

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

Вариант 8:

Рисунок 1 — Варианты заданий

Краткие теоретические сведения:

Цифровые изображения принято представлять в виде матриц

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

При рассмотрении методов обработки полутоновых изображений (значения элементов в диапазоне [0; 255]) изображение представляется матрицей чисел M×N, где значение каждого элемента отвечает определённому уровню квантования его яркости. Каждый пиксель цветного изображения кодируется тремя целыми числами, представляющими собой значения интенсивностей трёх основных цветов – красного, зелёного и синего. Таким образом, цветное изображение представляется трёхмерной матрицей M×N.

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

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

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

В библиотеке skimage (scikit-image) Python для улучшения визуального восприятия изображения можно использовать следующие методы обработки изображений :

  • exposure.rescale_intensity() — увеличивает контраст, растягивая диапазон интенсивностей и выполняя гамма-коррекцию;

  • exposure.adjust_gamma() — выполняет гамма-коррекцию, позволяя динамически затемнять или осветлять изображение;

  • exposure.equalize_hist() — эквализация гистограммы, увеличивающая контрастность путем преобразования гистограммы распределения интенсивностей, но может давать плохие результаты на слабоконтрастных изображениях;

  • exposure.equalize_adapthist() — контрастно-ограниченное адаптивное выравнивание гистограммы, основанное на анализе локальных окрестностей, с множеством настраиваемых параметров.

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

Выполнение работы:

Часть 1. Рассмотрение методов преобразования изображения.

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

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

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

Листинг 1 — Программный код общей функции обработки изображения.

import numpy as np # для работы с данными

import matplotlib.pyplot as plt # для графиков

from skimage import io, color, exposure # для обработки изо

from skimage.color import rgb2lab, lab2rgb # для преобразования цветовых пространст

image_path = 'img/toad.jpg' # путь к изображению

image = io.imread(image_path) # считывание изображения

def process_image(img, method, n=None, gamma = 3):

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

if img.ndim == 3 and img.shape[2] == 3: # Цветное изображение

LAB_image = rgb2lab(img) # в пр-во LAB

L = LAB_image[:, :, 0] / 100 # выделяем матрицу яркости

elif img.ndim == 2: # Черно-белое изображение

L = img / 255.0 # нормализация пикселей

L_out = method(L, n) if n is not None else method(L) # обработка по переданному методу

if img.ndim == 3: # Если цветное изображение

LAB_image[:, :, 0] = exposure.adjust_gamma(L_out, gamma=gamma) * 100 # гамма-корр.

return lab2rgb(LAB_image) # возвращаем цвет в изображение

else: # Если черно-белое изображение

return (L_out * 255).astype(np.uint8) # Возвращаем черно-белое изображение

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

Листинг 2 — Реализация методов обработки изображения.

# линейное контрастинирование

def linear_contr(L):

return exposure.rescale_intensity(L, in_range=(np.min(L), np.max(L)), out_range=(0, 1))

# эквализация

def equalize_contr(L):

return exposure.equalize_hist(L, nbins=64)

# адаптивная эквализация

def adaptive_contr(L, n=16):

return exposure.equalize_adapthist(L, kernel_size=(16, n), clip_limit=0.01, nbins=256)

Далее написана функция отображения передаваемого изображения и его гистограммы яркости (Листинг 3). Для удобства изображения размещены на одном холсте [2]. В конце приведён вызов разных методов обработки исходного изображения для построения результатов.

Листинг 3 — Функция построения гистограммы яркости.

# построение графиков

def plot_gray_scale(img, title):

# отображение полученного изображения

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))

ax1.imshow(img)

ax1.axis('off')

ax1.set_title(title)

gray_image = color.rgb2gray(img)

# построение гистрограммы

histogram, bin_edges = np.histogram(gray_image, bins=256, range=(0, 1))

ax2.bar(bin_edges[:-1], histogram, width=1 / 128)

ax2.set_xlim(0, 1)

ax2.ticklabel_format(axis='y', style='sci', scilimits=(4, 4))

ax2.grid(True)

ax2.set_title("Гистрограмма яркости")

ax2.set_xlabel("Интенсивность")

ax2.set_ylabel("Кол-во пикселей")

plt.tight_layout()

plt.show()

# Обработка и отображение изображений

plot_gray_scale(image, "исходное изображение")

plot_gray_scale(process_image(image, linear_contr), "линейное контрастирование")

plot_gray_scale(process_image(image, equalize_contr), "эквализация")

plot_gray_scale(process_image(image, adaptive_contr, 16), "адаптивная эквализация") # n по умолчанию

В результате выполнения программы получены отображения исходного изображения (полный код в Приложении А); изображения с примененным линейным контрастинированием, глобальной эквализации гистограммы, адаптивной эквализации гистограммы. В случае обработки исходного изображения одним из приведённых методов также выполнялась гамма коррекция, с параметром gamma = 2, для затемнения исходного изображения и более наглядного действия обрабатывающих методов.

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

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

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

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

Рисунок 2 — Исходное изображение и его гистограмма яркости

Рисунок 3 — Линейное контрастирование изображения (гамма-коррекция 2)

Рисунок 4 — Глобальная эквализация гистограммы (гамма-коррекция 2)

Рисунок 5 — Локальная эквализация гистограммы (гамма-коррекция 2.