2013-10-22 4 views
1

이상적인 저역 통과 필터에 대한 다음 MATLAB 코드를 이해하도록 도와주십시오. 아래 코드에서 Part2를 이해할 수 없습니다. 왜 우리가 이렇게하고 있는지 설명해주십시오.MATLAB의 이상적인 저역 통과 필터 개념

나는 내 질문에 대해 설명하는 Matlab 2E를 사용하여 Rafael C. Gonzalez의 디지털 이미지 프로세싱을 읽었지만 제대로 이해하지 못했습니다. 누군가가 나를 분명히 설명 할 수 있다면 도움이 될 것입니다.

참고 : Dogbert, 저의 이해는 이미지 변환을 적용하면 저주파 성분과 고주파 성분을 분리하는 데 도움이된다는 것입니다. 왼쪽 상단에는 높은 주파수 계수가 포함 된 더 낮은 주파수 계수가 포함됩니다. 저주파 성분은 고주파 성분이 이미지에 더 작은 세부 사항을 포함하는 모든 세부 사항 (근사치)을 포함합니다. 로우 패스 필터에서 컷오프 프리퀀시 아래의 주파수는 통과 할 수 있으며 컷오프 위의 프리퀀시는 차단됩니다.

%IDEAL LOW-PASS FILTER 

%Part 1 
     function idealfilter(X,P) % X is the input image and P is the cut-off freq 
     f=imread(X); % reading an image X 
     [M,N]=size(f); % Saving the the rows of X in M and columns in N 
     F=fft2(double(f)); % Taking Fourier transform to the input image 
%Part 2 % I don't understand this part 
     u=0:(M-1); 
     v=0:(N-1); 
     idx=find(u>M/2); 
     u(idx)=u(idx)-M; 
     idy=find(v>N/2); 
     v(idy)=v(idy)-N; 
     [V,U]=meshgrid(v,u); 
     D=sqrt(U.^2+V.^2); 

%Part 3 
     H=double(D<=P);  % Comparing with the cut-off frequency 
     G=H.*F;    % Convolution with the Fourier transformed image 
     g=real(ifft2(double(G))); % Inverse Fourier transform 
     imshow(f),figure,imshow(g,[ ]); % Displaying input and output image 
     end 

Part2에서 각 명령을 M = 8 및 N = 8에 대해 개별적으로 실행하려고했습니다. 나는

u=0:(M-1); ==> u = 0 1 2 3 4 5 6 7 

v=0:(N-1); ==> v = 0 1 2 3 4 5 6 7 

idx=find(u>M/2); ==> idx = 6 7 8 

u(idx)=u(idx)-M; ==> 0 1 2 3 4 -3 -2 -1 

idy=find(v>N/2); ==> idy = 6 7 8 

v(idy)=v(idy)-N; ==> 0 1 2 3 4 -3 -2 -1 

[V,U]=meshgrid(v,u); ==> 

V= 

    0  1  2  3  4 -3 -2 -1 
    0  1  2  3  4 -3 -2 -1 
    0  1  2  3  4 -3 -2 -1 
    0  1  2  3  4 -3 -2 -1 
    0  1  2  3  4 -3 -2 -1 
    0  1  2  3  4 -3 -2 -1 
    0  1  2  3  4 -3 -2 -1 
    0  1  2  3  4 -3 -2 -1 

U = 

    0  0  0  0  0  0  0  0 
    1  1  1  1  1  1  1  1 
    2  2  2  2  2  2  2  2 
    3  3  3  3  3  3  3  3 
    4  4  4  4  4  4  4  4 
    -3 -3 -3 -3 -3 -3 -3 -3 
    -2 -2 -2 -2 -2 -2 -2 -2 
    -1 -1 -1 -1 -1 -1 -1 -1 

나는 그들이 이런 식으로하는 이유를 모르겠다. 이 MATLAB 코드를 이해하도록 도와주세요. 또한 아래의 MATLAB 코드에서 fftshift을 사용해야하는 이유를 이해할 수 있도록 도와주십시오. MATLAB 문서를 읽었지만 제대로 이해하지 못했습니다. 가능한 경우 예를 들어 설명하십시오. 미리 감사드립니다. 내가 도와 줄께.

%This code is used to Butterworth lowpass filter 
close all; 
clear all; 
clc; 
im=imread('lean.jpg'); 
fc=20;%Cutoff frequency 
n=1; 
[co,ro] = size(im); 
cx = round(co/2); % find the center of the image 
cy = round (ro/2); 
imf=fftshift(fft2(im)); 
H=zeros(co,ro); 
for i = 1 : co 
    for j =1 : ro 
     d = (i-cx).^2 + (j-cy).^ 2; 
     H(i,j) = 1/(1+((d/fc/fc).^(2*n))); 
    end; 
end; 
outf = imf .* H; 
out = abs(ifft2(outf)); 
imshow(im),title('Original Image'),figure,imshow(uint8(out)),title('Lowpass Filterd Image') 
+0

이것은 코드 검토의 경계에 있습니다. 이 코드를 얼마나 이해했는지 보여 주실 수 있습니까? 아마도 줄 끝 부분에 메모의 각 줄에 줄 주석을 추가했을 것입니다. 이것은 우리가 지금까지 그것을 이해하는데 얼마나 많은 노력을 기울 였는지 알려주고, 당신이 코스를 벗어나기 시작하는 곳을 알려줍니다. – DevNull

+0

@ 도그 버트 (Dogbert), 나는 나의 이해에 대한 세부 사항을 추가했고 각 줄에 줄 주석을 추가했다. Pls check –

+0

@Dogbert 나는 내 질문에 대해 설명하는 Matlab 2E를 사용하여 Rafael C. Gonzalez의 디지털 이미지 프로세싱을 읽었지만 제대로 이해하지 못했습니다. 누군가가 나를 분명히 설명 할 수 있다면 도움이 될 것입니다. –

답변

1

주어진 주파수보다 높은 주파수를 제로화합니다.
방사형 마스크를 사용하여 어느 주파수가 들어오고 나가는지를 설정합니다.
DFT 변환이 0에서 2pi이므로 그리드를 만들고 이동 시켰습니다.

관련 문제