I=im2double(rgb2gray(imread('yourimage.png'))); %select channels separation
%%%for non-overlapping blocks
fun = @(block_struct) dct2(block_struct.data);
imageY =(blockproc(I,[8 8],fun));
BY=im2col(imageY,[8 8],'distinct');
FinalOP=BY(1:8,:);
%dct-8x8 ,if you want u can choose [64 64].
%you need the first column of dct?.so ,i.e 8 values of dct in this case.
для перекрывающихся блоков: используйте 'sliding'
, но у вас проблема с памятью.тогда вы должны использовать свой собственный цикл for.