Използвах функцията по-долу, за да филтрирам изображение. По принцип той задава коефициенти на DCT на 0, с изключение на горния ляв елемент 8x8, което означава, че филтрира цялата високочестотна част и оставя само нискочестотната част.
function I_out = em_DCT_filter(I_in,N)
I_trim = double(I_in)-128;
MYDCT=dctmtx(N);
dct = @(block_struct)MYDCT*block_struct.data*MYDCT';
B=blockproc(I_trim,[N,N],dct);
mask = zeros(N,N);
mask(1:N/4,1:N/4)= 1;
AnselmMask = @(block_struct)block_struct.data.*mask;
BMask=blockproc(B,[N N],AnselmMask);
InverseDct = @(block_struct)MYDCT'*block_struct.data*MYDCT;
BReversedl = blockproc(BMask,[N N],InverseDct);
I_out= uint8(BReversedl+128);
След обработка изображението изглежда така: Имам нужда от функцията, която премахва детайлите в изображението (напр. шарки по пуловера, сянка върху панталоните), което изглежда работи добре. Функцията обаче също така прави изображението много размито. Как мога да премахна подробностите, както и да запазя ясна структурата на региона? Например областта на пуловера/панталоните ще бъде с по-еднакъв цвят от преди.