DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

ВЕЙВЛЕТ-ОБРОБКА ЗОБРАЖЕНЬ У СЕРЕДОВИЩІ 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:43

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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