Хорошо, теперь я пишу свой код здесь, и, пожалуйста, дайте мне знать, где я сделал неправильно

отаю над сжатием изображений на основе ортогонального полиномиального преобразования. Мое входное изображение серого цвета размером 256 * 256. Я делю это изображение на 4 на 4 блока. и затем применить ортогональный полиномиальный оператор к каждому блоку. но я не получаю правильный коэффициент. Пример:

Если у меня есть блок4x4 входного изображения:

I=[5 11 8 10;9 8 4 12; 1 10 11 4;19 6 15 7];

и мой полиномиальный оператор дляn=4 является:

[M] = [p0 p1 p2 p3]=[1 -3 1 -3;1 -1 -1 9;1 1 -1 -9;1 3 1 3]

После нахождения внешнего продукта:

[20 -24 24 -16; -24 84 -80 24;24 -80 84 -24;-16 24 -24 20]

когда я применил это к входным блокам изображений, мой ответ:

[-396 172 88 -104; 1012 -248 -376 616 -972 320 436 -552; 492 -104 4 172]

что неправильно. Так должно быть

[140 0 -6 -10; 32 -112 2 -174; 22 -30 8 -40;34 -54 84 -8]

что я сделал не так?

Мой код MATLAB для нахождения ортогонального полиномиального оператора приведен ниже.

clc
clear all
close all
ID=imread('cameraman.tif');  % input image
I=double(ID);
imshow(ID);
[r,c]=size(I);
y1=zeros(r,c);
x=1:4;
n=4;
mu=(n+1)/2;
p0=[1 1 1 1];
p1=x-mu;
p2=(x-mu).^2-(n.^2-1)/12;
p3=(x-mu).^3-((x-mu)*(3*n.^2-7))/20;
P=[p0;p1; p2; p3];
N=[1 1 1 1;-1.5 -0.5 0.5 1.5;1 -1 -1 1;-0.3 0.9 -0.9 0.3];
M=[1 1 1 1;-3 -1 1 3;1 -1 -1 1;-3 9 -9 3]; % after sacling
v=M';
O=M.*v;
T=O'; % Orthogonal polynomial operator
 for i=1:4:r
  for j=1:4:c
    y1(i:i+3,j:j+3)=I(i:i+3,j:j+3).*(double(T));
    end
 end
 figure,imshow(uint8(y1))
 y1

Ответы на вопрос(0)

Ваш ответ на вопрос