motion_corr2.m
上传用户:trade789
上传日期:2018-05-10
资源大小:603k
文件大小:4k
源码类别:

2D图形编程

开发平台:

Matlab

  1. % MOTION_CORR - Computes a set of interest point correspondences
  2. %               between two successive frames in an image
  3. %               sequence.  First, a Harris corner detector is used
  4. %               to choose interest points.  Then, CORR is used to
  5. %               obtain a matching, using both geometric constraints
  6. %               and local similarity of the points' intensity
  7. %               neighborhoods.
  8. %
  9. % Usage:  [p1, p2, a, F] = motion_corr(im1, im2[, OPTIONS])
  10. %
  11. % Arguments:   
  12. %            im1    - an image
  13. %            im2    - another image
  14. % Options:
  15. %            'p1'        - an m x 3 matrix whose rows are
  16. %                          (homogeneous) coordinates of interest
  17. %                          points in im1; if supplied,
  18. %                          this matrix will be returned as p1; it can be
  19. %                          the empty matrix [] (in which case it is as if
  20. %                          they were not supplied)
  21. %            'smoothing' - pre-smoothing before corner detection
  22. %                          (default: 2.0)
  23. %            'nmsrad'    - radius for non-maximal suppression of Harris
  24. %                          response matrix (default: 2)
  25. %            'rthresh'   - relative threshold for Harris response
  26. %                          matrix (default: 0.3)
  27. %            'rthresh2'  - smaller relative threshold used to
  28. %                          search for matches in the second image
  29. %                          (default: rthresh / 2.0)
  30. %            'sdthresh'  - a distance threshold; no matches will be
  31. %                          accepted such that the Sampson distance
  32. %                          is greater than the threshold (default: 1.0)
  33. %            'dthresh'   - a distance threshold; no matches will be
  34. %                          accepted such that the Euclidean
  35. %                          distance between the matched points is
  36. %                          greater than dthresh (default: 30)
  37. %
  38. %   This function also accepts options for CORR.
  39. %
  40. % Returns:
  41. %
  42. %            a      - an m x 1 assignment vector.  a(i) is the index of
  43. %                     the feature of the second image that was matched
  44. %                     to feature i of the first image.  For example,
  45. %                     p1(i, :) is matched to p2(a(i), :).  If feature i
  46. %                     (of the first image) was not matched to any 
  47. %                     feature in the second image, then a(i) is zero.
  48. %            F      - the fundamental matrix used to compute the matching.
  49. %
  50. % See also CORR and HARRIS_PTS.
  51. % Copyright (C) 2002 Mark A. Paskin
  52. %
  53. % This program is free software; you can redistribute it and/or modify
  54. % it under the terms of the GNU General Public License as published by
  55. % the Free Software Foundation; either version 2 of the License, or
  56. % (at your option) any later version.
  57. %
  58. % This program is distributed in the hope that it will be useful, but
  59. % WITHOUT ANY WARRANTY; without even the implied warranty of
  60. % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  61. % General Public License for more details.
  62. %
  63. % You should have received a copy of the GNU General Public License
  64. % along with this program; if not, write to the Free Software
  65. % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  66. % USA.
  67. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  68. function [p1, p2 , a, F] = motion_corr2(f1,k1,f2,k2,im1,im2, varargin)
  69. % STEP 0: Process options
  70. [p1, ...
  71.  smoothing, ...
  72.  nmsrad, ...
  73.  rthresh, ...
  74.  rthresh2, ...
  75.  sdthresh, ...
  76.  dthresh, ...
  77.  corr_opts] = process_options(varargin, 'p1', [], ...
  78.                                         'smoothing', 2, ...
  79.                                         'nmsrad', 2, ...
  80.                                         'rthresh', 0.3, ...
  81.                                         'rthresh2', nan, ...
  82.                 'sdthresh', 1e-2, ...
  83.                 'dthresh', 30);
  84. if (isnan(rthresh2)) rthresh2 = rthresh / 2.0; end
  85.   
  86. % STEP 2: Form a cost matrix based upon local properties of the
  87. %         interest points.  The cost metric we use here is the sum of
  88. %         squared differences of intensity values in a square
  89. %         neighborhood around the pixels; a hard Euclidean distance
  90. %         threshold is implemented so all point pairs that are too far
  91. %         apart are given infinite cost.
  92. C = make_cost(k1,k2);
  93. p1 = f1(:,1:2); %create homogeneous coordinates 
  94. p2 = f2(:,1:2);
  95. p1(:,3) = 1;
  96. p2(:,3) = 1;
  97. % STEP 3: Compute the correspondence.
  98. [a, F] = corr(p1, p2, C, 'sdthresh', sdthresh, corr_opts{:});