다음 필터를 사용하여 이미지를 필터링했습니다. 기본적으로 DCT의 계수는 왼쪽 상단 8x8 요소를 제외하고 0으로 설정됩니다. 즉, 모든 고주파수 부분을 필터링하고 저주파수 부분 만 남겨 둡니다.Matlab의 DCT 필터 이미지
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);
처리 한 후, 이미지는 다음과 같습니다 내가 (스웨터에, 예를 들어 패턴 바지에 그림자) 함수가 이미지의 세부 사항을 제거가 잘 작동 보인다 필요합니다. 그러나이 기능을 사용하면 이미지가 매우 흐릿 해집니다. 지역 구조를 명확하게 유지하는 것뿐만 아니라 세부 사항을 어떻게 제거 할 수 있습니까? 예를 들어, 스웨터/바지 영역은 이전보다 더 균일 한 색상 영역이됩니다.
DCT를 사용해야합니까? 왜 공간 필터링으로 이미지를 흐리게 할 수 없습니까? – rayryeng