Лабораторная работа №1
.doc
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО КУЛЬТУРЕ И КИНЕМАТОГРАФИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
КИНО И ТЕЛЕВИДЕНИЯ»
ЛАБОРАТОРНАЯ РАБОТА № 1
«Основные правила работы с изображениями и видеопоследовательностями в системе MATLAB»
выполнил:
Судаков Владимир
Студент 112 группы
проверила:
Буль М.П.
Санкт-Петербург
2014
Цель работы:
-
Изучить особенности работы и графические возможности системы 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);
Columns 280 through 288
68.4713 68.4831 68.4730 68.4591 68.3347 68.2739 68.1896 68.1220 68.1119
Columns 271 through 279
67.9165 67.9861 68.2005 68.3504 68.4665 68.5266 68.4519 68.5367 68.5907
Задание 5 Вычисление коэффициента корреляции между двумя матрицами
clear;
file='Nevsky.avi';
%Чтение видео
k=mmfileinfo(file);
%команда для загрузки видео
S=mmreader(file);
%Создаем мультимедийный считыватель
T=read(S,900);
D=read(S,901);
%Преобразуем в полутоновое
I=rgb2gray(T);
O=rgb2gray(D);
A)
A=double(I);
B=double(O);
%коэффициент корреляции между A&B
k=corr2(A,B);
disp(k)
subplot(1,2,1); imshow(I);
title('кадр №900')
subplot(1,2,2); imshow(O);
title('кадр №901')
K=0.9704
B)
K=0.5997
C)
K= 0.5820
D)
K= 0.6266
Вывод: При увлечении расстояния между кадрами в 1, 5, 10 раза, коэффициент корреляции уменьшается.