home *** CD-ROM | disk | FTP | other *** search
/ vis-ftp.cs.umass.edu / vis-ftp.cs.umass.edu.tar / vis-ftp.cs.umass.edu / pub / Software / ASCENDER / ascender.tar.Z / ascender.tar / Epipolar / epidemo.lisp < prev    next >
Lisp/Scheme  |  1995-07-20  |  4KB  |  117 lines

  1. ;;; EPIDEMO.LISP
  2. ;;;
  3. ;;; Epipolar matching demo (in RCDE)
  4. ;;;
  5. ;;; Author: Robert T. Collins
  6. ;;; Date: Mar 6, 1995
  7. ;;; based on my earlier epipolar.lisp, written Dec 28, 1993
  8. ;;;
  9. ;-----------------------------------------------------------------
  10. ; (c) Copyright 1995 by The University of Massachusetts
  11. ;------------------------------------------------------------------
  12.  
  13. (in-package 'cme)
  14.  
  15. (unless (find-package 'epipolar)
  16.     (make-package 'epipolar :nicknames '(epi)))
  17.  
  18. (unless (find-package 'linear-algebra)
  19.     (make-package 'linear-algebra :nicknames '(la)))
  20.  
  21. (defvar user::*epipolar-directory* "~/Epi/")
  22. (defvar user::*isr2-directory* "~/Epi/ISR/")
  23. (defvar epi::*mb1-data-directory* "~/Epi/MB1data/")
  24.  
  25. (defvar *ref* nil)
  26. (defvar *others* nil)
  27. (defvar *all* nil)
  28.  
  29. (defun set-ref-view (index)
  30.   (setf *ref*
  31.     (ecase index
  32.       (1 epi::*j1view*)
  33.       (2 epi::*j2view*)
  34.       (3 epi::*j3view*)
  35.       (4 epi::*j4view*)
  36.       (5 epi::*j5view*)
  37.       (6 epi::*j6view*)
  38.       (7 epi::*j7view*)
  39.       (8 epi::*j8view*)))
  40.   (when epi::*demo-mode* (epi::activate-window (epi::view-window *ref*)))
  41.   (setf *others* (remove *ref* *all* :test #'eq))
  42.   *ref*)
  43.  
  44.  
  45. (defun init-feat-sets (view)
  46.   (let ((world (cme::get-2d-world-named (epi::view-label view))))
  47.     (make-2d-feature-set :world world :name "UMass 2d Buildings")))
  48.  
  49. (defun init-epidemo ()
  50.   (if (cme::get-3d-world-named "Radius Model Board 1")
  51.      (progn
  52.        (load (format nil "~aload-epipolar" user::*epipolar-directory*))
  53.        (load (format nil "~aepidata-mb1-rcde" user::*epipolar-directory*))
  54.        (epi::init-mb1-data)
  55.        (setf *all* 
  56.          (list epi::*j1view* epi::*j2view* epi::*j3view* epi::*j4view*
  57.            epi::*j5view* epi::*j6view* epi::*j7view* epi::*j8view*))
  58.        (epi::init-epipolar-matcher *all*)
  59.        (set-ref-view 3)
  60.        (st::load-system "lisp-c-interface")
  61.        (mapcar #'(lambda (view)
  62.            (init-feat-sets view))
  63.            *all*)
  64.        (cme::make-3d-feature-set 
  65.      :world (cme::get-3d-world-named "Radius Model Board 1")
  66.      :name "UMass 3d Buildings")
  67.        )
  68.     (format t "Please load Model Board 1 site model first")))
  69.  
  70. (defun test (&optional (slop 1))
  71.   (setf epi::*pause-mode* :lines)
  72.   (epi::epipolar-match-linelist 
  73.    *ref* 
  74.    (list (list 218.0 400.0 341.0 402.0)
  75.      (list 341.0 402.0 344.0 341.0)
  76.      (list 342.0 341.0 219.0 342.0)
  77.      (list 219.0 342.0 218.0 400.0))
  78.    *others*
  79.    :endpoint-slop slop))
  80.  
  81.  
  82. (defun  trans-vertex-list (transform vertex-list)
  83.   (mapcar #'(lambda (vert)
  84.           (cme::bind-vertex-elements (x y)
  85.          (cme::inline-transform transform vert)
  86.          (list x y)))
  87.       vertex-list))
  88.  
  89. (defun linelist-from-2dcurve (curve)
  90.   (let* ((trans (cme::object-to-world-transform curve))
  91.      (vertexlist (la::listarray (cme::vertices curve)))
  92.      (vertices (trans-vertex-list trans vertexlist))
  93.      (n (length vertices))
  94.      (result nil))
  95.     (dotimes (i n (nreverse result))
  96.        (push (append (elt vertices i) (elt vertices (mod (+ i 1) n)))
  97.          result))))
  98.  
  99. (defun test-matcher (curve &optional (filename "../Staging/tri-input.dat"))
  100.   (setf epi::*pause-mode* :lines)
  101.   (let ((match (epi::epipolar-match-linelist 
  102.         *ref* 
  103.         (linelist-from-2dcurve curve)
  104.         *others*)))
  105.     (epi::save-matches-to-file match filename)
  106.     match))
  107.  
  108. (defun get-feature-set-named (world name)
  109.   (let ((featuresets (cme::get-feature-sets world)))
  110.    (find name featuresets :test #'string-equal :key #'cme::get-name)))
  111.  
  112.  
  113. (defun get-curves (&optional (feature-set-name "UMass 2d Buildings"))
  114.   (cme::inferiors (cme::get-feature-set-named 
  115.      (cme::get-2d-world-named (epi::view-label *ref*)) 
  116.      feature-set-name)))
  117.