- 루프가 감소 된 2D 치수 DFT 함수를 작성하고 싶습니다.
내가 구현하려고하는 이산 푸리에 변환입니다 : MATLAB에서 fft2() 함수 작성
변환의 분리 성 속성 (실제로는 지수 함수)를 사용하여, 우리는 두 개의 1 차원 DFT의 곱으로이를 작성할 수 있습니다. 그런 다음 변환의 행 (아래의 행렬 wM)과 열 (행렬 wN)에 대한 지수 항을 계산할 수 있습니다.
이f = imread('cameraman.tif');
[M, N, ~] = size(f);
wM = zeros(M, M);
wN = zeros(N, N);
for u = 0 : (M - 1)
for x = 0 : (M - 1)
wM(u+1, x+1) = exp(-2 * pi * 1i/M * x * u);
end
end
for v = 0 : (N - 1)
for y = 0 : (N - 1)
wN(y+1, v+1) = exp(-2 * pi * 1i/N * y * v);
end
end
F = wM * im2double(f) * wN;
내가 해달라고입니다 가장 먼저하는 일이 2 개 루프를 사용하려는 그런 다음, 요약 프로세스 우리가 "F = WM은 * original_matrix * wN으로 구성된 복소 가중치 '로 곱 수 있습니다 여기에
내가 쓴 코드는 MxM 및 NxN 시간 실행. 거대한 매트릭스 (또는 이미지)를 사용하면 문제가 될 수 있습니다. 이 코드를 더 빨리 만들 수있는 기회가 있습니까 (예 : 루프 제거)?두 번째로 푸리에 변환 결과가 표시됩니다. 다른
% // "log" method
fl = log(1 + abs(F));
fm = max(fl(:));
imshow(im2uint8(fl/fm))
및
% // "abs" method
fa = abs(F);
fm = max(fa(:));
imshow(fa/fm)
나는 "복근"방법을 사용
, 나는 검은 색으로 만 그림 참조, 아무것도 : 나는 변환을 표시하지 않을 아래의 코드를 사용합니다. 당신이 생각하는 "abs"방법에있어 잘못된 점은 무엇입니까?그리고 마지막으로 MATLAB의 fft2() 함수와 내 함수의 변환 결과를 비교하면 광산이 MATLAB의 결과보다 어두운 그림을 표시합니다. 내가 여기서 무엇을 놓치고 있니? 구현 misktake?
는 MATLAB의 FFT2() 함수의 결과를 변환 :
내 자신의 기능의 결과를 변환
"검은 색 이미지"와 어두운 결과에 대해서는'imshow (image, []) '와 같이 대괄호를 추가하십시오. 그에 따라 결과의 크기가 조정됩니다. 그럴 수도 있습니다. – kkuilla
@kkuilla 나는 그것을 시도했지만 불행히도 그것은 작동하지 않았다 :/ – mehmet
실제로 스케일링 문제가있다. 하나를 다른 것으로 나눠서 시도해보십시오. 누락 된 부분에 대한 통찰력을 줄 수 있습니다. 그것은 fft 자체가 rigth 인 것처럼 보이지만 규모는 worng입니다. –