compresor imagen dct matlab
Publicado por luis manuel (1 intervención) el 20/04/2009 02:36:21
Hola a todos, estoy intentando hacer un programa en matlab para comprimir imagenes mediante dct, este es mi codigo:
[f, p1]=uigetfile(('*.bmp;*.pcx;*.tif;*.png'), 'IMAGEN PARA SER ADQUIRIDA');
s1=strcat(p1,f);
[x, map]=imread(s1);
[M,N,T]=size(x);
i=1;
j=1;
m=x(i:i+M-1,j:j+N-1,:);
m = rgb2ycbcr(m);
b0=m(1:M-1, 1:N-1,1);
b1=m(1:M-1, 1:N-1,2);
b2=m(1:M-1, 1:N-1,3);
bloque1 = b0;
bloque1 = double (bloque1);
coeficientes = dct2(bloque1);
cuantizacion=round(coeficientes./100);
coeficientes2=cuantizacion.*100;
bloque_1 = idct2(coeficientes2);
bloque_1 = round(bloque_1);
bloque_1=uint8(bloque_1);
%--------------------------------------------------------------------------
bloque2 = b1;
bloque2 = double (bloque2);
coeficientes = dct2(bloque2);
cuantizacion=round(coeficientes./100);
coeficientes2=cuantizacion.*100;
bloque_2 = idct2(coeficientes2);
bloque_2 = round(bloque_2);
bloque_2=uint8(bloque_2);
bloque3 = b2;
bloque3 = double (bloque3);
coeficientes = dct2(bloque3);
cuantizacion=round(coeficientes./100);
coeficientes2=cuantizacion.*100;
bloque_3= idct2(coeficientes2);
bloque_3 = round(bloque_3);
bloque_3=uint8(bloque_3);
%--------------------------------------------------------------------------
%-----------
m_(1:M-1, 1:N-1,1)=bloque_1;
m_(1:M-1, 1:N-1,2)=bloque_2;
m_(1:M-1, 1:N-1,3)=bloque_3;
m=ycbcr2rgb(m);
m_=ycbcr2rgb(m_);
figure(1);imshow(m);
figure(2);imshow(m_);
Lo he revisado mil veces pero no se que falla, la imagen que en teoria debe estar comprimida sale en color rosa y blanco. Si alguien me pudiera ayudar se lo agradeceria muchisimo.
Un saludo y muchas gracias de antemano.
[f, p1]=uigetfile(('*.bmp;*.pcx;*.tif;*.png'), 'IMAGEN PARA SER ADQUIRIDA');
s1=strcat(p1,f);
[x, map]=imread(s1);
[M,N,T]=size(x);
i=1;
j=1;
m=x(i:i+M-1,j:j+N-1,:);
m = rgb2ycbcr(m);
b0=m(1:M-1, 1:N-1,1);
b1=m(1:M-1, 1:N-1,2);
b2=m(1:M-1, 1:N-1,3);
bloque1 = b0;
bloque1 = double (bloque1);
coeficientes = dct2(bloque1);
cuantizacion=round(coeficientes./100);
coeficientes2=cuantizacion.*100;
bloque_1 = idct2(coeficientes2);
bloque_1 = round(bloque_1);
bloque_1=uint8(bloque_1);
%--------------------------------------------------------------------------
bloque2 = b1;
bloque2 = double (bloque2);
coeficientes = dct2(bloque2);
cuantizacion=round(coeficientes./100);
coeficientes2=cuantizacion.*100;
bloque_2 = idct2(coeficientes2);
bloque_2 = round(bloque_2);
bloque_2=uint8(bloque_2);
bloque3 = b2;
bloque3 = double (bloque3);
coeficientes = dct2(bloque3);
cuantizacion=round(coeficientes./100);
coeficientes2=cuantizacion.*100;
bloque_3= idct2(coeficientes2);
bloque_3 = round(bloque_3);
bloque_3=uint8(bloque_3);
%--------------------------------------------------------------------------
%-----------
m_(1:M-1, 1:N-1,1)=bloque_1;
m_(1:M-1, 1:N-1,2)=bloque_2;
m_(1:M-1, 1:N-1,3)=bloque_3;
m=ycbcr2rgb(m);
m_=ycbcr2rgb(m_);
figure(1);imshow(m);
figure(2);imshow(m_);
Lo he revisado mil veces pero no se que falla, la imagen que en teoria debe estar comprimida sale en color rosa y blanco. Si alguien me pudiera ayudar se lo agradeceria muchisimo.
Un saludo y muchas gracias de antemano.
Valora esta pregunta


0