% Nota: parece que en Octave hay que pasar block_struct.data a block_struct

function [img] = mask_image(imag, M)
	T = dctmtx(8);
	% Aplica  DCT
	dct_fun = @(block_struct) T * block_struct.data * T';
	img = blockproc(imag, [8 8], dct_fun, 'PadPartialBlocks',true);
	% 'PadPartialBlocks' es para manejar imágenes de tamaño
	% que no sea múltiplo de 8

	% Multiplica los coeficientes de Fourier por la máscara
	mask_fun = @(block_struct) M .* block_struct.data;
	img = blockproc(img, [8 8], mask_fun, 'PadPartialBlocks',true);

	% Invierte DCT
	idct_fun = @(block_struct) T' * block_struct.data * T;
	img = blockproc(img, [8 8], idct_fun, 'PadPartialBlocks',true);
end
