
Методички / мт__МТZконтрольная
.pdfКонтрольная работа Основы обработки видео в MATLAB
Цель работы. Получить навыки обработки видео в среде MATLAB, выполнив индивидуальное задание.
Краткие теоретические сведения
Видео-контент является одним из основных компонентов мультимедиа. Обработка видео производится с целью изменения его свойств. С феноменологической точки зрения видео представляет собой последовательность отдельных изображений, быстро сменяющих друг друга. Обычно используемая частота смены кадров (frame rate) составляет 25 или 30 кадров в секунду (frames per second – FPS). Помимо видео, в мультимедиавидеофайле могут быть дополнительно закодированы и аудиоданные.
Задачи обработки видео во многом сходны и задачами обработки изображений. Изображения кадров могут иметь разнообразные дефекты (например, быть немного размытыми, иметь неудовлетворительные характеристики контрастности, яркости, насыщенности цветов, баланса белого цвета, и т.п.). Кроме того, иногда ставится задача привнесения в видео дополнительной графической информации: встраивание логотипов, изменение цветовых характеристики объектов, создание разнообразных спецэффектов. Специфической особенностью обработки изображений в составе видео является тот факт, что зрителем они воспринимаются последовательно во времени, поэтому для создания динамических эффектов бывает полезно изменять настройки алгоритма обработки изображения при переходе от одного кадра к другому, чтобы добиться желаемого результата. Впрочем, при постоянных настройках алгоритма обработки можно получить интересные результаты, поскольку они будут зависеть и от динамических изменений сцены.
Одной из существенных проблем цифрового видео является необходимость хранения большого объема информации. Чтобы уменьшить этот объем, были разработаны эффективные методы сжатия и кодирования видеоинформации. К настоящему времени разработано несколько десятков форматов кодирования видео, поэтому задача извлечения видеоинформации из мультимедиа-файла является далеко не тривиальной, так же как и задача формирования видеофайла из последовательности имеющихся картинок. Поэтому далеко не всякая среда, в которой могут производиться вычисления, подходит для обработки видео.
В среде Matlab имеются стандартные функции чтения и записи видео в нескольких широко используемых форматах кодирования видеофайлов, хотя возможности чтения и записи видео сильно зависят от установленных в системе кодеков. Традиционно при решении задач обработки видео в Matlab используются форматы avi и mg4, хотя не все возможности данных форматов
1
© Жаринов О.О. Учебно-методические материалы к выполнению контрольной работы заочников по дисциплине “Мультимедиа-технологии”, гр.Z9411. ГУАП, 2024. – 11 с.
поддерживаются при записи видео после обработки. В принципе несжатое видео Matlab сможет создавать на любой системе без установленных кодеков, а для последующего сжатия информации без изменения самого контента можно пользоваться программами сторонних разработчиков. Подобная схема организации работы, безусловно, обладает очевидным недостатком, но является вполне приемлемой при выполнении учебных задач, реализации исследовательских проектов и при отладке оригинальных алгоритмов обработки видео, поскольку в Matlab имеется огромное количество хорошо документированных и отлаженных функций обработки изображений.
При выполнении данной работы основной упор делается на изменение свойств видеоконтента. В листинге 1 приведен текст программы, которая реализует чтение видеофайла, его раскадровку и обратную сборку кадров в выходной видеофайл.
В листинге 2 приведен текст программы, в которой к каждому отдельно взятому кадру применяется оператор пространственной фильтрации с маской
|
c |
c |
c |
|
|||
PSF |
|
c |
1 8 c |
c |
|
, |
|
|
|
||||||
|
|
|
|
|
|||
|
c |
c |
c |
|
|||
|
|
|
|
|
|
|
который, как известно, при с>0 обеспечивает улучшение четкости изображения, а при с<0 будет действовать как оператор пространственного сглаживания, применение которого к изображению приведет к размыванию границ объектов.
В данном случае величина параметра c выбрана переменной: это значение зависит от значения параметра цикла k. Нетрудно понять, что строка программы
c = -0.5 + 0.75*((k-1)/(numOfFrames-1));
приведет к тому, что в начале цикла параметр c окажется равным минус 0.5, а в конце станет равным +0.25, таким образом в первой половине выходного видео изображение будет ваз мытым, постепенно размытость уменьшается. а к концу видео, наоборот, появится ощущения улучшенной четкости изображения.
В листинге 3 приведен текст программы, в которой производится замена цветовой палитры изображений в видео. Для этого каждый кадр переводится в цветовую модель HSV и постепенно в цикле сужается диапазон оттенков (Hue), для которых насыщенность цвета не изменяется: переменная Hdn увеличивается, переменная Hup уменьшается, для пикселей, цвет которых (H) не удовлетворяет неравенству Hdn<H<Hup, насыщенность устанавливается равной нулю. В итоге, из видео постепенно исчезают цвета:
2
© Жаринов О.О. Учебно-методические материалы к выполнению контрольной работы заочников по дисциплине “Мультимедиа-технологии”, гр.Z9411. ГУАП, 2024. – 11 с.

сначала оттенки красного, затем оранжевый и пурпурный, и т.д. Последним остается цвет, сосредоточенный в окрестности значения Hue, равного 0.5 (это сине-зеленый цвет), в конечном итоге пропадает, и финальные кадры видео становятся монохромными.
Листинг 1 – MATLAB-программа открытия входного видеофайла, определения его атрибутов и шаблон раскадровки с последующей сборкой и записью в выходной видеофайл, без обработки
clc, clear all, close all
input_file_name = 'small.mpeg'; % имя исходного файла video_in = VideoReader(input_file_name); % чтение видео
output_file_name = 'D:\example.mp4'; % имя выходного файла
%подготовка объекта для последующей записи видеофайла: video_out = VideoWriter(output_file_name, 'MPEG-4');
%закомментированный вариант для другого формата вых. видео:
%video_out = VideoWriter('D:\example_out.avi', 'Motion JPEG AVI'); % но файл будет по объему раза в 3 больше open(video_out); % открываем видеообъект для последующей записи
%вот так можно узнать о некоторых свойствах открытого видео width = video_in.Width; % ширина в пискелях
height = video_in.Height; % высота в пикселях frameRate = video_in.FrameRate; % частота кадров
%сколько всего кадров в открытом видеофайле:
numOfFrames = video_in.NumberOfFrames;
%рекомендуется: use CurrentTime instead of NumberOfFrames
%подготавливаем структуру в которую будет прочитана информация
%чтобы потом проиграть в Матлабе
mov(1:numOfFrames) = struct('cdata', [], 'colormap', []);
%если в матлабе проигрывать не планируется – она не нужна
%Читаем видео покадрово
for k = 1:numOfFrames
image_k_in = read(video_in, k); % чтение k-го кадра
%в этом месте по идее и пишется алгоритм обработки
%каждого конкретного изображения очередного кадра image_k_out = image_k_in; % пока без обработки
writeVideo(video_out,image_k_out); % записали кадр mov(k).cdata = image_k_out; % для проигр. внутри Матлаба
end
% проигрываем обработанное видео в матлабе: hf = figure;
set(hf, 'position', [150 150 video_out.Width video_out.Height]) movie(hf, mov, 1, video_out.FrameRate);
close(video_out); % закрываем видеообъект после записи видео!
3
© Жаринов О.О. Учебно-методические материалы к выполнению контрольной работы заочников по дисциплине “Мультимедиа-технологии”, гр.Z9411. ГУАП, 2024. – 11 с.

Листинг 2 – MATLAB-программа обработки видео посредством пространственного фильтра с переменными во времени коэффициентами.
clc, clear all, close all input_file_name = 'small.mpeg';
output_file_name = 'D:\example_var_f.mp4';
video_in = VideoReader(input_file_name);
video_out = VideoWriter(output_file_name, 'MPEG-4'); open(video_out);
%определяем параметры видео: width = video_in.Width; height = video_in.Height;
frameRate = video_in.FrameRate; numOfFrames = video_in.NumberOfFrames;
%подготавливаем структуру в которую будет прочитана информация
%чтобы потом проиграть в матлабе
mov(1:numOfFrames) = struct('cdata', [], 'colormap', []);
%Читаем и фильтруем покадрово: for k = 1 : numOfFrames
image_k_in = read(video_in, k);
c = -0.5 + 0.75*((k-1)/(numOfFrames-1)); PSF= [-c, -c , -c;...
-c, 1+8*c, -c; ...
-c, -c, -c];
image_k_out = imfilter(image_k_in, PSF); writeVideo(video_out,image_k_out);
mov(k).cdata = image_k_out; % для проигр внутри матлаба
end
%проигрываем обработанное видео в Матлабе
hf = figure;
set(hf, 'position', [150 150 video_out.Width video_out.Height]) movie(hf, mov, 1, video_out.FrameRate);
close(video_out);
Заметим, что при необходимости можно сохранить все или часть кадров обрабатываемого видеофайла в виде изображений на диске компьютера. Для этого достаточно вставить в основной цикл перебора кадров следующие 3 строки:
frm = sprintf('test_%04d.jpg',k);
filename_k = strcat('D:\',frm);
imwrite(image_k_out, filename_k);
4
© Жаринов О.О. Учебно-методические материалы к выполнению контрольной работы заочников по дисциплине “Мультимедиа-технологии”, гр.Z9411. ГУАП, 2024. – 11 с.

Листинг 3 – MATLAB-программа обработки видео, в котором из кадров постепенно исчезают цвета, начиная с красного; последним остается сине-зеленый, в конце пропадают все цвета
clc, clear all, close all input_file_name = 'small.mpeg'; video_in = VideoReader(input_file_name); output_file_name = 'D:\example.mp4';
video_out = VideoWriter(output_file_name, 'MPEG-4'); open(video_out);
width = video_in.Width; height = video_in.Height;
frameRate = video_in.FrameRate; numOfFrames = video_in.NumberOfFrames;
%Обрабатываем покадрово for k = 1 : numOfFrames
image_k_in = read(video_in, k);
%Переводим кадр в цветовое пространство HSV:
image_k_HSV = rgb2hsv(image_k_in); for i=1:height
for j=1:width
%в зависимости от значения переменной цикла выделяем
%цвет из заданного диапазона – сначала присутствуют все цвета,
%по мере продвижения по видео границы цветового тона Hdn и Hup
%сужаются, приближаясь друг к другу и в итоге становятся равны
Hup = 1 - 0.5*(k/numOfFrames)^2; Hdn = 0.5*(k/numOfFrames)^2;
%Цвета, у которых оттенок Hue попадает
%в диапазон от Hdn до Hup, сохраняются; остальные пропадают
%т.к. их насыщенность обнуляется
if ((image_k_HSV(i,j,1)<=Hdn) || (image_k_HSV(i,j,1)>=Hup)) image_k_HSV(i,j,2) = 0;
end
end end
% переводим изображение обратно в пространство RGB: image_k_out = im2uint8(hsv2rgb(image_k_HSV));
% записываем кадр в файл видео writeVideo(video_out,image_k_out);
end
close(video_out); % закрываем видеообъект после записи
Первые две обеспечивают формирование уникального имени для каждого очередного кадра, а последняя обеспечивает запись кадра в виде изображения в формате jpg. Подобный механизм последовательного перебора может быть использован и в обратном направлении, когда нужно собрать видео из отдельных изображений, сохраненных на диске.
5
© Жаринов О.О. Учебно-методические материалы к выполнению контрольной работы заочников по дисциплине “Мультимедиа-технологии”, гр.Z9411. ГУАП, 2024. – 11 с.

В качестве еще одного примера программной реализации некоторых принципов покадровой обработки видео, в листинге 4 приведен листинг программы, в которой на каждый кадр накладывается окружность и для фрагмента изображения, попавшего внутрь окружности, выполняется увеличение изображения в 2 раза: достигается эффект линзы. Для достижения эффекта каждый пиксель окружности заполняется атрибутами пикселя (цветовой тон, насыщенность и яркости), находящегося вдвое ближе к центру окружности, на том же направлении от центра, что и целевой пиксель. Для каждого кадра производится перебор всех пикселей, которые принадлежат квадрату, в который вписана накладываемая “линзирующая” окружность. Проверка принадлежности пикселя окружности производится посредством вычисления евклидова расстояния от анализируемого пикселя до центра окружности.
Нетрудно видеть, что заметную часть программы составляют проверочные условия, предотвращающие появление ошибки при попытке обратиться к пикселю с некорректно заданными координатами. Для этого вводятся ограничения на границы случайных перемещений окружности и корректируются координаты вершин квадрата, в который вписана линзирующая окружность, если их значения выходят за пределы размера изображения.
Листинг 4 - MATLAB-программа обработки видео, в котором обеспечивается эффект линзового увеличения в 2 раза для фрагмента кадра, на который помещена окружность линзы, при случайном перемещении линзы в процессе проигрывания видео
clc, clear all, close all input_file_name = 'small.mpeg'; video_in = VideoReader(input_file_name);
output_file_name = 'D:\example.mp4';
video_out = VideoWriter(output_file_name, 'MPEG-4'); open(video_out);
%узнаем о некоторых свойствах открытого видео width = video_in.Width;
height = video_in.Height; frameRate = video_in.FrameRate;
numOfFrames = video_in.NumberOfFrames;
%Радиус окружности
%и параметр, задающий скорость случайных перемещений (а)
R = floor(2*height/5); a = 10;
% КООРДИНАТЫ ЦЕНТРА ОКРУЖНОСТИ:
Cy = floor(height/2); Cx = floor(width/2);
% Перебираем кадры последовательно for k = 1 : numOfFrames
image_k_in = read(video_in, k); image_k_in_HSV = rgb2hsv(image_k_in);
6
© Жаринов О.О. Учебно-методические материалы к выполнению контрольной работы заочников по дисциплине “Мультимедиа-технологии”, гр.Z9411. ГУАП, 2024. – 11 с.

image_k_out_HSV = image_k_in_HSV;
%Случайное приращение координат центра окружности
Cx = Cx + randi([-a,a]); Cy = Cy + randi([-a,a]);
%Ограничения на перемещения окружности:
if (Cx < 1) Cx = 1; end
if (Cx > width) Cx = width; end if (Cy < 1) Cy = 1; end
if (Cy > height) Cy = height; end
% расчет координат углов квадрата в который вписана окружность begin_x = Cx - R; end_x = Cx + R ;
begin_y = Cy - R; end_y = Cy + R; if (begin_y < 1)
begin_y = 1; end if (begin_y > height)
begin_y = height; end if (begin_x < 1)
begin_x = 1; end if (begin_x > width)
begin_x = width; end
if (end_y < 1) end_y = 1; end
if (end_y > height) end_y = height; end
if (end_x < 1) end_x = 1; end
if (end_x > width) end_x = width; end
% Перебираем пиксели, попавшие в квадрат в двойном цикле: for y=begin_y:end_y % перебор по высоте
for x=begin_x:end_x % перебор по ширине distance = sqrt((y-Cy)^2 + (x-Cx)^2);
if (distance < R) % попадает ли т. в круг?
%расчет координат точки, которую надо тащить к периферии
%круга, чтобы обеспечить эффект увеличения
yn = floor(Cy + (1/2)*distance*sin(atan2(y-Cy,x-Cx))); xn = floor(Cx + (1/2)*distance*cos(atan2(y-Cy,x-Cx)));
% Заполняем пиксель с коорд-ми x и y пикселем ближе к центру image_k_out_HSV(y,x,:) = image_k_in_HSV(yn,xn,:);
end end end
%Накладываем изображение окружности с черной границей image_k_out_HSV = insertShape(image_k_out_HSV,...
"Circle",[Cx Cy R],...
'LineWidth', 1, 'Color', [0 0 0]);
%Записываем очередной кадр выходного видео:
image_k_out = im2uint8(hsv2rgb(image_k_out_HSV)); writeVideo(video_out,image_k_out);
end close(video_out);
7
© Жаринов О.О. Учебно-методические материалы к выполнению контрольной работы заочников по дисциплине “Мультимедиа-технологии”, гр.Z9411. ГУАП, 2024. – 11 с.
Варианты заданий
Выполнение контрольной работы предполагает выполнение индивидуального задания. Работы выполняются Matlab, либо, по желанию обучающегося, в любой среде программирования, в которой он сможет решить поставленную задачу. Цель работы заключается написании собственного программного кода по обработке видео, поэтому использование каких-либо видеоредакторов для решения полученной задачи не допускается.
Варианты индивидуальных заданий:
1)Применить к кадрам видео пространственную медианную фильтрацию. Найти видео с заметным зашумлением или искусственно добавить в любое видео заметный шум типа “соль и перец” и, осуществив медианную фильтрацию, обеспечить подавление шумов без заметного влияния на элементы изображения.
2)Обработать видео, добившись “мерцающего” цвета: сохранить без изменений цветовую информацию только у некоторых кадров последовательности (например, у каждого третьего), для остальных установить насыщенность, равную нулю.
3)Обработать видео так, чтобы в последние 3 секунды скачкообразно пропал цвет, а контрастность плавно спадала от имеющегося значения до нуля (в конце остается ровное серое поле, со значениями яркости пикселей, равной 128).
4)Обработать видео так, чтобы в последние 3 секунды насыщенность цвета плавно спадала от имеющегося значения до нуля.
5)Обработать видео так, чтобы в последние 3 секунды яркость плавно спадала от имеющегося значения до нуля.
6)Обработать видео так, чтобы в последние 3 секунды четкость изображения плавно ухудшалась от имеющегося значения до полной размытости, при которой объекты становятся неразличимыми (указание: использовать маску сглаживающего фильтра с гауссовским окном с увеличивающейся от кадра к кадру апертурой).
7)Обработать видеокадры, используя алгоритм выделения границ метода Канни (рекомендуется использовать видеофайл с хорошей четкостью изображений, в идеале – фрагмент мультипликации).
8)Получить от каждого кадра видео три матрицы цветовых компонентов (R, G и B), после чего, сдвинув матрицы R и B относительно матрицы G на заданное количество индексов влево и вправо, совместить в единый кадр, получив в итоге заметные цветные окантовки вокруг объектов, сформировать выходное видео из таких кадров. При желании можно сделать параметр сдвига плавно изменяющимся от кадра к кадру.
9)Обработать видеокадры, используя метод пространственной Фурьефильтрации в соответствии с настройками, использованными при
выполнении лабораторной работы №6.
8
© Жаринов О.О. Учебно-методические материалы к выполнению контрольной работы заочников по дисциплине “Мультимедиа-технологии”, гр.Z9411. ГУАП, 2024. – 11 с.
10)Обработать видеокадры, используя алгоритм выделения границ метода Собеля (указание: рекомендуется использовать видеофайл с хорошей четкостью изображений, в идеале – фрагмент мультипликации).
11)Применить к кадрам видео операцию соляризации изображения.
12)Обработать видеокадры, используя метод обработки изображений посредством функции, указанной в задании на лабораторную работу №5.
13)Обработать видео, применив к каждому видеокадру оператор тиснения
(emboss).
14)Получить от каждого кадра цветного видео три матрицы цветовых компонентов (R, G и B), после чего осуществить бинаризацию каждой матрицы по отдельности и совмещая их в единый кадр, сформировать выходное видео из таких кадров.
15)Осуществить гамма-коррекцию кадров видео, плавно изменяя параметр gamma от 0.33 в начале видео до 3 к концу видео.
16)Осуществить бинаризацию кадров видео, плавно изменяя параметр бинаризации от 0 в начале видео до 1 к концу видео.
17)Применить к каждому кадру видео функцию histeq(I,h) из библиотеки Matlab, плавно изменяя параметр h от кадра к кадру: в начале видео установить h=256, в конце h=2.
18)Получить от каждого кадра цветного видео три матрицы цветовых компонентов (R, G и B), после чего каждую секунду осуществлять циклическую замену матриц R→G→B→R, формируя кадры с искаженными цветами.
19)Применить к каждому кадру видео функцию adapthisteq(...) из библиотеки Matlab, плавно изменяя значение параметра 'ClipLimit' от 0.01 в начале видео до 0.5 к концу видео.
20)Получить от каждого видеокадра двумерный фазовый спектр и сформировать выходное видео из кадров, где каждый кадр восстановлен из комбинации его фазового спектра и амплитудного спектра в виде константы.
21)Взять черно-белое видео (или самостоятельно получить его, убрав цвет из исходного) и раскрасить каждый кадр псевдоцветом.
22)Написать программу, которая будет моделировать результат передачи видео по нестабильному каналу связи: добавить “снег” заметной интенсивности и рандомное “выбивание” отдельных групп строк их циклическим сдвигом по горизонтали.
23)Наложить логотип ГУАП, полученный оператором тиснения исходного логотипа на каждый видеокадр, используя технологию смешивания (blending), реализовав “водяной знак”.
24)Применить к каждому кадру видео пространственную сглаживающую фильтрацию с переменным параметром: чтобы в центре сглаживания не было вовсе, а чем дальше от центра, тем сильнее было бы создаваемое размытие (можно использовать подход, примененный [11]).
9
© Жаринов О.О. Учебно-методические материалы к выполнению контрольной работы заочников по дисциплине “Мультимедиа-технологии”, гр.Z9411. ГУАП, 2024. – 11 с.
Порядок выполнения работы
1.Согласовать с преподавателем вариант задания, удостовериться в правильном понимании задания и критериев его оценки.
2.Написать MATLAB-программу, которая реализует метод обработки статического изображения, чтобы убедиться в корректности работы метода (для некоторых вариантов этот этап, очевидно, не является необходимым).
3.Встроить отлаженный метод обработки в шаблон покадровой обработки видео (см. листинг 1). Обработать реальный видеофайл при помощи написанной программы. Задокументировать полученные результаты. Продемонстрировать преподавателю и/или разместить в облачном хранилище исходный файл видео и результат обработки.
Содержание отчета
1.Цель работы.
2.Краткие теоретические сведения о задачах обработки видео.
3.Формулировка задания на выполнение контрольной работы.
4.Описание видеофайлов и изображений, используемых при выполнении контрольной работы.
5.Программа с необходимыми комментариями (назначение констант и переменных, функций, и т.п.).
6.Изображения скриншотов исходного и полученного видео, подтверждающие корректность решения поставленной задачи.
7.Выводы, в которых отражены особенности изученных методов и свойства полученных результатов.
8.Список используемых источников, желательно не только из списка рекомендуемой литературы, приветствуется использование Интернетресурсов; на все источники в тексте отчета должны быть ссылки.
Рекомендуемая литература
1.Работа с видео в Matlab. 2010. // URL: https://habr.com/ru/post/97145/
2.MathWorks. Help Center: VideoReader. Create object to read video files. // URL: https://www.mathworks.com/help/matlab/ref/videoreader.html
3.Обработка изображений в системе MATLAB. / сост. Батура В.А., Тропченко А.Ю., Тропченко А.А. СПб: Университет ИТМО, 2019. 41 с.
4.Дьяконов В. MATLAB 8.0 (R2012b): создание, обработка и фильтрация сигналов, Signal Processing Toolbox. // Компоненты и технологии, 2013. №11, с. 151-161.
10
© Жаринов О.О. Учебно-методические материалы к выполнению контрольной работы заочников по дисциплине “Мультимедиа-технологии”, гр.Z9411. ГУАП, 2024. – 11 с.