Lavoro su una funzione in Matlab che calcola il DCT (discreto coseno trasformato) di un'immagine. Non so cosa non funzioni nel mio codice, ma ho ottenuto un'immagine di output con lo stesso numero. Voglio usare questa formula per il mio DCT.Trasformata coseno discreta (DCT) di un'immagine
Qualsiasi idea per favore.
function image_comp = dctII(image, b)
[h w] = size(image);
image = double(image) - 128;
block = zeros(b,b);
image_t=zeros(size(image));
for k=1:b:h
for l=1:b:w
image_t(k:k+b-1,l:l+b-1)= image(k:k+b-1,l:l+b-1);
for u=1:b
for v=1:b
if u == 0
Cu = 1/sqrt(2);
else
Cu = 1;
end
if v == 0
Cv = 1/sqrt(2);
else
Cv = 1;
end
Res_sum=0;
for x=1:b;
for y=1:b
Res_sum = Res_sum + ((image_t(x,y))*cos(((2*x)+1)*u*pi/(2*b))*cos(((2*y)+1)*v*pi/(2*b)));
end
end
dct= (1/4)*Cu*Cv*Res_sum;
block(u,v) = dct;
end
end
image_comp(k:k+b-1,l:l+b-1)=block(u,v);
end
end
end
Il codice funziona con la correzione indicata di seguito. Ma ti suggerisco di leggere i loop, altrimenti avrai problemi a lavorare con molti dati. –