As an addendum to my previous email, since I've done some amount of image processing in my life, the "diff" I mention is really just a comparison of a feature vector taken from a small slice of the new image (near the trailing edge, but not exactly from, since you might get some artifacts or color shifts at the extremes).  You could probably get away with taking a vertical strip several pixels wide from the new photo, and mapping that onto the previous one to find a best fit match.  You may have even better ways of accomplishing this, of course;  Just a thought.
<div><br class="webkit-block-placeholder"></div><div>- Eben</div><div><br><br><div><span class="gmail_quote">On 6/20/07, <b class="gmail_sendername">Eben Eliason</b> <<a href="mailto:eben.eliason@gmail.com">eben.eliason@gmail.com
</a>> wrote:</span><blockquote class="gmail_quote" style="margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex">Ben -<div><br> </div><div>That's a lot of shots.  Can you do some tests to determine the minimal required number that still produces decent stitches?  Would 25% overlap be sufficient?  We could try to indicate the angle for the next photo with icons, but I feel like 8 shots or so is the maximum we could require before the icons looked nearly the same in any 3 adjacent positions.
</div><div><br> </div><div>Here's another thought....I know this is probably pushing things a lot on our little machine, but how long would a single diff take to determine the angle between a previously taken photo and a newly taken one.  I envision snapping the first photo 'A' in the sequence, and then having onscreen instructions tell the kid to 'swivel to the right'.  Then, if you could grab a still every second in the background while she swivels, lets say, and determine its overlap with the previous photo A, we could switch the onscreen controls to indicate 'stop here and take photo B' and so on, with live feedback.  If they move too fast and you can't find any overlap, we can switch and say 'swivel back to the left.'
</div><div><br> </div><div>Depending on the speed you can do this at, we could even have a little horizontal "meter" with a ball in it, and they just have to get the ball to the center, like a level, to line up the next shot.  It wouldn't be smooth, but at least it would be obvious.
</div><div><br> </div><div>What do you think?</div><div><br> </div><div>- Eben</div><div><br> </div><div><br><div><span class="q"><span class="gmail_quote">On 6/20/07, <b class="gmail_sendername">
Benjamin M. Schwartz</b> <<a href="mailto:bmschwar@fas.harvard.edu" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">bmschwar@fas.harvard.edu</a>> wrote:</span></span><blockquote class="gmail_quote" style="margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><span class="e" id="q_1134a777e8fe0896_3">
-----BEGIN PGP SIGNED MESSAGE-----<br>Hash: SHA1<br><br>Samuel Klein wrote:<br>> do we have a way of telling or<br>> estimating the XO's swivel angle from hardware?<br><br>The stitcher determines the angle from the images themselves.
<br>I'm not aware of any helpful hardware.<br><br>Eben Eliason wrote:<br>> Ben, what's the viewing<br>> angle of the camera?  Is 6 shots sufficient?<br><br>The horizontal viewing angle is about 45 degrees.  That means that 16 shots are
<br>required if successive frames overlap by 50%.  I took 16 frames using the<br>Capture activity in a minute or two.  Good interface design will be required to<br>make this process painless.  Obviously, panoramas less than 360 degrees require
<br>fewer shots.<br><br>- --Ben<br>-----BEGIN PGP SIGNATURE-----<br>Version: GnuPG v1.4.7 (GNU/Linux)<br>Comment: Using GnuPG with Mozilla - <a href="http://enigmail.mozdev.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://enigmail.mozdev.org</a><br><br></span></div>iD8DBQFGeWoPUJT6e6HFtqQRAkVMAJ
9gYHH/TOzbDMfkPuBuC7mZYok7NQCcCyno<span class="q"><br>r4JLcs80t69NCv9F1IkzNFo=<br>=X1MI<br>-----END PGP SIGNATURE-----<br></span></blockquote></div><br></div>
</blockquote></div><br> </div>