Стиск зображень з використанням дискретних косинусних перетворень

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

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

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

Рік:
2009
Тип роботи:
Розрахунково - графічна робота
Предмет:
Цифрова обробка сигналів та зображень

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

Міністерство Освіти і Науки України Національний Університет “Львівська Політехніка”  Кафедра СКС Стиск зображень з використанням дискретних косинусних перетворень Методичні вказівки до розрахунково-графічної роботи (частина 1) з курсу “Проектування комп’ютерних засобів цифрової обробки сигналів та зображень” для студентів спеціальностей 7.091503 і 8.091503 “Спеціалізовані комп'ютерні системи“ Затверджено на засіданні кафедри ” Спеціалізовані комп'ютерні системи ” Протокол № 1 від 28 серпня 2009 р. Львів – 2009 Стиск зображень з використанням дискретних косинусних перетворень : Методичні вказівки до розрахунково-графічної роботи (частина 1) з курсу “Проектування комп’ютерних засобів цифрової обробки сигналів та зображень” для студентів спеціальностей 7.091503 і 8.091503 “Спеціалізовані комп'ютерні системи“ / Укладач: Р. Попович – Львів: Національний університет “Львівська політехніка”, 2009,  с. Укладач: Р. Попович, к.т.н., доцент Відповідальний за випуск: Дунець Р. Б., професор, завідувач кафедри Рецензенти: Кочан Р.В., к. т. н, доцент Троценко В.В., к. т. н, доцент Мета роботи Опрацювати та випробувати в середовищі MATLAB 6.5 програму, яка реалізує стиск зображень з використанням дискретного косинусного перетворення. Опис алгоритму JPEG стиск Вхід: Lena512.pgm Вихід:Lena512jpg Алгоритм стиску 1. Початкове зображення розбиваємо на блоки розміру 8Х8 і кожен піксель у блоці зсуваємо на -128 2. Кожен блок незалежно перетворюємо за допомогою двовимірного ДКП (дискретного косинусного перетворення) – Matlab команда dct2 3. Кожен перетворений блок квантуємо згідно з виразом: x(j,k)=round(block_dct(j,k)/quant(j,k)) Матриця квантування з елементами quant(j,k): quant=, де параметр Q змінюємо, регулюючи степінь стиску зображення. Коефіцієнти заокруглюємо до найближчого цілого. 4. Обходячи двовимірний масив ДКП коефіцієнтів зигзагом (змійкою) перетворюємо його в одновимірний вектор  5. Перший коефіцієнт у векторі (так званий DC коефіцієнт) заміняємо на його різницю з першим коефіцієнтом попереднього вектора. Отриману різницю кодуємо за допомогою коду Хафмена. Таблиця DC коду Хафмена: (категорія, кодове слово) (наведена в файлі dc_huffman_table.txt) Категорія Діапазон коефіцієнта  0 0  1 -1,1  2 -3,-2,2,3  3 -7,…,-4,4,…,7  … …   Після отримання кодового слова для категорії, вимагаються ще додаткові біти, щоб визначити знак та абсолютну величину ненульового коефіцієнта в кожній із категорій. 6. Коефіцієнти вектора починаючи з другого називають AC коефіцієнтами. Ненульові AC коефіцієнти також кодуємо кодом Хафмена, але з використанням іншої таблиці. Принцип полягає в такому: кодове слово залежить від числа нульових коефіцієнтів, що йдуть попереду даного ненульового, та від категорії ненульового коефіцієнта. Таблиця AC коду Хафмена: (число нулів, категорія, кодове слово) (наведена в файлі аc_huffman_table.txt) Кінець блоку (0, 0, 1010) 7. Послідовно опрацьовуємо всі блоки зображення, як описано раніше. Оцінювання показників Отримати PSNR та відтворені зображення при 0.25 bpp, 0.5 bpp, 0.75 bpp, 1 bpp, 1.5 bpp. Приклад опрацювання зображення. Візьмемо для прикладу Q=0.5 Тоді матриця квантування дорівнює 8 6 5 8 12 20 26 31 6 6 7 10 13 29 30 28 7 7 8 12 20 29 35 28 7 9 11 15 26 44 40 31 9 11 19 28 34 55 52 39 12 18 28 32 41 52 57 46 25 32 39 44 52 61 60 51 36 46 48 49 56 50 52 50 Початкове зображення розбиваємо на блоки розміру 8x8. Візьмемо для прикладу два послідовних (зліва вправо) 8x8 блоки у верхньому лівому кутку початкового зображення lena512.pgm. block1 162 162 162 161 162 157 163 161 162 162 162 161 162 157 163 161 162 162 162 161 162 157 163 161 162 162 162 161 162 157 163 161 162 162 162 161 162 157 163 161 164 164 158 156 161 160 159 160 161 161 163 158 160 162 159 156 159 159 156 157 159 159 156 157 Кожен піксель у блоці зсуваємо на -128 block1 - 128 34 34 34 33 34 29 35 33 34 34 34 33 34 29 35 33 34 34 34 33 34 29 35 33 34 34 34 33 34 29 35 33 34 34 34 33 34 29 35 33 36 36 30 28 33 32 31 32 33 33 35 30 32 34 31 28 31 31 28 29 31 31 28 29 Блок незалежно перетворюємо за допомогою двовимірного ДКП. Найбільші за абсолютною величиною коефіцієнти ДКП зосереджуються у верхній лівій області. Це ключова властивість ДКП, що використовується при JPEG стиску. block1_dct 260.2500 5.0886 3.0094 -0.0867 0.2500 -0.6291 -4.4937 5.5747 7.1102 -1.2029 0.7850 -5.0194 1.9602 3.1345 -3.8925 3.2045 -4.7083 -0.0063 -1.6036 1.6470 -0.6765 -0.7010 1.8713 -1.6428 2.3837 1.0641 1.7188 1.1479 -0.7606 -1.1010 0.2081 0.3036 -1.2500 -1.3426 -0.5740 -1.6225 1.7500 0.9690 -1.3858 0.0316 1.2920 0.8680 -1.2365 0.0883 -2.0116 0.6628 1.4524 0.5034 -1.5675 -0.2024 2.3713 1.5460 1.6332 -2.0703 -0.8964 -1.0630 1.1594 -0.1062 -1.8658 -1.5738 -0.8846 1.8090 0.3391 0.8922 Перетворений блок квантуємо block1_quant 33 1 1 0 0 0 0 0 1 0 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Двовимірний масив коефіцієнтів, отриманих після квантування, перетворюємо в одновимірний вектор у результаті проходження змійкою block1_zigzag 33 1 1 -1 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DC коефіцієнт заміняємо на різницю block1 difference 33-0=33 Отриману різницю кодуємо кодом Хафмена. Спочатку отримуємо категорію коефіцієнта. Оскільки 32≤|33|≤63, категорія коефіцієнта дорівнює 6. Тоді маємо кодове слово:1110. Тепер про те, як отримуємо додаткові біти. Ці біти обчислюються для всіх коефіцієнтів у кожній категорії, за винятком категорії 0. Усі коефіцієнти кожної категорії (за винятком категорії 0) нумеруються послідовними натуральними числами: додатні коефіцієнти парними, а від’ємні - непарними. У нашому прикладі, для категорії 6: 32 нумерується як 000000, -32 як 000001,33 як 000010, -33 як 000011 і т.д. block1 DC Huffman coding 33 – категорія 6 кодове слово 1110 Додаткові біти 000010 Повне кодове слово 1110000010 Для оцінки степеня стиску зображення числа біт у всіх повних кодових словах накопичуються. numb=10 Потік бітів запаковується в байти і записується в файл lena512.jpg AC коефіцієнти - коефіцієнти з другого по 64-й у векторі block_zigzag Опрацювання AC коефіцієнтів Послідовність AC коефіцієнтів заміняємо на послідовність пар: - число нульових коефіцієнтів, які йдуть до ненульового коефіцієнта - ненульовий коефіцієнт У кінці послідовності пар додаємо маркер EOB (кінець блоку) - 0 0 0 1 0 1 0 -1 1 1 7 -1 0 0 Отримані пари кодуємо з використанням таблиці AC коду Хафмена. Кодування пари (0,1): категорія для 1 - 1 AC кодове слово для 0,1 – 00 додаткові біти – 0 повне кодове слово – 000 Кодування пари (0,1): категорія для 1 - 1 AC кодове слово для 0,1 – 00 додаткові біти – 0 повне кодове слово – 000 Кодування пари (0,-1): категорія для -1 - 1 AC кодове слово для 0,1 – 00 додаткові біти – 1 повне кодове слово - 001 Кодування пари (1,1): категорія для 1 - 1 AC кодове слово для 1,1 – 1100 додаткові біти – 0 повне кодове слово - 1100 Кодування пари (7,-1): категорія для -1 - 1 AC кодове слово для 7,-1 – 11111001 додаткові біти – 1 повне кодове слово - 11111001 Кодування пари (0,0) (ця пара є маркером EOB): категорія для 0 - 0 AC кодове слово для 0,0 – 1010 додаткові біти – немає повне кодове слово - 1010 numb=37 ------------------------------------------------------------------------------------------- block2 розташований справа від block1 block2 165 161 162 160 155 163 160 155 165 161 162 160 155 163 160 155 165 161 162 160 155 163 160 155 165 161 162 160 155 163 160 155 165 161 162 160 155 163 160 155 160 160 155 160 154 154 156 154 160 162 157 162 155 155 157 152 159 161 161 159 154 154 153 151 block2 - 128 37 33 34 32 27 35 32 27 37 33 34 32 27 35 32 27 37 33 34 32 27 35 32 27 37 33 34 32 27 35 32 27 37 33 34 32 27 35 32 27 32 32 27 32 26 26 28 26 32 34 29 34 27 27 29 24 31 33 33 31 26 26 25 23 block2_dct 247.2500 17.6910 2.3029 4.7341 -7.5000 9.7497 2.2933 -6.3980 10.8646 -2.7301 2.6331 4.9098 -3.5647 2.6999 6.0155 0.0957 -4.2627 2.2568 -1.8839 -2.5183 0.4784 -1.3712 -1.5303 0.5179 -1.3163 -1.5892 0.9519 0.3675 2.0028 0.2310 -2.4308 -1.0274 2.5000 0.8847 -0.1421 0.3624 -2.2500 0.0554 3.5766 1.0990 0.1728 -0.3084 -0.3461 0.2310 0.5865 0.4003 -2.0310 -0.7534 -3.1051 -0.0241 0.4697 -1.0246 1.1548 -0.8810 -0.1161 0.2997 3.0533 0.0957 -0.3088 0.9643 -1.3463 0.7456 0.8517 -0.0377 block2_quant 31 3 0 1 -1 0 0 0 2 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Block2_zigzag 31 3 2 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Опрацювання DC коефіцієнта різниця 31-33=-2 DC кодування Хафмена -2 – категорія 2 кодове слово 100 додаткові біти 01 повне кодове слово 10001 numb=42 Опрацювання AC коефіцієнтів 0 3 0 2 0 -1 2 1 7 -1 0 0 Кодування пари (0,3): категорія для 3 - 2 AC кодове слово для 0,3 – 01 додаткові біти – 10 повне кодове слово – 0110 Кодування пари (0,2): категорія для 2 - 2 AC кодове слово для 0,2 – 01 додаткові біти – 00 повне кодове слово - 0100 Кодування пари (0,-1): категорія для -1 - 1 AC кодове слово для 0,1 – 00 додаткові біти – 1 повне кодове слово - 001 Кодування пари (2,1): категорія для 1 - 1 AC кодове слово для 2,1 – 11011 додаткові біти – 0 повне кодове слово - 110110 Кодування пари (7,-1): категорія для -1 - 1 AC кодове слово для 7,-1 – 11111001 додаткові біти – 1 повне кодове слово - 11111001 Кодування пари (0,0) (ця пара є маркером EOB): категорія для 0 - 0 AC кодове слово для 0,0 – 1010 додаткові біти – none повне кодове слово - 1010 numb=72 Таким чином, загальна кількість бітів для кодування block1 та block2 дорівнює 72. Після того, як всі блоки аналогічно опрацьовані, jpeg кодер завершує свою роботу. Степінь стиску (в бітах на піксель) дорівнює numb/(512*512). Цей показник з’являється в головному вікні Matlab. Jpeg декодер виконує дії, обернені до дій кодера читає байти з файлу lena512.jpg розпаковує байти в потік бітів послідовно дописуючи біти з потоку, перевіряє чи є результат кодовим словом DC коду Хафмена. Таблиці коду Хафмена складені так, що ніяке кодове слово не є початком іншого. Ось чому потік бітів однозначно декодований маючи кодове слово знаходить категорію, а тоді – число додаткових бітів бере це число бітів з потоку та знаходить значення коефіцієнта додаванням відтворює значення DC коефіцієнта послідовно дописуючи біти з потоку, перевіряє чи є результат кодовим словом AC коду Хафмена маючи кодове слово знаходить число нулів перед ненульовим коефіцієнтом, категорію ненульового коефіцієнта, а тоді число додаткових бітів бере це число бітів з потоку та знаходить значення ненульового коефіцієнта шукає маркер EOB послідовно записує відповідну кількість нулів, а тоді ненульовий коефіцієнт виконує обернений зигзаг: заміняє вектор на двовимірний масив коефіцієнтів виконує обернене квантування: множить елементи двовимірного масиву на відповідні елементи матриці квантування виконує двовимірне ДКП виконує обернений зсув на +128 Після того, як усі блоки аналогічно опрацьовані, jpeg деко дер завершує свою роботу. Обчислюємо показники якості відтвореного зображення: MSE, а тоді PSNR. PSNR (в dB) з’являється в головному вікні Matlab та в заголовку відтвореного (декодованого) зображення. Можна змінювати параметр Q в файлі compression.m, запускати цей файл на виконання та отримувати різні степені стиску (більше Q – більший степінь стиску, але разом з тим менше PSNR і гірша якість відтвореного зображення). Зразок програми на мові сценаріїв MATLAB 6.5 Далі наведено зразок програми на мові сценаріїв MATLAB 6.5, яка реалізує описані вище етапи стиску зображень. Qi=4; close all; %compression ratio depends on%Qi=4 - ratio=29.7 - 0.25bpp; 31.2dB %Qi=2 - ratio=19.78 - 0.4bpp ; 33.7dB %Qi=1 - ratio=12.79 - 0.75bpp; 35.7dB %Qi=0.5 - ratio= 8.2 - 1 bpp; 37.6dB %Qi=0.25 -ratio= 5.33 - 1.5 bpp; 39.8dB %t1 = cputime; %Reading of Huffman table for DC coefficients from file DC_huffman_table.txt [DC_categ,DC_code]=textread('DC_huffman_table.txt','%c %s'); %Reading of Huffman table for AC coefficients from file AC_huffman_table.txt [AC_run,AC_categ,AC_code]=textread('AC_huffman_table.txt','%c %c %s'); %quantization coefficients quant(1:8,1:8)=[16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99]; quant=round(quant*Qi); display('JPEG encoder'); figure imshow lena512.pgm; title('lena512.pgm, 8bpp'); im=double(imread('lena512.pgm')); DC_prev=0; DC_coef=[]; DC_data=[]; AC_data=[]; numb=0; %************************************************************************** row=64; %number of blocks in a row column=64; %number of blocks in a column %************************************************************************** fid=fopen('lena512.jpg','w'); buffer=''; for i_row=1:row for j_column=1:column %The original image is partitioned into 8x8 blocks and each pixel in a block is shifted by -128 %one block processing block=im(8*i_row-7:8*i_row,8*j_column-7:8*j_column)-128; %Each block is independently transformed by DCT %DCT: 2-D discrete cosine transform block_dct=dct2(block); %Each transformed block is quantized according to x(j,k)=round(block_dct(j,k)/quant(j,k)) x=round(block_dct./quant); %x - block_quant %The 2-D array of the coefficients after quantization is formatted into 1-D vector using zigzag scan block_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)]; %-------------------------------------------------------------------------- %start of DC coefficient processing %The DC coefficient (first coefficient in the block_zigzag vector) is encoded with a lossless %DPCM scheme using the quantized DC coefficient from the previous block as a 1-D predictor elem=x(1,1)-DC_prev; DC_prev=x(1,1); %The resulting DPCM difference is coded by Huffman coding %obtaining of elem category and a number of additional bits if elem==0 categ='0'; end; if abs(elem)==1 categ='1'; power=1; bits=1; end; if and(abs(elem)>=2,abs(elem)<=3) categ='2'; power=2; bits=2; end; if and(abs(elem)>=4,abs(elem)<=7) categ='3'; power=4; bits=3; end; if and(abs(elem)>=8,abs(elem)<=15) categ='4'; power=8; bits=4; end; if and(abs(elem)>=16,abs(elem)<=31) categ='5'; power=16; bits=5; end; if and(abs(elem)>=32,abs(elem)<=63) categ='6'; power=32; bits=6; end; if and(abs(elem)>=64,abs(elem)<=127) categ='7'; power=64; bits=7; end; if and(abs(elem)>=128,abs(elem)<=255) categ='8'; power=128; bits=8; end; if and(abs(elem)>=256,abs(elem)<=511) categ='9'; power=256; bits=9; end; if and(abs(elem)>=512,abs(elem)<=1023) categ='A'; power=512; bits=10; end; if and(abs(elem)>=1023,abs(elem)<=2047) categ='B'; power=1024; bits=11; end; i=1; %searching of categ in the DC Huffman table while DC_categ(i)~=categ i=i+1; end; code=char(DC_code(i)); %DC Huffman code word for the category of elem %After output the code for the category, the additional bits are %required to specify the sign and exact magnitude of the nonzero %coefficient in each of the categories if categ ~= '0' aa=abs(elem)-power; ad_cod=aa+aa; if elem<0 ad_cod=ad_cod+1; end; ad_code=dec2bin(ad_cod); buf=[]; for i=1:bits-length(ad_code) buf=strcat(buf,'0');end; ad_code=strcat(buf,ad_code); %ad_code - required additional bits code=strcat(code,ad_code); %complete code:category word + additional bits end; %numb is used for compression ratio estimation numb=numb+length(code); %numb=numb+number of bits in the current complete word %------------------------------------------------------ %packing of complete code word bits into byte and writing to the file lena512.jpg for i=1:length(code) buffer=strcat(buffer,code(i)); if length(buffer)==8 a=bin2dec(buffer); fwrite(fid,a); buffer=''; end; end; %writing to file %end of DC coefficient processing %------------------------------------------------------ %AC coefficients - from second to 64-th coefficients in the block_zigzag vector %start of AC coefficients processing % zero runcode vect=block_zigzag(2:64); n=0; ress=[]; for i=1:63 if vect(i)==0 n=n+1; %counting a number of zero-valued coefficients preceding the non-zero coefficient else ress=[ress n vect(i)]; n=0; end;%adding to ress the current pair (number of zeros and non-zero coefficient) end; ress=[ress 0 0];% adding a marker EOB (end of block) - 0 0 %The pairs from ress are coded by AC Huffman code table. %The principle is that each default AC Huffman code word depends on the %number of zeros, predicting the nonzero coefficient, as well as %the magnitude category of the nonzero coefficient for k=1:2:length(ress)-1 ele=ress(k); %number of zeros elem=ress(k+1); %nonzero coefficient %obtaining of elem category and a number of additional bits if elem==0 categ='0'; end; if abs(elem)==1 categ='1'; power=1; bits=1; end; if and(abs(elem)>=2,abs(elem)<=3) categ='2'; power=2; bits=2; end; if and(abs(elem)>=4,abs(elem)<=7) categ='3'; power=4; bits=3; end; if and(abs(elem)>=8,abs(elem)<=15) categ='4'; power=8; bits=4; end; if and(abs(elem)>=16,abs(elem)<=31) categ='5'; power=16; bits=5; end; if and(abs(elem)>=32,abs(elem)<=63) categ='6'; power=32; bits=6; end; if and(abs(elem)>=64,abs(elem)<=127) categ='7'; power=64; bits=7; end; if and(abs(elem)>=128,abs(elem)<=255) categ='8'; power=128; bits=8; end; if and(abs(elem)>=256,abs(elem)<=511) categ='9'; power=256; bits=9; end; if and(abs(elem)>=512,abs(elem)<=1023) categ='A'; power=512; bits=10; end; if and(abs(elem)>=1023,abs(elem)<=2047) categ='B'; power=1024; bits=11; end; switch ele case 0, ele_str='0'; case 1, ele_str='1'; case 2, ele_str='2'; case 3, ele_str='3'; case 4, ele_str='4'; case 5, ele_str='5'; case 6, ele_str='6'; case 7, ele_str='7'; case 8, ele_str='8'; case 9, ele_str='9'; case 10, ele_str='A'; case 11, ele_str='B'; case 12, ele_str='C'; case 13, ele_str='D'; case 14, ele_str='E'; case 15, ele_str='F'; end; %searching of run and categ in the AC Huffman table i=1;while or(AC_run(i)~=ele_str,AC_categ(i)~=categ) i=i+1; end; code=char(AC_code(i));%AC Huffman code word for the run and category if categ ~= '0' aa=abs(elem)-power; ad_cod=aa+aa; if elem<0 ad_cod=ad_cod+1; end; ad_code=dec2bin(ad_cod); buf=[]; for i=1:bits-length(ad_code) buf=strcat(buf,'0');end; ad_code=strcat(buf,ad_code); %ad_code - required additional bits code=strcat(code,ad_code);%complete code:run and category word + additional bits end; numb=numb+length(code);%numb=numb+number of bits in the current complete word %------------------------------------------------------ %packing of complete code word bits into byte and writing to the file lena512.jpg for i=1:length(code) buffer=strcat(buffer,code(i)); if length(buffer)==8 a=bin2dec(buffer); fwrite(fid,a); buffer=''; end; end; %writing to file %------------------------------------------------------ end; %end of AC coefficients processing end; %end of blocks column processing end; %end of blocks row processing %------------------------------------------------------ %last bits padding with "1" to whole byte and writing to lena512.jpg l=length(buffer); if l~=0 for i=l+1:8 buffer=strcat(buffer,'1'); end; a=bin2dec(buffer); fwrite(fid,a); buffer=''; numb=numb+8; end; fclose(fid); compr_ratio=numb/(512*512); disp('compression_ratio, bpp:'); disp(compr_ratio); %t2=cputime; %t2-t1 %-------------------------------------------------------------------------- clear im; %-------------------------------------------------------------------------- display('JPEG decoder') fid=fopen('lena512
Антиботан аватар за замовчуванням

14.12.2014 13:12-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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