이상적인 저역 통과 필터에 대한 다음 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')
이것은 코드 검토의 경계에 있습니다. 이 코드를 얼마나 이해했는지 보여 주실 수 있습니까? 아마도 줄 끝 부분에 메모의 각 줄에 줄 주석을 추가했을 것입니다. 이것은 우리가 지금까지 그것을 이해하는데 얼마나 많은 노력을 기울 였는지 알려주고, 당신이 코스를 벗어나기 시작하는 곳을 알려줍니다. – DevNull
@ 도그 버트 (Dogbert), 나는 나의 이해에 대한 세부 사항을 추가했고 각 줄에 줄 주석을 추가했다. Pls check –
@Dogbert 나는 내 질문에 대해 설명하는 Matlab 2E를 사용하여 Rafael C. Gonzalez의 디지털 이미지 프로세싱을 읽었지만 제대로 이해하지 못했습니다. 누군가가 나를 분명히 설명 할 수 있다면 도움이 될 것입니다. –