Recorrer una matriz de 8 en 8
Publicado por Maria (2 intervenciones) el 22/04/2019 19:59:16
Buenas tardes,
Estoy implementando el algoritmo JPEG en Matlab para comprimir imagenes.
Una imagen en color como sabeis, cuando hacemos el imread('Imagen.tif') nos da 3 matrices de dimension 353x629 cada una, en este caso.
Digamos que tenemos
Matriz A, B, C
A cada una de esas matrices tengo que aplicar la DCT (Transformada discreta del coseno), esto no viene ahora al caso pero para que entendais mejor, la DCT funciona mejor si se trabaja con bloques pequeños de 8x8 por ejemplo.
Lo que quiero es recorrer la matriz A (353x629) en bloques de 8x8 para ir aplicando a cada bloque la DCT.
Tengo el codigo para recorrer solo un bloquecito, pero no sabria hacer un bucle for para que una vez acabe con ese bloque de 8x8 pase al siguiente hasta que termine la matriz. Y una vez acabe con la matrix A, lo haga con la B y la C
Os dejo lo que tengo y haber si podeis ayudarme.
Gracias de antemano.
[nfil, ncol] = size(A);
nf=nfil-mod(nfil,8); % para que deje la matriz en una dimension multiplo de 8.
nc=ncol-mod(ncol,8);
A = double(A) - 128;
%bucle para el primer bloque de 8x8:
for i = [1:8:nf] % Bloques de 8 en las filas
for j = [1:8: nc] % (si no es múltiplo de 8 se ignoran las últimas)
Bloq = A(i:i+7, j:j+7); % Uno de los bloques
TB = DCTBloque(Bloq); % Se le aplica la DCT
CuantTB= round(TB./m); %se divide por la matriz m de cuantificación
MatrizComp(i:i+7, j:j+7)= CuantTB ; % hace como el zigzag
end
end
Estoy implementando el algoritmo JPEG en Matlab para comprimir imagenes.
Una imagen en color como sabeis, cuando hacemos el imread('Imagen.tif') nos da 3 matrices de dimension 353x629 cada una, en este caso.
Digamos que tenemos
Matriz A, B, C
A cada una de esas matrices tengo que aplicar la DCT (Transformada discreta del coseno), esto no viene ahora al caso pero para que entendais mejor, la DCT funciona mejor si se trabaja con bloques pequeños de 8x8 por ejemplo.
Lo que quiero es recorrer la matriz A (353x629) en bloques de 8x8 para ir aplicando a cada bloque la DCT.
Tengo el codigo para recorrer solo un bloquecito, pero no sabria hacer un bucle for para que una vez acabe con ese bloque de 8x8 pase al siguiente hasta que termine la matriz. Y una vez acabe con la matrix A, lo haga con la B y la C
Os dejo lo que tengo y haber si podeis ayudarme.
Gracias de antemano.
[nfil, ncol] = size(A);
nf=nfil-mod(nfil,8); % para que deje la matriz en una dimension multiplo de 8.
nc=ncol-mod(ncol,8);
A = double(A) - 128;
%bucle para el primer bloque de 8x8:
for i = [1:8:nf] % Bloques de 8 en las filas
for j = [1:8: nc] % (si no es múltiplo de 8 se ignoran las últimas)
Bloq = A(i:i+7, j:j+7); % Uno de los bloques
TB = DCTBloque(Bloq); % Se le aplica la DCT
CuantTB= round(TB./m); %se divide por la matriz m de cuantificación
MatrizComp(i:i+7, j:j+7)= CuantTB ; % hace como el zigzag
end
end
Valora esta pregunta
![Me gusta: Está pregunta es útil y esta clara Me gusta: Está pregunta es útil y esta clara](/img/img.png?11.51)
![NO me gusta: Está pregunta no esta clara o no es útil No me gusta: Está pregunta no esta clara o no es útil](/img/img.png?11.51)
0