2014-11-07 7 views
0

다음 필터를 사용하여 이미지를 필터링했습니다. 기본적으로 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); 

처리 한 후, 이미지는 다음과 같습니다 before filterafter filter 내가 (스웨터에, 예를 들어 패턴 바지에 그림자) 함수가 이미지의 세부 사항을 제거가 잘 작동 보인다 필요합니다. 그러나이 기능을 사용하면 이미지가 매우 흐릿 해집니다. 지역 구조를 명확하게 유지하는 것뿐만 아니라 세부 사항을 어떻게 제거 할 수 있습니까? 예를 들어, 스웨터/바지 영역은 이전보다 더 균일 한 색상 영역이됩니다.

+0

DCT를 사용해야합니까? 왜 공간 필터링으로 이미지를 흐리게 할 수 없습니까? – rayryeng

답변

1

기본적으로 "로컬 저역 통과 필터"를 적용했습니다.
"퍼지"모양이 그 결과입니다. 일반적으로 세부 정보 및 "선명도"로 해석하는 고주파에서 데이터를 제거했습니다.

고주파 세부 정보는 제거하고 큰 테두리는 그대로 유지해야합니다.
좋은 방법은 이방성 확산과 같은 것을 사용하는 것입니다.
최적화 된 매개 변수를 사용하면 원하는 모양을 얻을 수 있습니다.
일반적으로 이러한 방법을 이미지 추상화라고합니다.

여기에 고급 비 등방성 확산을위한 훌륭한 오픈 소스 코드입니다 :

https://github.com/RoyiAvital/Fast-Anisotropic-Curvature-Preserving-Smoothing

일, 당신이 기여할 수 있다면, 그것은 놀라운 것입니다.