ВЕЙВЛЕТ-ОБРОБКА ЗОБРАЖЕНЬ У СЕРЕДОВИЩІ MATLAB

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КСА
Кафедра:
Не вказано

Інформація про роботу

Рік:
2014
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Обробка сигналів

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»  ЗВІТ до лабораторної роботи №4 з курсу: «Цифрові методи обробки сигналів і зображень» на тему: «ВЕЙВЛЕТ-ОБРОБКА ЗОБРАЖЕНЬ У СЕРЕДОВИЩІ MATLAB» Мета роботи – ознайомитися з основними можливостями вейвлет-обробки зображень реалізованими в середовищі MatLab, отримати навики розрахунку дискретного вейвлет-перетворення двовимірних сигналів, декомпозиції зображень та їх компресії в середовищі MatLab. ЗАВДАННЯ 1. Ознайомитись з теоретичним матеріалом. 2. Скласти програму в середовищі MatLab згідно завдання. 2.1. Провести компресію зображення з використанням вейвлет-процедури відповідно до завдання у Табл. 2. Зображення зберігається у заданому варіантом файлі у 8-бітінй змінній Y. Файл entropy.m повинен бути скопійований в ту саму папку в якій знаходяться програма і зображення. Табл. 1. № Тип вейвлету Рівень розкладу Тип порогу Кількість біт квантувача відповідно до рівня Файл  1. Добеші 3-го порядку 3 жорсткий [1 3 4] belmont1.tiff   РЕЗУЛЬТАТИ ВИКОНАННЯ РОБОТИ Лістинг програми: >> Y = imread('belmont1', 'tiff'); >> Y = imread('belmont1', 'tiff');% Завантаження зображення з файлу. >> Y = double(Y) / 256;% Приведення зображення до напівтонового формату >> Lev = 3;% Рівень розкладу >> w_name = 'db3'; % Тип вейвлету. >> Lev_1_bit = 1; % Кількість біт квантувача для 1-го рівня розкладу. >> Lev_2_bit = 3; % Кількість біт квантувача для 2-го рівня розкладу. >> Lev_3_bit = 4; % Кількість біт квантувача для 3-го рівня розкладу. >> [c, s] = wavedec2(Y, Lev, w_name); % Вейвлет-розклад зображення >> cA3 = appcoef2(c, s, w_name, 3); % Знаходження коефіцієнтів апроксимації для 3-го рівня >> cH3 = detcoef2('h', c, s, 3); % Знаходження горизонтальних коефіцієнтів для 3-го рівня >> cV3 = detcoef2('v', c, s, 3); % Знаходження вертикальних коефіцієнтів для 3-го рівня >> cD3 = detcoef2('d', c, s, 3); % Знаходження діагональних коефіцієнтів для 3-го рівня >> cA2 = appcoef2(c, s, w_name, 2); % Знаходження коефіцієнтів апроксимації для 2-го рівня >> cH2 = detcoef2('h', c, s, 2); % Знаходження горизонтальних коефіцієнтів для 2-го рівня >> cV2 = detcoef2('V', c, s, 2); % Знаходження вертикальних коефіцієнтів для 2-го рівня >> cD2 = detcoef2('d', c, s, 2); % Знаходження діагональних коефіцієнтів для 2-го рівня >> cA1 = appcoef2(c, s, w_name, 1); % Знаходження коефіцієнтів апроксимації для 1-го рівня >> cH1 = detcoef2('h', c, s, 1); % Знаходження горизонтальних коефіцієнтів для 1-го рівня >> cV1 = detcoef2('V', c, s, 1); % Знаходження вертикальних коефіцієнтів для 1-го рівня >> cD1 = detcoef2('d', c, s, 1); % Знаходження діагональних коефіцієнтів для 1-го рівня >> % Побудова графіків коефіцієнтів розкладу 1-го рівня >> figure(1); subplot(221); imshow(mat2gray(cA1)); xlabel('cA1'); >> subplot(222); imshow(mat2gray(cH1)); xlabel('cH1'); >> subplot(223); imshow(mat2gray(cV1)); xlabel('cV1'); >> subplot(224); imshow(mat2gray(cD1)); xlabel('cD1'); >> % Побудова графіків коефіцієнтів розкладу 2-го рівня >> figure(3); subplot(221); imshow(mat2gray(cA2)); xlabel('cA2'); >> subplot(222); imshow(mat2gray(cH2)); xlabel('cH2'); >> subplot(223); imshow(mat2gray(cV2)); xlabel('cV2'); >> subplot(224); imshow(mat2gray(cD2)); xlabel('cD2'); >> % Побудова графіків коефіцієнтів розкладу 3-го рівня >> figure(4); subplot(221); imshow(mat2gray(cA3)); xlabel('cA3'); >> subplot(222); imshow(mat2gray(cH3)); xlabel('cH3'); >> subplot(223); imshow(mat2gray(cV3)); xlabel('cV3'); >> subplot(224); imshow(mat2gray(cD3)); xlabel('cD3'); >> A3 = wrcoef2('a', c, s, w_name, 3); % Обчислення апроксимуючої складової на 3-му рівні >> H3 = wrcoef2('h', c, s, w_name, 3); % Обчислення горизонтальної складової на 3-му рівні >> V3 = wrcoef2('v', c, s, w_name, 3); % Обчислення вертикальної складової на 3-му рівні >> D3 = wrcoef2('d', c, s, w_name, 3); % Обчислення діагональної складової на 3-му рівні >> A2 = wrcoef2('a', c, s, w_name, 2); % Обчислення апроксимуючої складової на 2-му рівні >> H2 = wrcoef2('h', c, s, w_name, 2); % Обчислення горизонтальної складової на 2-му рівні >> V2 = wrcoef2('v', c, s, w_name, 2); % Обчислення вертикальної складової на 2-му рівні >> D2 = wrcoef2('d', c, s, w_name, 2); % Обчислення діагональної складової на 2-му рівні >> >> A1 = wrcoef2('a', c, s, w_name, 1); % Обчислення апроксимуючої складової на 1-му рівні >> H1 = wrcoef2('h', c, s, w_name, 1);% Обчислення горизонтальної складової на 1-му рівні >> V1 = wrcoef2('v', c, s, w_name, 1); % Обчислення вертикальної складової на 1-му рівні >> D1 = wrcoef2('d', c, s, w_name, 1); % Обчислення діагональної складової на 1-му рівні >> % Побудова графіків складових на 1-му рівні розкладу >> figure(5); subplot(221); imshow(mat2gray(A1)); xlabel('A1'); >> subplot(222); imshow(mat2gray(H1)); xlabel('H1'); >> subplot(223); imshow(mat2gray(V1)); xlabel('V1'); >> subplot(224); imshow(mat2gray(D1)); xlabel('D1'); >> % Побудова графіків складових на 2-му рівні розкладу >> figure(6); subplot(221); imshow(mat2gray(A2)); xlabel('A2'); >> subplot(222); imshow(mat2gray(H2)); xlabel('H2'); >> subplot(223); imshow(mat2gray(V2)); xlabel('V2'); >> subplot(224); imshow(mat2gray(D2)); xlabel('D2'); >> % Побудова графіків складових на 3-му рівні розкладу >> figure(7); subplot(221); imshow(mat2gray(A3)); xlabel('A3'); >> subplot(222); imshow(mat2gray(H3)); xlabel('H3'); >> subplot(223); imshow(mat2gray(V3)); xlabel('V3'); >> subplot(224); imshow(mat2gray(D3)); xlabel('D3'); >> % Обчислення порогів для 3-го рівня розкладу >> std_cH3 = 1 * median(abs(cH3(:)))/0.6745; >> std_cV3 = 1 * median(abs(cV3(:)))/0.6745; >> std_cD3 = 1 * median(abs(cD3(:)))/0.6745; >> % Обчислення порогів для 2-го рівня розкладу >> std_cH2 = 1.5 * median(abs(cH2(:)))/0.6745; >> std_cV2 = 1.5 * median(abs(cV2(:)))/0.6745; >> std_cD2 = 1.5 * median(abs(cD2(:)))/0.6745; >> % Обчислення порогів для 1-го рівня розкладу >> std_cH1 = 2 * median(abs(cH1(:)))/0.6745; >> std_cV1 = 2 * median(abs(cV1(:)))/0.6745; >> % Формування матриці порогів 3*N >> thr_h = [std_cH1 std_cH2 std_cH3]; >> thr_v = [std_cV1 std_cV2 std_cV3]; >> thr_d = [0 std_cD2 std_cD3]; >> THR = [thr_h; thr_d; thr_v]; >> % Порогування функції >> [YC, cx, sx] = wdencmp('lvd', c, s, w_name, Lev, THR, 'h'); >> % Знаходження коефіцієнтів вейвлет-розкладу після порогування >> cA3_t = appcoef2(cx, sx, w_name, 3); >> cH3_t = detcoef2('h', cx, sx, 3); >> cV3_t = detcoef2('v', cx, sx, 3); >> cD3_t = detcoef2('d', cx, sx, 3); >> cH2_t = detcoef2('h', cx, sx, 2); >> cV2_t = detcoef2('v', cx, sx, 2); >> cD2_t = detcoef2('d', cx, sx, 2); >> cH1_t = detcoef2('h', cx, sx, 1); >> cV1_t = detcoef2('v', cx, sx, 1); >> cD1_t = detcoef2('d', cx, sx, 1); >> % Визначення максимального значення для деталізуючих коефіцієнтів >> Max_Lev_1 = max([ max(cH1_t(:)) max(cV1_t(:)) ]); >> Max_Lev_2 = max([ max(cH2_t(:)) max(cV2_t(:)) max(cD2_t(:))]); >> Max_Lev_3 = max([ max(cH3_t(:)) max(cV3_t(:)) max(cD3_t(:))]); >> % Визначення мінімального значення для деталізуючих коефіцієнтів >> Min_Lev_1 = min([ min(cH1_t(:)) min(cV1_t(:)) ]); >> Min_Lev_2 = min([ min(cH2_t(:)) min(cV2_t(:)) min(cD2_t(:))]); >> Min_Lev_3 = min([ min(cH3_t(:)) min(cV3_t(:)) min(cD3_t(:))]); >> Coef_Lev_1 = max(abs([Max_Lev_1 Min_Lev_1])); % Масштабуючий множник для 1-го рівня розкладу >> Coef_Lev_2 = max(abs([Max_Lev_2 Min_Lev_2]))l; % Масштабуючий множник для 2-го рівня розкладу >> Coef_Lev_2 = max(abs([Max_Lev_2 Min_Lev_2])); % Масштабуючий множник для 2-го рівня розкладу >> Coef_Lev_3 = max(abs([Max_Lev_3 Min_Lev_3])); % Масштабуючий множник для 3-го рівня розкладу >> % Квантування коефіцієнтів 1-го рівня розкладу заданим числом біт. >> cH1_tq = convergent(cH1_t * (2^Lev_1_bit-1) / Coef_Lev_1) / 2^Lev_1_bit; >> cV1_tq = convergent(cV1_t * (2^Lev_1_bit-1) / Coef_Lev_1) / 2^Lev_1_bit; >> % Обчислення ентропії коефіцієнтів 1-го рівня після порогування і квантування. >> Entropy_1 = entropy([ cH1_tq(:) * 2^Lev_1_bit; cV1_tq(:) * 2^Lev_1_bit ]); >> % Квантування коефіцієнтів 2-го рівня розкладу заданим числом біт. >> cH2_tq = convergent(cH2_t * (2^Lev_2_bit-1) / Coef_Lev_2) / 2^Lev_2_bit; >> cV2_tq = convergent(cV2_t * (2^Lev_2_bit-1) / Coef_Lev_2) / 2^Lev_2_bit; >> cD2_tq = convergent(cD2_t * (2^Lev_2_bit-1) / Coef_Lev_2) / 2^Lev_2_bit; >> % Обчислення ентропії коефіцієнтів 2-го рівня після порогування і квантування. >> Entropy_2 = entropy([ cH2_tq(:) * 2^Lev_2_bit; cV2_tq(:) * 2^Lev_2_bit; cD2_tq(:) * 2^Lev_2_bit ]); >> % Квантування коефіцієнтів 3-го рівня розкладу заданим числом біт. >> cH3_tq = convergent(cH3_t * (2^Lev_3_bit-1) / Coef_Lev_3) / 2^Lev_3_bit; >> cV3_tq = convergent(cV3_t * (2^Lev_3_bit-1) / Coef_Lev_3) / 2^Lev_3_bit; >> cD3_tq = convergent(cD3_t * (2^Lev_3_bit-1) / Coef_Lev_3) / 2^Lev_3_bit; >> % Обчислення ентропії коефіцієнтів 3-го рівня після порогування і квантування. >> Entropy_3 = entropy([cH3_tq(:) * 2^Lev_3_bit; cV3_tq(:) * 2^Lev_3_bit; cD3_tq(:) * 2^Lev_3_bit ]); >> cH1_tq = reshape(cH1_tq, 1, sx(4,1) * sx(4,2)) * Coef_Lev_1; >> cV1_tq = reshape(cV1_tq, 1, sx(4,1) * sx(4,2)) * Coef_Lev_1; >> cD1_tq = reshape(cD1_t, 1, sx(4,1) * sx(4,2)) * Coef_Lev_1 * 0; % Нехтуємо діагональними коефіцієнтами >> cH2_tq = reshape(cH2_tq, 1, sx(3,1) * sx(3,2)) * Coef_Lev_2; >> cV2_tq = reshape(cV2_tq, 1, sx(3,1) * sx(3,2)) * Coef_Lev_2; >> cD2_tq = reshape(cD2_tq, 1, sx(3,1) * sx(3,2)) * Coef_Lev_2 ; >> cH3_tq = reshape(cH3_tq, 1, sx(2,1) * sx(2,2)) * Coef_Lev_3; >> cV3_tq = reshape(cV3_tq, 1, sx(2,1) * sx(2,2)) * Coef_Lev_3; >> cD3_tq = reshape(cD3_t, 1, sx(2,1) * sx(2,2)) * Coef_Lev_3 ; >> cx1 = cx; >> % Формуємо масив коефіцієнтів розкладу після порогування і квантування. >> cx1(sx(1, 1) * sx(1, 2) + 1 :end) = [cH3_tq cV3_tq cD3_tq cH2_tq cV2_tq cD2_tq cH1_tq cV1_tq cD1_tq]; >> % Здійснюємо реконструкцію стисненого сигналу. >> YCQ = wrcoef2('a', cx1, sx, w_name, 0); >> % Записуємо стиснуте зображення у файл >> imwrite(YCQ, 'belmont1_Buch.tiff'); >> [W H] = size(Y); % Визначаємо розміри зображення >> Size_Imag = W * H * 8 % Визначаємо кількість біт для зберігання нестисненого зображення Size_Imag = 614400 >> % Визначаємо кількість біт для зберігання стисненого зображення >> Size_Imag_Buch = s(1, 1) * s(1, 2) * 8 + s(2, 1) * s(2, 2) * Entropy_3 * 3 + s(3, 1) * s(3, 2) * Entropy_2 * 3 + + s(4, 1) * s(4, 2) * Entropy_1 * 2 Size_Imag_Buch = 2.4000e+004 >> CR = Size_Imag / Size_Imag_Buch % Визначаємо коефіцієнт стиснення CR = 25.5997 >> PSNR = 20 * log10 (255 ./ sqrt(sum( (Y(:) - YCQ(:)).^2)/ (W * H))) % Визначаємо PSNR PSNR = 71.6623 >> xlab1=['CR = ' , num2str(CR)]; >> xlab2=[' PSNR = ', num2str(PSNR), 'dB']; >> figure(9); subplot(211); imshow(Y); % Виводимо оригінальне зображення на екран >> subplot(212); imshow(mat2gray(YCQ)); xlabel([xlab1 xlab2]); % Виводимо стиснене зображення на екран Побудова графіків / Рис.1 Коефіціенти розкладу 1-го рівня / Рис.2 Коефіціенти розкладу 2-го рівня / Рис.3 Коефіціенти розкладу 3-го рівня / Рис.4 Складові на 1-му рівні розкладу / Рис.5 Складові на 2-му рівні розкладу / Рис.6 Складові на 3-му рівні розкладу / Рис.7 Оригінальне та стиснене зображення Висновок: на даній лабораторній роботі я ознайомився з основними можливостями вейвлет-обробки реалізованими в середовищі MatLab, отримав навики розрахунку дискретного вейвлет-перетворення, декомпозиції сигналу на апроксимуючі і деталізуючі складові, вейвлет-очищення сигналів від шумів в середовищі MatLab.
Антиботан аватар за замовчуванням

15.06.2014 01:06-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!