МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего образования «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ» КАФЕДРА № 23 КУРСОВАЯ РАБОТА ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ ПРЕПОДАВАТЕЛЬ доцент, канд. техн. наук должность, уч. степень, звание Е.М. Анодина-Андриевская подпись, дата инициалы, фамилия КУРСОВАЯ РАБОТА ВЕЙВЛЕТНОЕ СЖАТИЕ ИНФОРМАЦИИ В СИСТЕМЕ MATLAB по дисциплине: КОМПЬЮТЕРНЫЕ ТЕХНОЛОГИИ КОНСТРУИРОВАНИЯ И ПРОИЗВОДСТВА РАБОТУ ВЫПОЛНИЛИ Н.А. Сапунов М.А. Кудрявцев СТУДЕНТЫ ГР. № А.Ю. Малышев 2833 подпись, дата Санкт-Петербург 2019 инициалы, фамилия СОДЕРЖАНИЕ ВВЕДЕНИЕ ................................................................................................... 2 1 Суть метода ................................................................................................ 4 2 Вейвлеты в системе MATLAB ................................................................. 6 2.1 Вейвлеты пакета wavelet toolbox ........................................................... 6 2.2 Различные примеры функций вейвлет-анализа в MATLAB ............ 10 ЗАКЛЮЧЕНИЕ ........................................................................................... 28 СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ....................................... 29 2 ВВЕДЕНИЕ Развитие Интернета, рост производительности компьютеров и прогресс в технологии производства цифровых камер, сканеров и принтеров привели к широкому использованию цифровой графической информации (изображений). Требования к качеству изображений и их размеру (объему памяти, который они занимают) постоянно растут. Размер графических данных файла пропорционален количеству пикселей в изображении и количеству битов, требуемых для представления каждого пикселя. Сжатие графических данных важно как для скорости их передачи, так и для эффективности их хранения. Для этого необходимо постоянно совершенствовать методы сжатия графических данных, представляющих изображения. В данной работе будет рассматриваться исключительно вейвлетный метод сжатия изображений. Вейвлетное сжатие — общее название класса методов кодирования изображений, использующих двумерное вейвлет-разложение кодируемого изображения или его частей. Обычно подразумевается сжатие с потерей качества. Существенную роль в алгоритмах вейвлетной компрессии играет концепция представления результатов вейвлет-разложения в виде нульдерева (zero-tree). Упорядоченные в нуль-дереве битовые плоскости коэффициентов вейвлет-разложения огрубляются и кодируются далее с использованием статистических методов сжатия. Вейвлетная компрессия в современных алгоритмах компрессии изображений позволяет значительно (до двух раз) повысить степень сжатия чёрно-белых и цветных изображений при сравнимом визуальном качестве по отношению к алгоритмам предыдущего поколения, основанным дискретном косинусном преобразовании, таких, например, как JPEG.[3] 3 на 1 Суть метода Вейвлетная компрессия в современных алгоритмах компрессии изображений позволяет значительно (до двух раз). повысить степень сжатия чёрно-белых и цветных изображений при сравнимом визуальном качестве по отношению к алгоритмам предыдущего поколения, основанным на дискретном косинусном преобразовании, таких, например, как JPEG. Для работы с дискретными изображениями используется вариант вейвлет-преобразования, известный как алгоритм Малла, названный в честь его изобретателя Стефана Малла́. Исходное изображение раскладывается на две составляющие — высокочастотные детали (состоящие в основном из резких перепадов яркости), и сглаженную уменьшенную версию оригинала. Это достигается применением пары фильтров, причём каждая из полученных составляющих вдвое меньше исходного изображения. Как правило, используются фильтры с конечным импульсным откликом, в которых пикселы, попавшие в небольшое «окно», умножаются на заданный набор коэффициентов, полученные значения суммируются, и окно сдвигается для расчёта следующего значения на выходе. Между вейвлетами и фильтрами есть тесная связь. Вейвлеты непосредственно не фигурируют в алгоритмах, но если итерировать соответствующие фильтры на изображениях, состоящих из единственной яркой точки, то на выходе будут все отчётливей проступать вейвлеты. Поскольку изображения двумерны, фильтрация производится и по вертикали, и по горизонтали. Этот процесс повторяется многократно, причём каждый раз в качестве входа используется сглаженная версия с предыдущего шага. Так как изображения «деталей» состоят обычно из набора резких границ и содержат обширные участки, где интенсивность близка к нулю. Если допустимо пренебречь некоторым количеством мелких деталей, то все эти значения можно просто обнулить. В результате получается версия 4 исходного изображения, хорошо поддающаяся сжатию. Для восстановления оригинала снова применяется алгоритм Малла, но с парой фильтров, обратной к исходным. Алгоритм JPEG, в отличие от вейвлетного, сжимает по отдельности каждый блок исходного изображения размером 8 на 8 пикселов. В результате при высоких степенях сжатия на восстановленном изображении может быть заметна блочная структура. При вейвлетном сжатии такой проблемы не возникает, но могут появляться искажения другого типа, имеющие вид «призрачной» ряби вблизи резких границ. Считается, что такие артефакты в среднем меньше бросаются в глаза наблюдателю, чем «квадратики», создаваемые JPEG. Федеральное бюро расследований (ФБР), США, ввело стандарт на вейвлетное сжатие изображений отпечатков пальцев. Впрочем, свобода выбора фильтров может оказаться очень полезной в задаче сжатия: алгоритмы, основанные на принципе «наилучшего базиса», подбирают оптимальный фильтр для отдельных участков изображения, а алгоритмы, использующие вейвлет-пакеты, достигают эффективного представления деталей, варьируя глубину фильтрации на разных участках.[1] 5 2 Вейвлеты в системе MATLAB 2.1 Вейвлеты пакета wavelet toolbox В пакете wavelet toolbox принята классификация вейвлетов – по виду образующей функции (t ) и по фамилии ученого, предложившего вейвлет. Ниже приводится список семейств вейвлетов пакета и их краткие базовые имена при использовании в командах и аргументах функций: − 'haar' – Хаара; − db' – Добеши; − 'sym' – Симлета; − 'coif' – Коифлетса; − 'bior' – биортогональный; − 'rbio' – обратный биортогональный; − 'meyr' – Мейера; − 'dmey' – дискретный Мейера; − 'gaus' – Гаусса; − 'mexh' – мексиканская шляпа; − 'morl' – Морлета; − 'cgau' – комплексный Гаусса; − 'shan' – Шеннона; − 'fbsp' – частотный В-сплайновый; − 'cmor' – комплексный Морлета; Семейства вейвлетов, как правило, имеет несколько типов (размера/порядка), которые указываются добавлением к базовому имени определенного числа (чисел), например:db1, 'gaus3', 'bior2.6', 'fbsp2-1-0.5'. Команды вызова информации по вейвлетам: 1) wavemngr('read') – названия и краткие базовые имена, 2) wavemngr('read',1) – полный перечень всех семейств и их состава, 3) waveinfo('семейство') – полная информация о вейвлетах семейства. Пример использования функции - waveinfo('gaus') для преобразования 6 изображений. Команда (функция) wavemngr позволяет добавлять (с параметром 'add'), удалять, сохранять и считывать новые (собственные) вейвлеты. Форматы команды: − wavemngr(['add',]FN,FSN,WT,NUMS,FILE[,B]), − wavemngr(['add',]FN,FSN,WT,{NUMS,TYPNUMS},FILE[,B]), где FN – название семейства, FSN – короткое имя семейства, WT – тип вейвлета, NUMS – список параметров вейвлета (разделяются пробелами, конечный с двумя звездочками **), TYPNUMS – формат входного значения ('integer', 'real' или 'string'), FILE – имя mat или m-файла, B – вектор нижней и верхней границы эффективной поддержки вейвлетов (квадратные скобки в перечнях параметров команд указывают на возможность отсутствия или на необязательность данных параметров). Значения параметра WT могут быть следующие: WT=1 для ортогонального вейвлета, WT=2 для биортогонального, WT=3 для вейвлета с масштабирующей функцией, WT-4 без масштабирующей функции, WT=5 для комплексного вейвлета без масштабирующей функции. После добавления семейства в пакет он включается в список информационных команд. Пример задания функции считывания вейвлет: wavemngr('add','Mainwave','mnw',1,'1 2 3','mainw1') Вейвлетная функция wavefun возвращает значения детализирующей psi-функции (x) и связанной с ней масштабирующей phi-функции (x) (функции аппроксимации), если последняя существует. Полный формат (для биортогональных вейвлетов) на сетке X : [Phi1,Psi1,Phi2,Psi2,X]=wavefun('wname',ITER). Количество точек сетки X равно 2ITER. Phi1,Psi1 – векторы функций 7 (x ) и (x) разложения (декомпозиции) сигналов (в однострочных массивах), Phi2,Psi2 – векторы функций (x ) и (x) восстановления (реконструкции) сигналов. Для ортогональных вейвлетов выходные массивы Phi2 и Psi2 не задаются. Для вейвлетов без масштабирующих функций не задается также массив Phi1. Если массив Х значений оси 'х' не нужен, он также может не задаваться. При расчетах аналитически задаваемых вейвлетов (типа 'gaus') параметр ITER определяет размер сетки X 2 ITER и, соответственно, интервал дискретизации вейвлета с учетом конечности его задания.[2] Пример просмотра процесса итерации вейвлета 'sym2': iter=10; % счетчик итераций wav='db2'; %добавление вейвлета db2 for i=1: iter % запуск счетчика интеграций [phi,psi,x]=wavefun(wav,i); % возвращает значения детализирующей psiфункции (x) и связанной с ней масштабирующей phi-функции (x) (функции аппроксимации), если последняя существует. plot(x,psi); % построение графиков процесса итерации вейвлета 'sym2' hold on end; hold off 8 Рисунок 2.1 – Графики процесса итерации вейвлета 'sym2' Примечание: Текст программы можно копировать и подставлять непосредственно в командную строку MATLAB после знака ввода '>>'. Средняя частота вейвлета определяет положение максимума пика его Фурье-образа на оси частот (в герцах). Формат функции: - Q=centfrq('wname'[,ITER]), где ITER – количество итераций, если вейвлет 'wname' не задан аналитической функцией и вычисляется методом итераций. Пример определения средней частоты и построения сравнительных графиков вейвлета db2 и гармоники с частотой, равной средней частоте вейвлета, приведен на рисунке 2.2. 9 >> f=centfrq('db2',16,'plot'); grid % определение положения максимума пика Фурье-образа на оси частот F=0.6667 Рисунок 2.2 – Сравнительный график вейвлета db2 и гармоники с частотой, равной средней частоте вейвлета 2.2 Различные примеры функций вейвлет-анализа в MATLAB. Функция intwave – первообразная вейвлет-функции . Вычисляет первообразную функции вейвлета ‘wname’ от до переменной точки x . [integ,X]=intwave(‘wname’,N), [integ,X]=intwave(‘wname’). 10 как интеграл функции Значения параметров: N – количество итераций(по умолчанию N 8 ); X – массив значений переменной x . Он состоит из точек, равномерно 1 N расположенных на носителе вейвлета с шагом 2 . Если носитель имеет N длину S , то длина массива X равна S 2 1 точка сетки X , т.е. концевые точки носителя включаются; integ – значения первообразной функции в N точках x X . Функция аппроксимируется на S 2 1 точках сетки X . Выходной массив integ является действительным или комплексным в зависимости от типа вейвлета. Для биортогональных вейвлетов функция [intdec,x,intrec]= =intwave(‘wname’,N) вычисляет интегралы intdec и intrec вейвлетфункций разложения ~ и восстановления (x) . Выражение [integ,X]=intwave(‘wname’) эквивалентно [integ,X]= intwave(‘wname’,8). [2] Пример 1. Для нахождения первообразной вейвлет-функции Добеши db4 запускаем программу MATLAB. После чего перед нами появляется главное меню программы MATLAB, показанный на рисунке 2.3. Рисунок 2.3 – Главное меню программы MATLAB 11 Далее в командной строке вводим следующий алгоритм для нахождения первообразной данной вейвлет-функции: [phi,psi,xval]=wavefun('db4',7); % синтезирование ортогональной вейвлеты subplot(211);plot(xval,psi);title('Wavelet'); % создание графика [integ,xval]=intwave('db4',7); % вычисление и возвращение интеграл integral вейвлет-функции (её первообразную), заданной переменной wname, а также временной сетки х данной первообразной subplot(212);plot(xval,integ); % создание графика title(['Wavelet integrals over [-Inf x] for each value of xval']); После того как ввод алгоритма закончен, нажимая на клавишу Enter мы вызываем графическое решение примера. Появляться окно с двумя графиками, показанные на рисунке 2.4. Первый график – это график самой вейвлет-функции Добеши, а второй – график первообразной этой функции. 12 Рисунок 2.4 – График вейвлет-функции Добеши и его первообразной Одноуровневое дискретное одномерное вейвлет-преобразование dwt. В одноуровневом дискретном одномерном вейвлет-преобразовании используются следующие функции: − dwt – одноуровневое дискретное одномерное вейвлет- преобразование; − idwt – обратное одноуровневое дискретное одномерное вейвлетпреобразование; − dwtmode – мода расширения дискретного вейвлет-преобразования. Дискретное вейвлет-преобразование. функция вычисляет аппроксимирующие коэффициенты cA и детализирующие коэффициенты cD первого уровня вейвлет-преобразования сигнала, заданного вектором s . Коэффициенты получаются сверткой сигнала s с фильтром разложения 13 нижних частот Lo_D для аппроксимации с фильтром разложения нижних частот Hi_D для детализации, а затем сопровождаются двоичной децимацией. Команда dwt употребляются в следующих формах: [cA,cD]=dwt(s,’wname’),[cA,cD]=dwt(s,’wname’,’mode’,MODE), Функция [cA,cD]=dwt(s,’wname’) вычисляет аппроксимирующие коэффициенты cA и детализирующие коэффициенты cD вектора s. Строка wname – имя вейвлета, для которого возможны быстрые алгоритмы. Это – haar, db, sym, coif, bior, rbio, dmey. Функия [cA,cD]=dwt(s,Lo_D,Hi_D) находит вейвлет разложение, как выше, используя вместо имени вейвлета его низкочастотный фильтр разложения Lo_D и высокочастотный фильтр разложения Hi_D. Параметр MODE определяет метод расширения данных для вейвлетразложения. Например, [cA,cD]=dwt(s,’db2’,’mode’’sym’). [2] Пример 2. Зададим сигнал s . Найдем его разложение, используя вейвлет Хаара, затем – Добеши db4 . n=1:20;s=sin(0.5*n); % задание параметров сигнала [cal,cd1]=dwt(s,'haar'); вычисление % аппроксимирующего коэффициенты cal и детализирующего коэффициента cd 1 вектора s. subplot(311);plot(s);title('Original signal'); % построение графика 'Original signal' subplot(323);plot(cal);title('Approx. coef. for haar'); % построение графика 'Approx. coef. for haar' subplot(324);plot(cd1);title('Detail coef. for haar'); % построение графика 'Detail coef. for haar' [ca2,cd2]=dwt(s,'db4'); вычисление % аппроксимирующего коэффициенты ca2 и детализирующего коэффициента cd 2 вектора s. subplot(325);plot(ca2);title('Approx. coef. for db2'); % построение графика 14 'Approx. coef. for db2' subplot(326);plot(cd2);title('Detail coef. for db2'); % построение графика 'Detail coef. for db2' Ниже на рис. 2.5 приведено графическое решение. Рисунок 2.5 – Разложение исходного сигнала используя вейвлеты Хаара и Добеши Непрерывное вейвлет-преобразование cwt. Команда cwt вычисляет вейвлет-коэффициенты одномерного сигнала, используя непрерывное вейвлет-преобразование. Пусть s – сигнал и – вейвлет. При непрерывном преобразовании вейвлет коэффициенты сигнала s, 15 соответствующие масштабному коэффициенту a и положению b , определяются формулой: C a ,b W [ f ]( a, b) t b s (t ) dt . a a 1 (2.1) Если сигнал s (t ) является дискретным, заданным выборкой значений sk , то в качестве s (t ) можно взять кусочно-постоянную функцию, определенную следующим образом: s(t ) s(kt ) sk , при t [kt , (k 1)t ) . Параметр b пробегает значения с шагом t , соответствующие длине сигнала s , т.е. b 1 : ls , ls length( s) . Полагаем, что значения масштабного параметра a также дискретны и составляют вектор, который далее обозначается SCALES. Основное отличие команды cwt от дискретного многоуровневого вейвлет-преобразования wavedec заключается в том, что в cwt можно брать любые значения масштабного коэффициента a , тогда как в wavedec используются степени двойки. Для команды cwt предусмотрена возможность изображения вейвлет-коэффициентов сигнала s, графического называемое вейвлет- спектрограммой сигнала. Синтаксис cwt: COEFS=cwt(s,SCALES,’wname’). COEFS=cwt(s,SCALES,’wname’,’plot’), COEFS=cwt(s,SCAKES,’wname’,PLOIMODE), COEFS=cwt(s,SCALES,’wname’,PLOTMODE,XLIM). Функция COEFS=cwt(s,SCALES,’wname’) вычисляет вейвлет- коэффициенты вектора s , когда a принимает положительные значения из вектора SCALES, используя вейвлет ’wname’. Сигнал s вещественный, вейвлет может быть вещественным или комплексным. Для каждого значения масштабного коэффициента a в пределах 16 вектора SCALES вейвлет-коэффициенты C a ,b вычисляются для b 1 : ls и и сохраняются в виде вектора-строки COEFS(i,:), соответствующей i -му значению параметра a=SCALES(i). Результат COEFS является la на ls матрицей, где la является длиной вектора SCALES, ls length (s) . Результат COEFS является вещественной или комплексной матрицей в зависимости от типа вейвлета. Функция COEFS=cwt(s,SCALES,’wname’,’plot’) вычисляет и создает вейвлет-спектрограмму сигнала s . Функция COEFS=cwt(s,SCAKES,’wname’,PLOIMODE) вычисляет и создает вейвлет-спектрограмму сигнала s . Результат COEFS является la на ls матрицей, она изображается на плоскости в виде матрицы, состоящей из ячеек в количестве la - по вертикали и ls - по горизонтали. Каждая ячейка содержит элемент матрицы коэффициентов и окрашивается в соответствии со значением своего коэффициента. Способ окраски определятся параметром PLOIMODE, значения которого приведены ниже в таблице 3.1. Таблица 3.1 – Значения параметра PLOIMODE PLOTMODE Описание «lvl» Окраска меняется от масштаба к масштабу «glb» Окраска, сделанная, с учетом всех масштабов «abslvl» или «lvlabs» «absglb» «glbabs» То же, что и «lvl», но с использованием абсолютных значений коэффициентов или То же, что и «glb», но с использованием абсолютных значений коэффициентов По умолчанию принят вариант окраски absglb, т.е. COEFS=cwt(…,’plot’) эквивалентно COEFS=cwt(…,’absglb’). Функция COEFS=cwt(s,SCALES,’wname’,PLOTMODE,XLIM) 17 вычисляет и создает вейвлет-спектрограмму сигнала s с указанием пределов изображения XLIM=[x1 x2] по горизонтали, 1 x1 x 2 length( s) .[2] Пример 3. Варианты написания команды. t=linspace(-1,1,512);s=1-abs(t); % формирование линейного массива размера c=cwt(s,1:32,'cgau4'); % вычисление и создание вейвлет-спектрограммы сигнала s с указанием пределов изображения c=cwt(s,[64 32 16:-2:2 1.5],'morl'); % вычисление и создание вейвлетспектрограммы сигнала s с указанием пределов изображения c=cwt(s,1:64,'sym4','abslvl',[100 400]); % вычисление и создание вейвлет-спектрограммы сигнала s с указанием пределов изображения Результаты работы программы показаны на рисунке 2.6. Рисунок 2.6 – Вейвлет коэффициенты одномерного сигнала Функции в MATLAB для удаления шума. 18 Функция wden используется для автоматического удаление шума(1-D). Функция wden автоматически удаляет шум одномерного сигнала X , используя вейвлеты. Применяются в виде: [XD,CXD,LXD]=wden(X,TPTR,SOHR,SCAL,N,’wname’), [XD,CXD,LXD]=wden(C,TPTR,SOHR,SCAL,N,’wname’). Первая версия функции вычисляет очищенную от шума версию XD выходного сигнала X , используя пороговую обработку вейвлет- коэффициентов. Дополнительно находит вейвлет-коэффицинеты [CXD,LXD] разложения очищенного сигнала XD. Исходные параметры: 1) X – сигнал; 2) TPTR – строка, определяющая выбор порога: – ‘rigrsure’ – адаптивный выбор порога, используя принцип Штейна и несмещенной оценки риска (SURE); – ‘heursure’ – эвристический вариант первого выбора; – ‘qtwolog’ – универсальный порог sqrt(2*log(length(X))); – ‘minimaxi’ – мини-максный порог; 3) SOHR=’s’ или ‘h’ – выбор мягкого или жесткого; 4) SCAL – строка, которая определяет мультипликативное пороговое перемасштабирование. Если шум вне пределов [0,1] или не белый, то порог должен быть перемасштабирован с использованием оценки уровня шума. Возможны следующие варианты: – ‘one’ – без перемасштабирования, когда используется базовый метод; – ‘sln’ – для перемасштабирования порога с использованием оценки уровня шума на базе коэффициентов первого уровня; – ‘mln’ – для перемасштабирования порога с использованием оценки уровня шума, зависящей от уровня разложения; 19 5) N – уровень вейвлет-разложения и ’wname’ – имя ортогонального вейвлета. Вторая версия функции wden вычисляет очищенную от шума версию XD выходного сигнала X , но использует уже полученное вейвлет- разложение [C,L] исходного сигнала до уровня N и ортогональный вейвлет ’wname’. [2] Пример 4. Создаем зашумленный сигнал функцией wnoise. Для удаления шума используем мягкий эвристический метод SURE. Разложение x берем до уровня 5 по вейвлету sym8. snr=3;init=2055615866; [xref,x]=wnoise(3,11,snr,init); % создание зашумленного сигнала xd=wden(x,'heursure','s','one',5,'sym8'); % разложение сигнала subplot(311),plot(xref),axis([1 2048 -10 10]);title('original signal'); % построение графика 'original signal' subplot(312),plot(x),axis([1 2048 -10 10]);title('Noisy signal'); % построение графика 'Noisy signal' subplot(313),plot(xd),axis([1 2048 -10 10]);title('De-noised signal - heuristic SURE') % построение графика 'De-noised signal - heuristic SURE' Результат работы программы по удалению шумов в сигнале показан на рисунке 2.7. 20 Рисунок 2.7 – График исходного сигнала, зашумленного и обесшумленного соответственно Функция wdencmp – удаление шума и сжатие при помощи вейвлетов(1D,2-D). [XC,CXC,LXC,PRO,PRL2]= wdencmp(‘gbl’,X,’wname’,N,THR,SORH,KEEPAPP), [XC,CXC,LXC,PRO,PRL2]=wdencmp(‘lvd’,X,’wname’,N,THR,SORH), [XC,CXC,LXC,PRO,PRL2]=wdencmp(‘lvd’,C,L,’wname’,N,THR,SORH). Описание. Случай параметра ‘gbl’. Функция производит: 1) XC – очищенную от шума версию входного сигнала X (1-D или 2D); 2) [CXC,LXC] – структуру вейвлет-разложения сигнала XC; 21 3) PRO – оценку числа обнуленных коэффициентов сигнала X в процентах; 2 4) PRL2 – отношение L -норм сжатого и первоначального сигнала в процентах. PRL2=100(norm(CXC)/norm(С))2, где [C,L] – вейвлет-разложение X. Если X – одномерный сигнал и ‘wname’ – ортогональный вейвлет, то 2 2 PRL2=100 XC / X . Функция использует: − X – сигнал, или изображение; − ‘wname’ – имя вейвлета и N – уровень вейвлет разложения; − THR – значение порога; − SORH=’s’ или ‘h’ – выбор мягкого или жесткого порогового метода; − KEEPAPP=1, то коэффициенты аппроксимации не подвергаются пороговой обработке, иначе это возможно. Функция wdencmp(‘gbl’,X,’wname’,N,THR,SORH,KEEPAPP) выполняет то же самое, используя вейвлет-разложение [C,L] исходного сигнала до уровня N. В одномерном случае и опции ‘lvd’. Функция выполняет то же самое, но используя зависимые от уровня пороги, указанные в векторе THR (THR должен иметь длину N). Кроме того, коэффициенты аппроксимации сохраняются. Для двумерного случая и опции ‘lvd’. В этом случае THR должен быть матрицей 3 N , содержащей зависимые от уровня пороги в трех направлениях: по горизонтали, по диагонали и по вертикали. Отметим, что сравнительно с wden (автоматическое удаление шума), wdencmp дает больше возможностей и можно осуществить свою стратегию удаления шума. [2] Пример 5. Загружаем изображение девушки. Делаем вейвлетразложение x при n 5; w ' sym 2' . Используем wdencmp для компрессии изображения. 22 Пример программы компрессии изображения с помощью оператора wdencmp: load woman; x=X(100:200,100:200); % загрузка изображения nbc=size(map,1);n=5;w='sym2'; % вейвлет-разложение [c,l]=wavedec2(x,n,w);thr=20; % реализация процедуры двумерного многоуровневого дискретного разложения данных [xd,cxd,lxd,perf0,perfl2]=wdencmp('gbl',c,l,w,n,thr,'h',1); % компрессия изображения colormap(pink(nbc)); % установка палитры subplot(221),image(wcodemat(x,nbc)),title('Original image'); % вывод первоначального изображения subplot(222),image(wcodemat(xd,nbc)),title('De-noised image'); % вывод обработанного изображения xlab1=['2-norm rec.: ',num2str(perfl2)]; xlab2=['% - zero cfs: ',num2str(perf0),'%']; xlabel([xlab1 xlab2]); % график харакеристик обработанного изображения Оригинальное изображение и изображение после удаления шума показано на рисунке 2.8. 23 Рисунок 2.8 – Исходное изображение (слева) и изображение после удаления шума(справа) Слияние двух изображений Функция wfusimg – слияние двух изображений. Синтаксис: XFUS=wfusimg(X1,X2,WNAME,LEVEL,AFUSMETH,DFUSMEH) [XFUS,TXFUS,TX1,TX2]= wfusimg(X1,X2,WNAME,LEVEL,AFUSMETH,DFUSMETH) wfusimg(X1,X2,WNAME,LEVEL,AFUSMETH,DFUSMETH,FLAGPLO Описание. Принцип слияния изображений с использованием вейвлетов заключается в слиянии коэффициентов аппроксимации и детализации вейвлет-разложений двух оригинальных изображений. После вейлетразложения изображений выбор коэффициентов для нового изображения 24 делается из коэффициентов аппроксимации и детализации оригинальных изображений. Возможен выбор максимального, минимального, среднего, элемента первого изображения, элемента второго изображения, или случайным выбором элемента. Функция XFUS=wfusimg(X1,X2,WNAME,LEVEL,AFUSMETH,DFUSMETH) возвращает изображение XFUS, полученное слиянием двух оригинальных изображений X1 и X2. Каждый метод слияния, заданный параметрами AFUSMETH и DFUSMETH, определенным способом объединяет коэффициенты разложений X1 и X2 на уровне LEVEL и использует вейвлет WNAME. Матрицы X1 и X2 должны иметь один и тот же размер и должны быть связаны с изображениями общей цветовой картой colormap. Параметры AFUSMETH и определяет DFUSMETH метод слияния для приближений и деталей соответственно. Функция [XFUS,TXFUS,TX1,TX2]= wfusimg(X1,X2,WNAME,LEVEL,AFUSMETH,DFUSMETH) возвращает, в дополнение к матрице XFUS, три объекта класса WDECTREE, ассоциированные с XFUS,X1 и X2 соответственно. Функция wfusimg(X1,X2,WNAME,LEVEL,AFUSMETH,DFUSMETH,FLAGPLOT ) строит также графики объектов TXFUS,TX1 и TX2. Fusmeth обозначает AFUSMETH или DFUSMETH. Доступные методы слияния: 1) простой – может быть ‘max’,’min’,’mean’,’img1’,’img2’ или ‘rand’, когда слияние коэффициентов аппроксимаций и деталей, полученных из X1 и X2 , делается выбором максимального, минимального, среднего из 25 соответствующих элементов двух изображений, элемента первого изображения, элемента второго изображения, или случайным выбором элемента; 2) зависящий от параметра – в следующей форме: Fusmeth=struct(‘name’,nameMETH,’param’,paramMETH), где nameMETH может быть: – ‘linear’; – ‘UD _fusion’ – слияние сверху вниз; – ‘DU_fusion’ – слияние снизу вверх; – ‘RL_fusion’ – слияние справа налево; – ‘UserDEF’ – пользовательское слияние.[4] Пример 6. Восстановленное изображение из двух нечетких изображений. Загружаем две оригинальные нечеткие фотографии. Файлы cathe 1_mat и cathe_2.mat находятся в каталоге C:\ProgramFiles\MATLAB\R2019b\toolbox\wavelet \wavedemo. Выполняем слияние уровня 5, используя sym4, выбором максимумов абсолютных значений коэффициентов и аппроксимации, и детализации. load cathe_1;X1=X; % загрузка первого изображения load cathe_2;X2=X; % загрузка второго изображения XFUS=wfusimg(X1,X2,'sym4',5,'max','max'); % слияние уровня 5, используя sym4, выбором максимумов абсолютных значений коэффициентов и аппроксимации, и детализации colormap(map); % установка палитры subplot(221),image(X1),axis square,title('Catherine 1'); % вывод первого изображения subplot(222),image(X2), axis square,title('Catherine 2'); % вывод второго 26 изображения subplot(223),image(XFUS),axis square,title('Synthesized image'); % вывод объединенного изображения Рис. 2.9 – Восстановленное четкое изображение из двух не четких изображений 27 ЗАКЛЮЧЕНИЕ В данной работе были изучены особенности системы MATLAB для исследования вейвлет-преобразований. С помощью системы MATLAB получены графические представления поведения различных вейвлетпреобразований. Рассмотрены способы применения вейвлет-преобразований для улучшения качества изображения. 28 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 1. Дьяконов В. П., Абраменкова И. В. MATLAB. Обработка сигналов и изображений. Специальный справочник. СПб: Питер, 2002. 2. Смоленцев Н.К. Основы теории вейвлетов. Вейвлеты в MATLAB. – Москва: ДМК Пресс, 2008г. – 448с. 3. Яковлев А. Н. Основы вейвлет-преобразования сигналов. М.: Физматлит, 2003. 176 с. 4. Штарк Г.-Г. Применение вейвлетов для ЦОС. — М.: Техносфера, 2007. 29