# Matlab psf2otf与fft2函数的关系

23 篇文章 0 订阅

psf2otf

Convert point-spread function to optical transfer function

Syntax

OTF = psf2otf(PSF)
OTF = psf2otf(PSF,OUTSIZE)

Description

OTF = psf2otf(PSF) computes the fast Fourier transform (FFT) of the
point-spread function (PSF) array and creates the optical transfer
function array, OTF, that is not influenced by the PSF off-centering.
By default, the OTF array is the same size as the PSF array.

OTF = psf2otf(PSF,OUTSIZE) converts the PSF array into an OTF array,
where OUTSIZE specifies the size of the OTF array. OUTSIZE cannot be
smaller than the PSF array size in any dimension.

To ensure that the OTF is not altered because of PSF off-centering,
psf2otf postpads the PSF array (down or to the right) with 0’s to
match dimensions specified in OUTSIZE, then circularly shifts the
values of the PSF array up (or to the left) until the central pixel
reaches (1,1) position.

Note that this function is used in image convolution/deconvolution
when the operations involve the FFT.

fft2

2-D fast Fourier transform

Syntax

Y = fft2(X)
Y = fft2(X,m,n)

l = [0 -1 0;-1 4 -1;0 -1 0]

l=010141010

 F = fft2(l,3,3)

F=01.50002.5981i1.5000+2.5981i1.50002.5981i3.0000+5.1962i6.00001.5000+2.5981i6.00003.00005.1962i

 P = psf2otf(l,[3,3])

P=033366666

To ensure that the OTF is not altered because of PSF off-centering,
psf2otf postpads the PSF array (down or to the right) with 0’s to
match dimensions specified in OUTSIZE, then circularly shifts the
values of the PSF array up (or to the left) until the central pixel
reaches (1,1) position.

S = circshift(l,-floor(size(l)/2))

S=411100100

FS = fft2(S)

FS=033366666

Matlab中psf2otf源码如下：

[psf, psfSize, outSize] = ParseInputs(varargin{:});

if  ~all(psf(:)==0),

% Pad the PSF to outSize

% Circularly shift otf so that the "center" of the PSF is at the
% (1,1) element of the array.
psf    = circshift(psf,-floor(psfSize/2));

% Compute the OTF
otf = fftn(psf);

% Estimate the rough number of operations involved in the
% computation of the FFT.
nElem = prod(psfSize);
nOps  = 0;
for k=1:ndims(psf)
nffts = nElem/psfSize(k);
nOps  = nOps + psfSize(k)*log2(psfSize(k))*nffts;
end

% Discard the imaginary part of the psf if it's within roundoff error.
if max(abs(imag(otf(:))))/max(abs(otf(:))) <= nOps*eps
otf = real(otf);
end
else
otf = zeros(outSize);
end

## 更多阅读

http://www.imageprocessingplace.com/forumphpBB3/phpBB3/viewtopic.php?f=1&t=9

03-16 80  02-22 1539
05-18 224
04-22 851
03-16 19
07-28 3313
07-28
03-16 99
11-12 722
05-20 4424
10-11 5109
04-20 1846 点击重新获取   扫码支付  余额充值