2012-04-01 2 views
1

어떤 필터가 임의의 그림에 사용되었는지 결정해야합니다. 올바른 방법 (가우시안, 사전 설치, 소블, 평균 ...)을 감지하는 일반적인 방법이 있거나 일부를 코딩하는 것이 영리한가요? 일종의 '무력'탐지?필터 감지

Matlab에서 찾으려고했지만 더 붙일 방법이 없습니다. 을 효율적으로 검색하는 방법이 없습니다. 지금은 건초 더미에서 바늘을 찾는 것과 같습니다. 나 또한 bash-script와 imagemagick을 사용하는 것을 생각했지만, 이것이 배가 고픈 자원 일 것입니다.

나는이 문제가되지 않을 것 문질러서,하지만 매우 시간이 많이 걸리는 F 원본 이미지하자 필터를 추측이

f = fspecial('gaussian', [3 3], 1); 
res = imfilter(orginal, f); 
corr2(res, pic); 
+1

필터링 된 이미지와 원본 이미지를 가지고 있다면이 필터 계수를 결정하는 것은 매우 간단하고, 거기에서 당신은 필터 커널을 분류 할 수 있습니다. –

+0

예, 둘 다 갖지만 계수를 어떻게 결정합니까? matlab에요? – NaN

+1

두 이미지의 FFT를 취하여 디컨 볼루션 (deconvolve)을 한 다음 나누어서 결과의 역 FFT를 취할 수 있습니다. 예 : http://www.mathworks.com/matlabcentral/fileexchange/5465-fast-deconvolution –

답변

4

처럼 시도, 이 g 할 것을입니다 그래서 번 및 H f를 적용하여 필터를 여과 :

f * h = g 

전달 그쪽 주파수 도메인에 t :

F.H = G, so H = G/F 

문제는 반전 F가 노이즈에 매우 민감하다는 것입니다.

MATLAB에서 그 구현 방법 :

close all; 
f = imread('cameraman.tif'); 
[x,y] = size(f); 
figure,imshow(f); 
h = fspecial('motion', 20, 40); % abitrary filter just for testing the algorithm 
F = fft2(f); 
H = fft2(h,x,y); 
G = F.*H; 
g = ifft2(G); % the filtered image 
figure, imshow(g/max(g(:))); 
% Inverting the original image 
epsilon = 10^(-10); 
small_values = find(abs(F)<epsilon); 
F(small_values) = epsilon; 
F_i = ones(x,y)./F; 
H_calculated = G.*F_i; 

h_calculated = ifft2(H_calculated); 

% remove really small values to try to infer the original size of h 
r = sum(h_calculated,1)<epsilon; 
c = sum(h_calculated,2)<epsilon; 
h_real = h_calculated(~r,~c); 

% Calculate error 
% redo the filtering with the found filter 
figure,g_comp = ifft2(fft2(f).*fft2(h_real,x,y)); 
imshow(g_comp/max(g_comp(:))); 
rmse = sqrt(mean(mean((double(g_comp) - double(g)).^2,2),1)) 

편집을 : 그냥 설명하기 위해 엡실론 부분 :

그것은 F의 일부 값이 제로이거나 제로에 가까운 것이 될 수 있습니다. 우리가이 작은 값들로 F를 반전 시키려고한다면 무한성에 문제가 생길 것입니다. 이를 해결하는 쉬운 방법은 임의로 작은 한도 인 코드의 엡실론보다 작은 모든 값을 자르는 것입니다.

수학적으로는, 무엇을 수행 한 것은 이것이다 :

For all F < epsilon, F = epsilon 
+3

또한 스펙트럼 널 (null)에 매우 민감합니다. –

+2

네, 압니다. 그래서 그것을 잘라 버리는 것입니다. 나에게이 접근법의 실제 문제는 잡음이다. 그러나 그것은 전혀 아무것도 아닌 것보다 확실히 좋습니다 ... – Castilho