Вход

Алгоритмы 4SS и HBMA

Рекомендуемая категория для самостоятельной подготовки:
Курсовая работа*
Код 100619
Дата создания 2016
Страниц 22
Источников 9
Мы сможем обработать ваш заказ (!) 1 апреля в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
2 030руб.
КУПИТЬ

Содержание

Оглавление
Введение 2
1. Основные принципы и модели представления мультимедийной информации 3
1.1. Общие принципы представления видеоинформации 3
1.2. Общее описание блочных алгоритмов 5
1.3. Методы шаблонного поиска 8
1.4. Описание иерархических алгоритмов поиска 11
2. Программная реализация алгоритмов оценки движения 14
2.1. Описание основных функций программы 14
2.2. Результаты работы программы 15
Заключение 20
Литература 21
Приложение 22

Фрагмент работы для ознакомления

m%Вычисление средней максимальной ошибкиfunction cost = costFuncMAD(currentBlk,refBlk, n)err=norm(currentBlk-refBlk,1);cost = err / (n*n)alg_4SS.m%Расчет векторов движения четырехшаговым методом поиска% Исходные данные% imgP :Изображение,смещенное относительно исходного. Его вектор% движения необходимо найти.% imgI : Исходное изображение% mbSize : размер блока% costFunc : функция стоимости% Выходные данные:% motionVect : массив векторов движения для каждого блока imagP% SS4computations: Число точек,участвующее в поиске для макроблокаfunction [motionVect, SS4Computations] = alg_4SS(imgP, imgI, mbSize, costFunc)[rowcol] = size(imgI(:,:,1)); %Вычисляем размер изображенияvectors = zeros(2,floor(row*col/mbSize^2)); %Векторадвиженияcosts = ones(3, 3) * 65537; %Маска стоимостей для векторов движения%Начинаем поиск из левого верхнего угла изображения%Шаг цикла будет определяться размером блока. Для каждого блока исследуем%окрестность%Число итерацийcomputations = 0;%ЧислоблоковmbCount = 1;fori = 1 : mbSize : row-mbSize+1for j = 1 : mbSize : col-mbSize+1 %Координаты (х,y), выбранные с учетом растра x = j;y = i; %Рассчитываем функцию стоимости в случае центрального элемента для %исходных блоков исходного и смещенного изображенийcosts(2,2) = costFunc(imgP(i:i+mbSize-1,j:j+mbSize-1), ...imgI(i:i+mbSize-1,j:j+mbSize-1),mbSize);computations = computations + 1; %Наращиваем счетчик %Вычисление для всех 9 точек блокаform = -2 : 2 : 2 forn = -2 : 2 : 2 %Вычисляем направление поиска. Длина вектора поиска по %горизонтали и вертикали равна 2refBlkVer = y + m; % Координата по вертикалиrefBlkHor = x + n; % Координата по горизонтали %Контроль выхода вектора поиска за границы изображенияif ( refBlkVer < 1 || refBlkVer+mbSize-1 > row ... || refBlkHor < 1 || refBlkHor+mbSize-1 > col)continue; %Еслионесть, "пробрасываем" вычисленияend %Вычисление позиции элемента маски, с короторо будет %считаться стоимость для нового блокаcostRow = m/2 + 2;costCol = n/2 + 2; %Если приходим в центр орятьif (costRow == 2 && costCol == 2)continue %"Проброс" циклаend %Отбираем блок исходного изображения, начинающийся с %координаты (refBlkVer,refBlkHor) самого растра. Функция %стоимости в сравнении с исходным блоком и будет элементом%маскиcosts(costRow, costCol)costs(costRow, costCol ) = costFunc(imgP(i:i+mbSize-1,j:j+mbSize-1), ...imgI(refBlkVer:refBlkVer+mbSize-1, refBlkHor:refBlkHor+mbSize-1), mbSize);computations = computations + 1;endend % Поиск наименьшего значения стоимости в пределах маски [dx, dy, cost] = minCost(costs); %%Если минимум обнаружен в центре if (dx == 2 && dy == 2)flag_4ss = 1; %Задаем признак, равный единицеelse %Иначе flag_4ss = 0; %Обнуляем признак %Запоминаем координаты текущие (x,y)xLast = x;yLast = y; %Меняем направление поиска по диагоналиx = x + (dx-2)*2;y = y + (dy-2)*2;end %Задаем маску стоимостейcosts = ones(3,3) * 65537; %Центральный элемент определяем как минимальныйcosts(2,2) = cost;stage = 1; %Следующий шаг %Если точка не в центре while (flag_4ss == 0 && stage <=2)form = -2 : 2 : 2 forn = -2 : 2 : 2refBlkVer = y + m; % Координата по вертикалиrefBlkHor = x + n; % Координата по горизонтали %Контроль выхода вектора поиска за границы изображенияif ( refBlkVer < 1 || refBlkVer+mbSize-1 > row ... || refBlkHor < 1 || refBlkHor+mbSize-1 > col)continue; %Еслионесть, "пробрасываем" вычисленияend %Также просматриваем условие попадания вектора в предыдущую область поиска. Если это происходит if (refBlkHor >= xLast - 2 && refBlkHor <= xLast + 2 ... && refBlkVer >= yLast - 2 && refBlkVer <= yLast + 2 )continue; %Также "пробрасываем" вычисленияend %Вычисление позиции элемента маски, с короторо будет %считаться стоимость для нового блока costRow = m/2 + 2;costCol = n/2 + 2; %Если позиция в центре маскиif (costRow == 2 && costCol == 2)continue %Ничегонепроисходитend%Отбираем блок исходного изображения, начинающийся с %координаты (refBlkVer,refBlkHor) самого растра. Функция %стоимости в сравнении с исходным блоком и будет элементом%маскиcosts(costRow, costCol) costs(costRow, costCol ) = costFunc(imgP(i:i+mbSize-1,j:j+mbSize-1), ...imgI(refBlkVer:refBlkVer+mbSize-1, ...refBlkHor:refBlkHor+mbSize-1), mbSize);computations = computations + 1; %Наращиваемсчетчикendend% Поиск наименьшего значения стоимости в пределах маски [dx, dy, cost] = minCost(costs);%Если минимум стоимости находится в центреif (dx == 2 && dy == 2)flag_4ss = 1; %Признак равен 1 else %Иначе flag_4ss = 0; %Обнуляем признак %Запоминаем текущие координаты(x,y)xLast = x;yLast = y; %Вновь смещаемся от координат на новую позициюx = x + (dx-2)*2;y = y + (dy-2)*2;end%Обновляем маску стоимостейcosts = ones(3,3) * 65537; %В центр помещаем минимум стоимостиcosts(2,2) = cost; %Переход на следующий этапstage = stage + 1;end % Конец циклаrefBlkVer = y + m; % Координата по вертикалиrefBlkHor = x + n; % Координата по горизонталиform = -1 : 1 : 1 forn = -1 : 1 : 1refBlkVer = y + m; % Координата по вертикалиrefBlkHor = x + n; % Координата по горизонтали %Контроль выхода за границы картинкиif ( refBlkVer < 1 || refBlkVer+mbSize-1 > row ... || refBlkHor < 1 || refBlkHor+mbSize-1 > col)continue;end %Расчет координат новой позицииcostRow = m + 2;costCol = n + 2; %Если позиция находится в центреif (costRow == 2 && costCol == 2)continue; %Ничегонеделаетсяend %Отбираем блок исходного изображения, начинающийся с %координаты (refBlkVer,refBlkHor) самого растра. Функция %стоимости в сравнении с исходным блоком и будет элементом%маскиcosts(costRow, costCol)costs(costRow, costCol ) = costFunc(imgP(i:i+mbSize-1,j:j+mbSize-1), ...imgI(refBlkVer:refBlkVer+mbSize-1, refBlkHor:refBlkHor+mbSize-1), mbSize);computations = computations + 1;endend % Переход к определению координат вектора движения %Поиск минимальной стоимости по маске [dx, dy, cost] = minCost(costs); %Расчет конечных параметровx = x + dx - 2;y = y + dy - 2; %Координаты вектора движения блока mbCountvectors(1,mbCount) = y - i; % координата по строкеvectors(2,mbCount) = x - j; % координата по столбцуmbCount = mbCount + 1; %Определение маски стоимостиcosts = ones(3,3) * 65537; end %Конец цикла по столбцам растраend %Конец цикла по строкам растра%Итоговый вектор движения motionVect = vectors;%Среднее число операций на блокSS4Computations = computations/(mbCount - 1);alg_hbma.m%Img_Height,Img_Width:%Высота и ширина изображения%Размеры макроблока по ширине и высоте% BlockSize: % размерностьблокаBlockSize(1)*BlockSize(2)%rangs,range: % Область поиска в изображении от (rangs(1),rangs(2)) до (range(1),range(2))% Конечное изображение% Target_Img,% Исходное изображение% Anchor_Img% Координаты вектора движения%ox,oy,px,pyfunction [ox,oy,px,py]=HBMA(Target_Img,Anchor_Img,Img_Height,Img_Width,BlockSize,rangs,range)L=3; %Число уровней поиска%Число итераций поискаc_MB_search=0;%Преобразование в данные двойной точностиTarget_Img=double(Target_Img);Anchor_Img=double(Anchor_Img);m=1; %Переменная-индекс поля векторов%Множитель с учетом числа уровнейFactor=2.^(L-1);TargetDown=zeros(3,Img_Height,Img_Width);TargetDown1=Target_Img;AnchorDown1=Anchor_Img;%Прореженная в 2 раза копия исходного изображения Width2=length(1:2:Img_Width);Height2=length(1:2:Img_Height);AnchorDown2(1:Height2,1:Width2)=Anchor_Img(1:2:Img_Height,1:2:Img_Width);%Прореженная в 2 раза копия конечного изображения TargetDown2(1:Height2,1:Width2)=Target_Img(1:2:Img_Height,1:2:Img_Width);%Прореженная в 4 раза копия исходного изображения Width4=length(1:2:floor(Img_Width/2));Height4=length(2:2:floor(Img_Height/2));AnchorDown3(1:Height4,1:Width4)=AnchorDown2(2:2:floor(Img_Height/2),1:2:floor(Img_Width/2));%Прореженная в 4 раза копия конечного изображения TargetDown3(1:Height4,1:Width4)=TargetDown2(2:2:floor(Img_Height/2),1:2:floor(Img_Width/2));%Преобразование диапазона поиска с учетом многоуровневости%Начальные границы диапазонаrangs(1)=rangs(1)/Factor;range(1)=range(1)/Factor;%Конечные границы диапазонаrangs(2)=rangs(2)/Factor;range(2)=range(2)/Factor;%ПересчетвысотыишириныImg_Height=Img_Height/Factor;Img_Width=Img_Width/Factor;%Поиск для всех блоков в исходном изображении на первом уровне%Циклповысотеfori=1:BlockSize(1):Img_Height-BlockSize(1)+1%Расчет начального значения %Расчет начальной и конечной первой координатной компоненты области%поискаRangeStart(1)=i+rangs(1); RangeEnd(1)=i+BlockSize(1)-1+range(1);%Контроль границ %Если значение нулевое или отрицательноеifRangeStart(1)<1RangeStart(1)=1; %Выставляемединицуend%Если выход за предел по высотеifRangeEnd(1)>Img_HeightRangeEnd(1)=Img_Height; %Устанавливаем конечное значениеend%Циклпоширинеfor j=1:BlockSize(2):Img_Width-BlockSize(2)+1%Расчет начальной и конечной второй координатной компоненты областиRangeStart(2)=j+rangs(2);RangeEnd(2)=j+BlockSize(2)-1+range(2);%Контроль границ %Если значение нулевое или отрицательноеifRangeStart(2)<1RangeStart(2)=1;%Выставляемединицуend%Если выход за предел по ширинеifRangeEnd(2)>Img_WidthRangeEnd(2)=Img_Width;%Устанавливаем конечное значениеend %Блоки третьего уровняtmpt(:,:)=TargetDown3(:,:);%Конечныйtmpa(:,:)=AnchorDown3(:,:);%Исходный %Ищем координаты вектора движения (px,py) для изображений tmpt,tmpa %Принимаем начальное положение блока поиска как RangeStart и RangeEnd %Координаты левого верхнего угла блока [i,j] размеров BlockSize %Выполняем поиск методом полного перебора EBMА[px(m), py(m),MB_search]=EBMA(tmpt,tmpa,BlockSize,[i,j],RangeStart,RangeEnd);c_MB_search=MB_search+c_MB_search; %Пересчет числа операций с учетом поиска %Координаты в привязке вектора движения к плоскости рисунка. Будут %нужны для построения векторного поляox(m)=j;oy(m)=i; m=m+1; %Инкремент счетчикаendend%Общий цикл по числу уровней от предпоследнего до первого. Идея состоит в%том, что по данным векторов движения предыдущего уровня мы можем%организовать поиск векторов движения на текущем уровне. Координаты%векторов предыдущего уровня фактически позволяют вычилить параметры%области поиска текущего уровня. На каждом уровне переходим к изображению с%все большим уровнем детализации вплоть до исходногоforii=L-1:-1:1 %Обновляем параметры для текущего уровня %Масштабируем векторы движения, найденные на третьем уровнеpx=px*2;py=py*2; %Масштабирование размеровImg_Width=Img_Width*2;Img_Height=Img_Height*2;%Вычислениепеременнойline_width=floor(Img_Width/BlockSize(2)); ttt=size(py); %Размерpy m=1;%Поиск по блокам исходного изображения на i-м уровнеfori=1:BlockSize(1):Img_Height-BlockSize(1)+1%Вычислениепеременной baselinebaseline=double(uint32(i/2/BlockSize(1)))*double(line_width);%Циклпокоординатешириныизображенияfor j=1:BlockSize(2):Img_Width-BlockSize(2)+1%Вычисление параметров области поиска с учетом переменной baselinemindx=floor(baseline+double(uint32(j/2/BlockSize(2)))+1);%Контрольграницдиапазонаifmindx>ttt(2)mindx=ttt(2);end %Пересчет положения области поиска на i-м уровне %Расчет начальных координат области поискаRangeStart(1)=i+py(mindx)+rangs(1);RangeEnd(1)=i+py(mindx)+BlockSize(1)-1+range(1);%Контроль границ%Если значение нулевое или отрицательноеifRangeStart(1)<1RangeStart(1)=1; %Выставляемединицуend%Если выход за предел по высотеifRangeEnd(1)>Img_HeightRangeEnd(1)=Img_Height; %Устанавливаем конечное значениеend %Пересчет конечных координат области поискаRangeStart(2)=j+px(mindx)+rangs(2);RangeEnd(2)=j+px(mindx)+BlockSize(2)-1+range(2); %Если значение нулевое или отрицательноеifRangeStart(2)<1RangeStart(2)=1;%Выставляем единицуend %Если выход за предел по ширинеifRangeEnd(2)>Img_WidthRangeEnd(2)=Img_Width;%Устанавливаем конечное значениеend %Если находимся на втором уровне иерархииifii==2 %Как исходные данные для поиска рассматриваем уменьшенное в 2%разаизображениеtmpt=TargetDown2(:,:);tmpa=AnchorDown2(:,:);end%Если находимся на первом уровне иерархииifii==1 %Рассматриваем полные изображенияtmpt=TargetDown1(:,:);tmpa=AnchorDown1(:,:);end %Вычисление вектора движения для %Ищем координаты вектора движения (pxx,pyy) для изображений tmpt,tmpa %Принимаем начальное положение блока поиска как RangeStart и RangeEnd %Координаты левого верхнего угла блока [i,j] размеров BlockSize %Выполняем поиск методом полного перебора EBMА[pxx(m), pyy(m),MB_search]=EBMA(tmpt,tmpa,BlockSize,[i,j],RangeStart,RangeEnd);c_MB_search=MB_search+c_MB_search; %Пересчетчислаоперацийox(m)=j;oy(m)=i;m=m+1;endend %Выход из двойного цикла по блокам %Переприсваиваем вектора движения для последующего расчета на более %высоком уровнеpx=pxx;py=pyy; end

Список литературы [ всего 9]

Литература
1. Гришин С.В., Ватолин Д.С., Лукин А.С., Путилин С.Ю., Стрельников К.Н. Обзор блочных методов оценки движения в цифровых видео сигналах // Программные системы и инструменты. Тематический сборник № 9. М.: Изд-во факультета ВМиК МГУ. 2008. С. 50-62.
2. Рабинович А.В. Алгоритмы оценки движения для систем сжатия ТВ изображений / А.В. Рабинович // Информсвязь № 2241. – 2004. – С. 26 – 34.
3. Рабинович А.В. Критерии оценки движения для алгоритмов сжатия изображений / А.В. Рабинович // Информсвязь № 2241. – 2004. – С. 35 – 41.
4. Поляков А.Н. Сжатие видеопоследовательностей с использованием дискретного вейвлет-преобразования для компенсации движения / А.Н. Поляков // Труды Одесского политехнического университета. – 2004, № 1 (21).
5. Прэтт У. Цифровая обработка изображений: Пер. с англ. – М.: Мир, 1982. – Кн. 2 – 480 с.
6. Bradshaw K., Reid I. and D. Murray The Active Recovery of 3D Motion Trajectories and Their Use in Prediction // IEEE Transactions on Pattern Analysis and Machine Intelligence. – 1999. – 19(3). – Р. 219-234.
7. Ян Ричардсон. Видеокодирование. Н.264 в MPEG-4 - стандарты нового поколения Москва: Техносфера, 2005. - 368 с.
8. Watson A.B., Eckert M.P. Motion-Contrast Sensitivity: Visibility of Motion Gradients of Various Spatial Frequencies // Journal of the Optical Society of America. – 1994. – 11(2). – Р. 496-505.
9. Arnaldo Camara Lara, Roberto Hirata Jr. A morphological gradient-based method to motion segmentation // Proc. 8th International Symposium on Mathematical Morphology. – Rio de Janeiro (Brazil). – 2007. – MCT/INPE. – Vol. 2. – P. 71-72.
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.0055
© Рефератбанк, 2002 - 2024