Я пытаюсь написать m-файл в matlab, который выполняет jpeg-сжатие в изображении с размерами 256x256, в приведенном ниже коде я разбил изображение на 8-кратные подблоки и выполнил преобразование dct и после квантования. Моя проблема заключается в том, что я хочу также после квантования сохранить в матрице новые сгенерированные значения, чтобы иметь матрицу 256x256 с также значениями 0, а затем выполнить операцию zig zag. Мой код ниже:Матрица сжатия Jpeg после квантования
clc;
clear all;
data=imread('cameraman.tif');
x=double(data);
%length of image with no compression
len=256*256;
data1=uint8(zeros(size(data)));
%quantization weigting table
qv1= [ 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];
final=zeros(256,256);
count1=0;
for row=1:8:256
for column = 1:8:256
%shift down pixel
x=double(data(row:row+7,column:column+7))-128;
%8x8 dct transform
xf=dct2(x);
%quantization
xf=round(xf./qv1).*qv1;
final(row+7,column+7)=xf;
count1=count1+sum(xf(:)~=0);
%inverse dct transformation,
data1(row:row+7,column:column+7)=idct2(xf)+128;
end
end
«Конечная» переменная Я хочу сделать матрицу, описанную выше. Я принимаю ошибку, как и у меня. Я не знаю, как изменить код, чтобы быть правильным.