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

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО КУЛЬТУРЕ И КИНЕМАТОГРАФИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

КИНО И ТЕЛЕВИДЕНИЯ»


ЛАБОРАТОРНАЯ РАБОТА № 1

«Основные правила работы с изображениями и видеопоследовательностями в системе MATLAB»

выполнил:

Судаков Владимир

Студент 112 группы

проверила:

Буль М.П.

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

Цель работы:

  • Изучить особенности работы и графические возможности системы MATLAB.
  • Изучить способы выполнения команд в MATLAB.
  • Изучить возможности анализа и улучшения изображений, предоставляемые системой MATLAB и пакетом программ Image Processing Toolbox (IPT).

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

Для загрузки (чтения) изображения в рабочее пространство MATLAB используется функция imread со следующим синтаксисом:

I = imread (‘filename.fmt’).

Данная функция читает из файла с именем filename и любым расширением (.fmt, сокр. от format) бинарное, полутоновое или полноцветное изображение и помещает его в массив I.

Команда imread распознает следующие графические форматы: TIFF, JPEG, GIF, BMP, PNG, XWD.

Изображение можно вывести на экран компьютера с помощью функции imshow, которая имеет следующий синтаксис: imshow (I, n) где I- это матрица изображения, а n – число уровней яркости, используемое при отображении этого изображения. Если аргумент n опущен, то по умолчанию принимается 256 уровней яркости.

Основной функцией, используемой для построения графиков в MATLAB, является функция plot. Она позволяет строить графики в линейном масштабе.

Функция plot (X, Y) говорит о том, что для построения графика функции в линейном масштабе достаточно задать два вектора (один со значениями аргументов, а другой со значениями функции) и команду plot. А система MATLAB самостоятельно создает графическое окно, строит оси координат, выбирая оптимальный масштаб для представления графика, и выводит график функции некоторым заданным по умолчанию цветом.

subplot (m, n, p).

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

ФункцияId = histeq(I, n) преобразует исходное полутоновое изображение I таким образом, чтобы результирующее полутоновое изображение Id имело гистограмму 15

яркостей пикселов, близкую к равномерной.

Функция ID=imadjust(IS, [low high], [bottom top], gamma) создает полутоновое изображение ID путем контрастирования исходного полутонового изображения IS. Значения яркости в диапазоне [low high] преобразуются в значения яркости в диапазоне [bottom top]. Значения яркости, меньшие low, принимают значение bottom. а значения яркости, большие high, принимают значение top. Значения top, bottom, low, high должны принадлежать диапазону [0, 1]. Если в качестве второго ([low high]) или третьего ([bottom top]) параметров передать пустой вектор [], то по умолчанию будет использоваться вектор [0, 1]. С помощью показателя gamma можно дополнительно осуществлять преобразование, называемое гамма-коррекцией.
Задание 1. Чтение видеофайла, построение гистограммы изображения и огибающей гистограммы, вывод результатов на экран

file='Nevsky.avi';

MMa=mmreader('Nevsky.avi');%загрузка

fr=read(MMa,900);%чтение кадра

subplot(4,1,1);imshow(fr);title('Кадр');%вывод кадра на экран

frI=rgb2gray(fr);%перевод в полутоновой

subplot(4,1,2);imhist(frI);title('Гистограмма яркостей');axis([0 200 0 10e3]);%построение гистограммы яркостей

[h,cx]=imhist(frI);%возрат вектора гистограммы

subplot(4,1,3);plot(cx,h);axis([0 200 0 10e3]);grid on;title('Огибающая гистограммы');%построение огибающей гистограммы

n=numel(frI);%определение общего числа пикселей

[h1,cx]=imhist(frI)

h1=h1/n;%деление вектора гитограммы h на общее число пикселей

subplot(4,1,4);plot(cx,h1);axis([0 200 0 0.02]);grid on;title('Огибающая нормированной гистограммы');

Задание 2. Эквализация (выравнивание) гистограмм

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

file='Nevsky.avi';

%Чтение видео

a=mmfileinfo(file);

%команда для загрузки видео

MMa=mmreader(file);

%Создаем мультимедийный считыватель

T=read(MMa,900);

%Считываем 900й кадр

I=rgb2gray(T);

%Преобразуем в полутоновое

Id=histeq(I, 64);

%Выравнивание гистограммы

Ic=histeq(I, 256);

Ia=histeq(I, 4);

subplot(4,2,1);

imshow(T);

title('кадр 900');

subplot(4,2,2);

imhist(I);

axis([0 250 0 10000]);

subplot(4,2,3);

imshow(Id);

title('кадр 900');

subplot(4,2,4);

imhist(Id);

axis([80 250 0 10000]);

subplot(4,2,5);

imshow(Ic);

title('кадр 900');

subplot(4,2,6);

imhist(Ic);

axis([80 250 0 10000]);

subplot(4,2,7);

imshow(Ia);

title('кадр 900');

subplot(4,2,8);

imhist(Ia);

axis([0 250 0 500])

Вывод: Наиболее удобным для восприятия человеком будет изображение, у которого гистограмма близка к равномерному распределению. Т.е. для улучшения визуального качества к изображению надо применить такое преобразование, чтобы гистограмма результата содержала все возможные значения яркости и при этом в примерно одинаковом количестве.

Задание 3. Контрастирование изображения с гамма-коррекцией

clear;

file='Nevsky.avi';

%Чтение видео

k=mmfileinfo(file);

%команда для загрузки видео

S=mmreader(file);

%Создаем мультимедийный считыватель

T=read(S,900);

%Считываем 900й кадр

I=rgb2gray(T);

%Преобразуем в полутоновое

imhist(I);

figure(1); subplot(2,1,1);

imshow(T);

title('кадр 900');

subplot(2,1,2);

imhist(I);

title('Гистограмма');

axis([0 300 0 8000])

figure(2);

subplot(2,1,1); Id=imadjust(I, [0 200]/255, [1 0]);

imshow(Id);

title('негатив');

subplot(2,1,2);

imhist(Id);

title('Гистограмма');

axis([0 300 0 8000])

figure(3);

subplot(2,1,1); Id=imadjust(I, [0 200]/255, [0 1]);

imshow(Id);

title('кадр 900 gamma=1');

subplot(2,1,2);

imhist(Id);

title('Гистограмма');

axis([0 300 0 8000])

figure(4);

subplot(2,1,1); Id=imadjust(I, [0 200]/255, [0 1], 0.5);

imshow(Id);

title('кадр 900 gamma=0.5');

subplot(2,1,2);

imhist(Id);

title('Гистограмма');

axis([0 300 0 8000])

figure(5);

subplot(2,1,1); Id=imadjust(I, [0 200]/255, [0 1], 1.3);

imshow(Id);

title('кадр 900 gamma=1.3');

subplot(2,1,2);

imhist(Id);

title('Гистограмма');

axis([0 300 0 8000])

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

Задание 4. Вычисление среднего значения и среднеквадратичного отклонения элементов матрицы изображения

clear;

file='Nevsky.avi';

%Чтение видео

k=mmfileinfo(file);

%команда для загрузки видео

S=mmreader(file);

%Создаем мультимедийный считыватель

T=read(S,900);

D=double(T);

d=std(D);

%Cреднее значение

m=mean(D);

%Среднеквадратичное отклонение

disp(d);

disp(m);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: