• 大小: 327KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-15
  • 语言: Matlab
  • 标签: 三维重建  

资源简介

傅里叶变换积分法-frankotchellapa.m。matlab代码和文献

资源截图

代码片段和文件信息

% FRANKOTCHELLAPPA  - Generates integrable surface from gradients
%
% An implementation of Frankot and Chellappa‘a algorithm for constructing
% an integrable surface from gradient information.
%
% Usage:      z = frankotchellappa(dzdxdzdy)
%
% Arguments:  dzdx  - 2D matrices specifying a grid of gradients of z
%             dzdy     with respect to x and y.
%
% Returns:    z      - Inferred surface heights.

% Reference:
%
% Robert T. Frankot and Rama Chellappa
% A Method for Enforcing Integrability in Shape from Shading
% IEEE PAMI Vol 10 No 4 July 1988. pp 439-451
%
% Note this code just implements the surface integration component of the
% paper (Equation 21 in the paper).  It does not implement their shape from
% shading algorithm.

% Copyright (c) 2004 Peter Kovesi
% School of Computer Science & Software Engineering
% The University of Western Australia
% http://www.csse.uwa.edu.au/

% Permission is hereby granted free of charge to any person obtaining a copy
% of this software and associated documentation files (the “Software“) to deal
% in the Software without restriction subject to the following conditions:

% The above copyright notice and this permission notice shall be included in 
% all copies or substantial portions of the Software.
%
% The Software is provided “as is“ without warranty of any kind.

% October 2004

function z = frankotchellappa(dzdxdzdy)
    
    if ~all(size(dzdx) == size(dzdy))
      error(‘Gradient matrices must match‘);
    end

    [rowscols] = size(dzdx);
    
    % The following sets up matrices specifying frequencies in the x and y
    % directions corresponding to the Fourier transforms of the gradient
    % data.  They range from -0.5 cycles/pixel to + 0.5 cycles/pixel. The
    % fiddly bits in the line below give the appropriate result depending on
    % whether there are an even or odd number of rows and columns
    
    [wx wy] = meshgrid(([1:cols]-(fix(cols/2)+1))/(cols-mod(cols2)) ...
([1:rows]-(fix(rows/2)+1))/(rows-mod(rows2)));
    
    % Quadrant shift to put zero frequency at the appropriate edge
    wx = ifftshift(wx); wy = ifftshift(wy);

    DZDX = fft2(dzdx);   % Fourier transforms of gradients
    DZDY = fft2(dzdy);

    % Integrate in the frequency domain by phase shifting by pi/2 and
    % weighting the Fourier coefficients by their frequencies in x and y and
    % then dividing by the squared frequency.  eps is added to the
    % denominator to avoid division by 0.
    
    Z = (-j*wx.*DZDX -j*wy.*DZDY)./(wx.^2 + wy.^2 + eps);  % Equation 21
    
    z = real(ifft2(Z));  % Reconstruction

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-10-20 22:48  frankotchellappa\
     文件      316158  2011-08-31 16:12  frankotchellappa\Depth Recovery from Noisy Gradient Vector Fields Using Regularization-可使用.pdf
     文件       55985  2016-04-04 22:30  frankotchellappa\DepthFromGradient.pdf
     目录           0  2016-10-20 22:57  frankotchellappa\frankotchellappa_MatlabCode\
     文件        2612  2015-12-05 18:04  frankotchellappa\frankotchellappa_MatlabCode\frankotchellappa.m
     文件        6881  2016-04-13 20:29  frankotchellappa\frankotchellappa_MatlabCode\g2sTestSurf.m
     文件        1608  2016-10-20 22:46  frankotchellappa\frankotchellappa_MatlabCode\TestFrankotchellappa.m
     文件         521  2016-10-20 22:57  frankotchellappa\frankotchellappa_MatlabCode\说明:运行TestFrankotchellappa.m简短说明.txt

评论

共有 条评论