Почему существуют различия в коэффициентах DCT между matlab и libjpeg?
Мне нужно манипулировать коэффициентами DCT изображения JPEG, поэтому я получил значения с помощью libjpeg и matlab. Проблема в том, что я получаю разные значения.
Я работаю над следующим изображением:
libjpeg
я использовал jpeg_read_coefficients
чтобы получить виртуальный массив, а затем перебрать его и вывести значения DCT, для первого массива и первого блока dct я получил следующие значения:
9 8 10 6 3 1 1 0 -6 0 1 0 0 0 0 0 6 -1 -1 0 0 0 0 0 5 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Это коэффициенты в прямом порядке, как указано в документации.
Matlab
Чтобы получить коэффициенты, я прочитал изображение и побежал dct2
функция на его первом блоке 8X8:
A = imread('test2.jpg');
dct2(A(1:8,1:8,1));
и придумал следующие значения (для цветового пространства RGB):
404.7500 -2.5251 15.1704 18.4835 14.7500 8.0465 10.4933 1.6169 -50.4069 0,4634 3.2328 -0.3498 -0.6745 0.9465 0.4599 0.5694 16.0546 -1.7709 -3.3624 -0.0164 0.2310 -0.9791 -0.1250 -1.0582 0.2502 025 025 025 025 025 025 025 025 025 025 025 025 252 025 025 025% 2 025 025 025 025,20 032,20 5,203 0,20,20,20,20,20,150,30,150,30,30,20,150,150,150,300,30,30,30,30,30,30,150,1 у уширвать обучение у других учеников составлять 40,4,7500 с лишним. 0,9827 -0,0000 0,1208 0,2474 1,4739 9,4079 0,5931 -0,3263 0,0659 0,4536 0,2866 -0,3059 0,3997 10,6682 0,2906 0,1250 -0,6038 -0,0957 -0,0583 -0,8876 -1,2576 0,7863 -0,1074 -0,7177 -0,40 0,60 038,80 038,10 038,10 038,10 038,10 038,10 038,10 038,10 0381 038,10 0381 038,10 0381 038,10 038 до 0,005 0,60 0,60 0,60 0,60 0,60 0,60 0,60,30,30,30,30,30,30,30,10,11,30,30,11,30,11,12,12,11,30,30,11,16,11,11,20,11,11,30,11,30,11,11,11,11,31,11,11,21,15,15,11,30,30,11 038,11 0,81 0,81 0,801,80
И эти значения для цветового пространства YCbCr:
1,0e+03 *( 1,0305 0,0142 0,0168 0,0151 0,0130 0,0071 0,0085 0,0003 -0,0100 0,0002 0,0029 -0,0001 -0,0002 0,0006 -0,0004 -0,0005 0,0151 -0,0024 -0,0025 -0,0000 0 -0,0002 -0,0005 -0,0000 0,0132 -0,0000 -0,0004 -0,0007 -0,0008 -0,0008 -0,0001 0,0011 0,0140 -0,0004 0,0003 -0,0010 0,0005 -0,0002 0,0001 -0,0004 0,0086 0,0001 -0,0000 0,0002 0,0004 0,0004 -0,0003 0,0001 0,0078 -0,0002 -0,0005 -0,0000 0 -0,0003 -0,0000 -0,0005 0,0003 -0,0003-0,0003 -0,00000,0000 -0.0002 -0.0005)
Полагаю, поскольку я не смог утвердить его с помощью документации libjpeg, это то, что коэффициенты относятся к пространству YCbCr. Я понимаю, что значения в libjpeg приведены после ошибки квантования, и первый компонент DC декодируется по разности, поэтому давайте посмотрим на второй компонент, его константа квантования равна 2 (получена с помощью шестнадцатеричного дампа из необработанных данных), поэтому разница может быть максимум 2.
Вычисленное значение DCT для второго коэффициента в расчете Matlab составляет 14,2, а в необработанном изображении - 8. И я не могу понять, что я сделал неправильно, любые идеи и предложения приветствуются.