[問題] 傅立葉轉換已回收
我知道一般的傅立葉轉換是fft2()
但我想請問一下~有人使用過FrFT(分數傅立葉轉換)嗎?
我手上有程式 可是是跑二值化影像(邏輯模式)的 我不曉得怎麼改成
輸入input是使用灰階影像(double) 然後輸出是振幅跟相位呢?
程式部分如下 x是輸入256*256的邏輯形式影像
for beta = 0.4 : 0.2 : 2
k = k+1;
y = frft2d( frft2d( x, beta ), beta );
%y = fftshift(y);
y = abs(y);
m1 = min(min(y));
m2 = max(max(y));
sc = 10000; %100000;
y = sc*(y-m1)/(m2-m1);
y = 256-y;
subplot( 2,2,k );
image(y);
axis image
set(gca, 'XTick', []);
set(gca, 'YTick', []);
colormap gray;
title(sprintf('\\alpha=%.2f', beta));
end
其中function frft2d
程式如下
function y = frft2d(x,alpha)
n = length(x);
for i=1:n
y(i,:) = frft( x(i,:), alpha );
end
for j=1:n
y(:,j) = frft( y(:,j), alpha );
end
然後function frft
程式如下
function res = frft(f, alpha)
N = length(f);
w = exp( -2i*pi*alpha/N );
res = czt(f,N,w,1);
最後CZT
function g = czt(x, k, w, a)
[m, n] = size(x); oldm = m;
if m == 1, x = x(:); [m, n] = size(x); end
if nargin < 2, k = length(x); end
if nargin < 3, w = exp(-sqrt(-1) .* 2 .* pi ./ k); end
if nargin < 4, a = 1; end
if any([size(k) size(w) size(a)]~=1),
error('Inputs M, W and A must be scalars.')
end
%------- Length for power-of-two fft.
nfft = 1;
while nfft < (m + k - 1), nfft = 2 .* nfft; end
%------- Premultiply data.
kk = ( (-m+1):(k-1) ).';
kk2 = (kk .^ 2) ./ 2;
ww = w .^ (kk2); % <----- Chirp filter is 1./ww
aa = a .^ ( -kk( m:(2*m-1) ) );
y = x .* [ ( aa.*ww( m:(2*m-1) ) ) * ones(1, n) ];
%------- Fast convolution via FFT.
fy = fft( y, nfft );
fv = fft( 1 ./ ww, nfft ); % <----- Chirp filter.
fy = fy .* ( fv * ones(1, n) );
g = ifft( fy );
%------- Final multiply.
g = g( m:(m+k-1), : ) .* [ ww( m:(m+k-1) ) * ones(1, n) ];
if oldm == 1, g = g.';
end
麻煩了 有誰可以幫我看看哪裡有錯?
--
不說出的溫柔 http://www.wretch.cc/album/pink1025
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.125.20.191
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章