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
/
ascendMar8.tar
/
UMass
/
Epipolar
/
epidemo.lisp
< prev
next >
Wrap
Lisp/Scheme
|
1995-07-20
|
4KB
|
117 lines
;;; EPIDEMO.LISP
;;;
;;; Epipolar matching demo (in RCDE)
;;;
;;; Author: Robert T. Collins
;;; Date: Mar 6, 1995
;;; based on my earlier epipolar.lisp, written Dec 28, 1993
;;;
;-----------------------------------------------------------------
; (c) Copyright 1995 by The University of Massachusetts
;------------------------------------------------------------------
(in-package 'cme)
(unless (find-package 'epipolar)
(make-package 'epipolar :nicknames '(epi)))
(unless (find-package 'linear-algebra)
(make-package 'linear-algebra :nicknames '(la)))
(defvar user::*epipolar-directory* "~/Epi/")
(defvar user::*isr2-directory* "~/Epi/ISR/")
(defvar epi::*mb1-data-directory* "~/Epi/MB1data/")
(defvar *ref* nil)
(defvar *others* nil)
(defvar *all* nil)
(defun set-ref-view (index)
(setf *ref*
(ecase index
(1 epi::*j1view*)
(2 epi::*j2view*)
(3 epi::*j3view*)
(4 epi::*j4view*)
(5 epi::*j5view*)
(6 epi::*j6view*)
(7 epi::*j7view*)
(8 epi::*j8view*)))
(when epi::*demo-mode* (epi::activate-window (epi::view-window *ref*)))
(setf *others* (remove *ref* *all* :test #'eq))
*ref*)
(defun init-feat-sets (view)
(let ((world (cme::get-2d-world-named (epi::view-label view))))
(make-2d-feature-set :world world :name "UMass 2d Buildings")))
(defun init-epidemo ()
(if (cme::get-3d-world-named "Radius Model Board 1")
(progn
(load (format nil "~aload-epipolar" user::*epipolar-directory*))
(load (format nil "~aepidata-mb1-rcde" user::*epipolar-directory*))
(epi::init-mb1-data)
(setf *all*
(list epi::*j1view* epi::*j2view* epi::*j3view* epi::*j4view*
epi::*j5view* epi::*j6view* epi::*j7view* epi::*j8view*))
(epi::init-epipolar-matcher *all*)
(set-ref-view 3)
(st::load-system "lisp-c-interface")
(mapcar #'(lambda (view)
(init-feat-sets view))
*all*)
(cme::make-3d-feature-set
:world (cme::get-3d-world-named "Radius Model Board 1")
:name "UMass 3d Buildings")
)
(format t "Please load Model Board 1 site model first")))
(defun test (&optional (slop 1))
(setf epi::*pause-mode* :lines)
(epi::epipolar-match-linelist
*ref*
(list (list 218.0 400.0 341.0 402.0)
(list 341.0 402.0 344.0 341.0)
(list 342.0 341.0 219.0 342.0)
(list 219.0 342.0 218.0 400.0))
*others*
:endpoint-slop slop))
(defun trans-vertex-list (transform vertex-list)
(mapcar #'(lambda (vert)
(cme::bind-vertex-elements (x y)
(cme::inline-transform transform vert)
(list x y)))
vertex-list))
(defun linelist-from-2dcurve (curve)
(let* ((trans (cme::object-to-world-transform curve))
(vertexlist (la::listarray (cme::vertices curve)))
(vertices (trans-vertex-list trans vertexlist))
(n (length vertices))
(result nil))
(dotimes (i n (nreverse result))
(push (append (elt vertices i) (elt vertices (mod (+ i 1) n)))
result))))
(defun test-matcher (curve &optional (filename "../Staging/tri-input.dat"))
(setf epi::*pause-mode* :lines)
(let ((match (epi::epipolar-match-linelist
*ref*
(linelist-from-2dcurve curve)
*others*)))
(epi::save-matches-to-file match filename)
match))
(defun get-feature-set-named (world name)
(let ((featuresets (cme::get-feature-sets world)))
(find name featuresets :test #'string-equal :key #'cme::get-name)))
(defun get-curves (&optional (feature-set-name "UMass 2d Buildings"))
(cme::inferiors (cme::get-feature-set-named
(cme::get-2d-world-named (epi::view-label *ref*))
feature-set-name)))