[問題] 傅立葉轉換已回收

看板MATLAB作者 (丸屁屎 好看)時間16年前 (2008/10/14 16:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
我知道一般的傅立葉轉換是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
文章代碼(AID): #18z5vgUI (MATLAB)
文章代碼(AID): #18z5vgUI (MATLAB)