Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Дослiдження методiв компресii зображень в Matlab

Автор:   •  Май 31, 2019  •  Лабораторная работа  •  3,667 Слов (15 Страниц)  •  322 Просмотры

Страница 1 из 15

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ

 „ЛЬВІВСЬКА ПОЛІТЕХНІКА”

ІКТА

Кафедра ЗІ

[pic 1]

З В І Т

До лабораторної роботи №4

з курсу:

 Системи запису та відтворення інформації ”

на тему:

 ДОСЛІДЖЕННЯ МЕТОДІВ КОМПРЕСІЇ ЗОБРАЖЕНЬ В MATLAB

Варіант-13

Виконав: ст. гр. КБ-32

Шевчук О.Р

                                                                                                      Прийняв: Совин Я.Р

Львів – 2019

Мета роботи : набути вміння розробляти власні методи стиснення зображень та оцінювати їх ефективність.

Завдання:

1. Ознайомитись з теоретичним матеріалом.

2. Завантажити файл вказаний в завданні відповідно до свого варіанту.

3. Вивести основну інформацію про файл: кількість пікселів по горизонталі і вертикалі, тип зображення – кольорове/монохромне, кількість біт на піксел, загальний розмір зображення в бітах.

4. Написати JPEG-подібний кодер, згідно етапів розглянутих в теоретичній частині, який би стискав зображення з заданим степенем стиску G.

5. Вивести на екран оригінальне та декомпресоване зображення для порівняння їх якості.

6. Розрахувати реальну степінь стиснення зображення.

7. Навести покрокові результати всіх етапів стиснення та відтворення довільного блоку 8х8 пікселів зображення.

Варіант – 13

Назва файлу - chess.tiff .

Степінь стиску – 14.

Лістинг програми:

info = imfinfo('D:\Навчання\Симестр 2\СЗТВІ\Lab_4\chess.tiff')

Y = imread('D:\Навчання\Симестр 2\СЗТВІ\Lab_4\chess.tiff');

[N,M] = size(Y);    %розмір матриці Y

%кількість блоків 8*8 по вертикалі та горизонталі відповідно

N_Block = fix(N/8); %до меншого цілого

M_Block = fix(M/8); %до меншого цілого

%доповнимо некратні 8-ми рядки чи стовпці нулями

if (N - N_Block*8) ~= 0

    Dod = 8 - ((N - N_Block*8));

    Y = [Y; zeros(Dod, M)];

    N_Block = N_Block + 1;

end;

if (M - M_Block*8) ~= 0

    Dod = 8 - ((M - M_Block*8));

    Y = [Y zeros(N_Block*8, Dod)];

    M_Block = M_Block + 1;

end;

Y = double(Y);

%зсуврівня

Y1 = Y - 128;

Y_DCT = blkproc(Y1, [8,8], 'dct2'); %розбиттязображеннянаблоки% 8*8 іобчислення 2D-ДКПбудематриця Y_DCT такогожрозмірущоі% Y1

%будуємо таблицю квантування для заданого G

G = 18.2;

for ii = 1 : 8

    for jj = 1 : 8

        Q_Table(ii, jj) = 1 + (ii + jj - 1) * G;

    end;

end;

%квантуваннякоефіцієнтівДКП

%коженблоккоеф. 8х8 поелементно ділимо на матрицю Q_Table і закруглюємо

for ii = 1 : N_Block

    for jj = 1 : M_Block

        Y_Q( (8*ii-7) : (8*ii), (8*jj-7) : (8*jj) ) = round( Y_DCT( (8*ii-7) : (8*ii), (8*jj-7) : (8*jj) ) ./ Q_Table);

    end;

end;

%ZigZag-сканування:  8х8 -> 1x64 (розтягуємов 1 рядок)

%результат -- матриця Y_Scan розміром (N_Block*M_Block)рядків x 64 елементи

Y_Scan = zeros(N_Block * M_Block, 64);

count = 1;

for j = 1 : N_Block

    for i = 1 : M_Block

        %читаємочерговийблок 8х8 коефіцієнтів

        x = Y_Q(8*j-7 : 8*j, 8*i-7 : 8*i);

%ZigZag перестановка

        ZigZag = [ x(1,1) x(1,2) x(2,1) x(3,1) x(2,2) x(1,3) x(1,4) x(2,3) x(3,2) x(4,1) x(5,1) x(4,2) x(3,3) x(2,4) x(1,5) x(1,6) x(2,5) x(3,4) x(4,3) x(5,2) x(6,1) x(7,1) x(6,2) x(5,3) x(4,4) x(3,5) x(2,6) x(1,7) x(1,8) x(2,7) x(3,6) x(4,5) x(5,4) x(6,3) x(7,2) x(8,1) x(8,2) x(7,3) x(6,4) x(5,5) x(4,6) x(3,7) x(2,8) x(3,8) x(4,7) x(5,6) x(6,5) x(7,4) x(8,3) x(8,4) x(7,5) x(6,6) x(5,7) x(4,8) x(5,8) x(6,7) x(7,6) x(8,5) x(8,6) x(7,7) x(6,8) x(7,8) x(8,7) x(8,8) ];

...

Скачать:   txt (14.2 Kb)   pdf (336.2 Kb)   docx (904.2 Kb)  
Продолжить читать еще 14 страниц(ы) »
Доступно только на Essays.club