Home > Source > Helper > cps_warp_1d.m

cps_warp_1d

PURPOSE ^

==============================================================

SYNOPSIS ^

function points = cps_warp_1d(points, warp_centre, r, d)

DESCRIPTION ^

 ==============================================================
 CPS_WARP_1D: Apply a Clamped plate spline warp to points

 Code written by Katherine Smith, 2003

    GENERAL

      points = cps_warp_1d(points, warp_centre, r, d)

    INPUT/S

      -points:
           The coordinates of the points before warping.

      -warp centre:
           co-ordinate of the centre of the warp, 

      -r:
           Radius of the region to be warped

      -d:
           The magnitude of the warp (in the same units as
           the points)
           
    OUTPUT/S

      -points:
           The coordinates of the points after warping.

    PENDING WORK

      -Rework these comments. Many of them must be inaccurate.

    KNOWN BUG/S

      -

    COMMENT/S

      -

    RELATED FUNCTION/S

      

    ABOUT

      -Created:     November 23rd, 2003
      -Last update: Novermber 25th, 2003
      -Revision:    0.0.2
      -Author:      R. S. Schestowitz, University of Manchester
 ==============================================================

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function points = cps_warp_1d(points, warp_centre, r, d)
0002 % ==============================================================
0003 % CPS_WARP_1D: Apply a Clamped plate spline warp to points
0004 %
0005 % Code written by Katherine Smith, 2003
0006 %
0007 %    GENERAL
0008 %
0009 %      points = cps_warp_1d(points, warp_centre, r, d)
0010 %
0011 %    INPUT/S
0012 %
0013 %      -points:
0014 %           The coordinates of the points before warping.
0015 %
0016 %      -warp centre:
0017 %           co-ordinate of the centre of the warp,
0018 %
0019 %      -r:
0020 %           Radius of the region to be warped
0021 %
0022 %      -d:
0023 %           The magnitude of the warp (in the same units as
0024 %           the points)
0025 %
0026 %    OUTPUT/S
0027 %
0028 %      -points:
0029 %           The coordinates of the points after warping.
0030 %
0031 %    PENDING WORK
0032 %
0033 %      -Rework these comments. Many of them must be inaccurate.
0034 %
0035 %    KNOWN BUG/S
0036 %
0037 %      -
0038 %
0039 %    COMMENT/S
0040 %
0041 %      -
0042 %
0043 %    RELATED FUNCTION/S
0044 %
0045 %
0046 %
0047 %    ABOUT
0048 %
0049 %      -Created:     November 23rd, 2003
0050 %      -Last update: Novermber 25th, 2003
0051 %      -Revision:    0.0.2
0052 %      -Author:      R. S. Schestowitz, University of Manchester
0053 % ==============================================================
0054 
0055 % maximum displacement which is diffeomorphism
0056 max_d = 0.67;
0057 %d = d/r;
0058 if abs(d) > max_d
0059   error('Non-diffeomorphic shift');
0060 end
0061 %if (warp_centre-r <0) | (warp_centre+r > max(points))
0062 if (warp_centre-r <-1) | (warp_centre+r > 1)
0063   error(['Warp out of bounds warp_centre: ',num2str(warp_centre),' r: ',num2str(r)]);
0064 end
0065 
0066 % Smith: (RSS: is this correct?) normalise to -1 to +1
0067 points = (points - warp_centre)/r;
0068 
0069 % for each point, find and apply G (which scales the shift)
0070 points_to_warp = points((points>= -1) & (points<= 1));
0071 G = zeros(size(points));
0072 G((points>= (-1)) & (points<= 1)) = ...
0073   ((ones(size(points_to_warp))*1/3 ...
0074   - points_to_warp.^2 ...
0075   + 2/3*(abs(points_to_warp).^3)));
0076 
0077 points = points + G*3*d;
0078 
0079 % and rescale
0080 points = points*r + warp_centre;

Generated on Thu 13-May-2004 18:00:46 by m2html © 2003