{"id":2500,"date":"2014-12-15T23:11:38","date_gmt":"2014-12-15T14:11:38","guid":{"rendered":"https:\/\/regex.info\/blog\/2014-12-15\/2500"},"modified":"2014-12-31T16:10:41","modified_gmt":"2014-12-31T07:10:41","slug":"the-art-and-science-and-complex-frustrations-of-creating-my-wigglegrams","status":"publish","type":"post","link":"https:\/\/regex.info\/blog\/2014-12-15\/2500","title":{"rendered":"The Art and Science (and Complex Frustrations) of Creating my Wigglegrams"},"content":{"rendered":"\n\n<style type=\"text\/css\">div#dWKY5ETGgTGgtdA img {  width:458px; height:700px; visibility:hidden; position:absolute; top:0; left:0; border: solid 10px #311}<\/style>\n<div class='ic'><div id='dWKY5ETGgTGgtdA' style='margin:0 auto;position:relative;width:488px;height:730px'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016821p3_sm.jpg\" width=\"458\" height=\"700\"\nid=\"i016821p3\"\nstyle=\"visibility:visible; position:relative\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016819p3_sm.jpg\" width=\"458\" height=\"700\"\nid=\"i016819p3\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016817p3_sm.jpg\" width=\"458\" height=\"700\"\nid=\"i016817p3\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016815p3_sm.jpg\" width=\"458\" height=\"700\"\nid=\"i016815p3\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016813p3_sm.jpg\" width=\"458\" height=\"700\"\nid=\"i016813p3\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016811p3_sm.jpg\" width=\"458\" height=\"700\"\nid=\"i016811p3\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016809p3_sm.jpg\" width=\"458\" height=\"700\"\nid=\"i016809p3\"\nnoindex=\"1\"\/>\n<meta itemprop='about' content=\"Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/div><div style='margin-top:2px; height:2px; width:488px; background-color:black;margin:0 auto 5px auto'><div id='mWKY5ETGgTGgtdA' style='height:2px;border-right:70px white solid;width:0'><\/div><\/div>\n<div style='font-size:85%; line-height:130%; color:#F44;white-space:nowrap'><b>Animatable Wigglegram<\/b> (7 frames) &mdash; slowly sweep mouse from side to side to view 3D effect<br\/>\u5199\u771f\u306e\u4e0a\u3092\u30de\u30a6\u30b9\u3067\u5de6\u53f3\u306b\u3086\u3063\u304f\u308a\u52d5\u304b\u3059\u3068\u300c\uff13D\u300d\u306a\u611f\u3058\u304c\u51fa\u307e\u3059\u3002<\/div>\n<span class='caption'>Simple Wigglegram<\/span>\n<br\/>focusing on the tree in the middle\n<\/div><script type='text\/javascript'>with({D:document.getElementById('dWKY5ETGgTGgtdA'),I:new Array,X:0,i:0,MW:0,BW:0,tmp:0,L:1,}){var P=D.children[0].tagName==\"A\"?D.children[0]:D;for(tmp=0;tmp<P.children.length;tmp++)if(P.children[tmp].tagName==\"IMG\")I.push(P.children[tmp]);MW=D.style.width.match(\/^\\d+\/)\/I.length;BW=D.style.width.match(\/^\\d+\/)*0.6\/I.length;D.ontouchmove=D.onmousemove=function(e){if(e.touches&&e.touches.length>1)return true;if(!L){L=1;}var x=Math.floor((e.clientX||e.pageX)\/BW);if(X==0)X=x;else if(x!=X){var which=x>X?i+(x-X):i-(X-x);if(which>=I.length)which=I.length==2?0:I.length-1;else if(which<0)which=I.length==2?I.length-1:0;if(which!=i){I[which].style.visibility='visible';I[i].style.visibility='hidden';i=which;document.getElementById('mWKY5ETGgTGgtdA').style.width=(which*MW)+'px';}X=x;}return false;};}<\/script>\n\n<p>This post is about the art and technology of <a\nhref='\/blog\/category\/pretty-photos\/wigglegrams'>my 3D\nwigglegrams<\/a>, but first <span class='nobr'>a bit<\/span> of context about the location seen\nabove.<\/p>\n\n<p>This wigglegram was taken during my first visit to Kyoto's Shugakuin\nImperial Villa <span class='nobr'>(\u4fee\u5b66\u9662\u96e2\u5bae)<\/span> two years ago, <span class='nobr'>a photographically<\/span>-fruitful\nouting first posted about <a\nhref='\/blog\/2013-02-19\/2213'>here<\/a>, and most recently\nrevisited <span class='nobr'>a month<\/span> ago <a\nhref='\/blog\/2014-11-15\/2484'>here<\/a>.<\/p>\n\n<p>During the tour of the grounds, at one point you descend stone steps set in the side of <span class='nobr'>a mountain.<\/span>...<\/p>\n\n<div class='ic tight' itemscope itemtype='http:\/\/schema.org\/Photograph'><a name=\"016800\" href='\/i\/JF4_016800.jpg' itemprop='image'\n><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016800_sm.jpg\" width=\"690\" height=\"459\"\nalt=\"Stone Steps -- Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\nid=\"i016800\"\ntitle=\"Stone Steps -- Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/a>\n<br\/><span class=\"camera-info robots-nocontent\">Nikon D4 + Nikkor 50mm f\/1.4 &mdash; <sup>1<\/sup><big>\/<\/big>125 sec, <span class='f'>f<\/span>\/1.4, ISO 160 &mdash;\n<a href='\/imageinfo.cgi?url=http%3A%2F%2Fregex.info%2Fi%2FJF4_016800.jpg'>map &amp; image data<\/a> &mdash; <a href='\/blog\/proximity\/i\/JF4_016800.jpg'>nearby photos<\/a><\/span>\n<br\/><span class='caption'>Stone Steps<\/span>\n<meta itemprop='url' content='http:\/\/regex.info\/i\/JF4_016800.jpg'\/>\n<meta itemprop='creator' content='Jeffrey Friedl'\/>\n<meta itemprop='copyrightHolder' content='Jeffrey Friedl'\/>\n<meta itemprop='dateCreated' content='2012-11-28'\/>\n<meta itemprop='about' content=\"Stone Steps -- Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/div>\n\n<p>There's a waterfall and a small stream... it's all quite picturesque.<\/p>\n\n<div class='ic tight' itemscope itemtype='http:\/\/schema.org\/Photograph'><a name=\"016823\" href='\/i\/JF4_016823.jpg' itemprop='image'\n><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016823_sm.jpg\" width=\"690\" height=\"459\"\nalt=\"Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\nid=\"i016823\"\ntitle=\"Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/a>\n<br\/><span class=\"camera-info robots-nocontent\">Nikon D4 + Nikkor 50mm f\/1.4 &mdash; <sup>1<\/sup><big>\/<\/big>125 sec, <span class='f'>f<\/span>\/4, ISO 1400 &mdash;\n<a href='\/imageinfo.cgi?url=http%3A%2F%2Fregex.info%2Fi%2FJF4_016823.jpg'>map &amp; image data<\/a> &mdash; <a href='\/blog\/proximity\/i\/JF4_016823.jpg'>nearby photos<\/a><\/span>\n<meta itemprop='url' content='http:\/\/regex.info\/i\/JF4_016823.jpg'\/>\n<meta itemprop='creator' content='Jeffrey Friedl'\/>\n<meta itemprop='copyrightHolder' content='Jeffrey Friedl'\/>\n<meta itemprop='dateCreated' content='2012-11-28'\/>\n<meta itemprop='about' content=\"Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/div>\n\n<div class='ic' itemscope itemtype='http:\/\/schema.org\/Photograph'><a name=\"016829\" href='\/i\/JF4_016829.jpg' itemprop='image'\n><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016829_sm.jpg\" width=\"690\" height=\"459\"\nalt=\"Wider View -- Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\nid=\"i016829\"\ntitle=\"Wider View -- Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/a>\n<br\/><span class=\"camera-info robots-nocontent\">Nikon D4 + Nikkor 24mm f\/1.4 &mdash; <sup>1<\/sup><big>\/<\/big>160 sec, <span class='f'>f<\/span>\/1.4, ISO 100 &mdash;\n<a href='\/imageinfo.cgi?url=http%3A%2F%2Fregex.info%2Fi%2FJF4_016829.jpg'>map &amp; image data<\/a> &mdash; <a href='\/blog\/proximity\/i\/JF4_016829.jpg'>nearby photos<\/a><\/span>\n<br\/><span class='caption'>Wider View<\/span>\n<meta itemprop='url' content='http:\/\/regex.info\/i\/JF4_016829.jpg'\/>\n<meta itemprop='creator' content='Jeffrey Friedl'\/>\n<meta itemprop='copyrightHolder' content='Jeffrey Friedl'\/>\n<meta itemprop='dateCreated' content='2012-11-28'\/>\n<meta itemprop='about' content=\"Wider View -- Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/div>\n\n<p>As I described on <a href='\/blog\/2013-02-19\/2213'>that\nfirst post<\/a> about the outing, the tour moves along briskly, so despite\nthe wonderfully photogenic scenes, the tour is not amenable to careful or\nleisurely photography.<\/p>\n\n<p>So it was with haste that I spent just over one second to fire off <span class='nobr'>a\nburst<\/span> of 14 frames for this new <span class='QO'>&#8220;<\/span>wigglegram<span class='QC'>&#8221;<\/span> thing. <span class='nobr'>I had published<\/span> <a\nhref='\/blog\/2012-11-17\/2142'>my first wigglegram<\/a> just\n<span class='nobr'>a week<\/span> and <span class='nobr'>a half<\/span> prior.<\/p>\n\n<p>It's been just over two years since <span class='nobr'>I took<\/span> the photos for this\nwigglegram, and though <span class='nobr'>I haven't<\/span> gotten much better at taking the raw\nframes, over time <span class='nobr'>I have<\/span> gotten much better at preparing them for\ndisplay.<\/p>\n\n<p><span class='QO'>&#8220;<\/span>Preparing them for display<span class='QC'>&#8221;<\/span> means aligning them up to account for\ncamera shake while moving the camera (and my body) from one side to another\nduring the shutter burst that might last one or two seconds. <span class='nobr'>It turns<\/span> out\nthat I'm pretty bad at keeping the camera level, so the need to align them\nwell is pressing.<\/p>\n\n<p>To show just how bad the original frames can be, here they are.\n(For the wigglegrams on this page, <span class='nobr'>I'm using<\/span> every other frame from the initial 14-frame burst,\nso these wigglegrams are seven frames long).<\/p>\n\n<style type=\"text\/css\">div#dFEY5EbGgbGgAcB img {  width:466px; height:700px; visibility:hidden; position:absolute; top:0; left:0; border: solid 10px #311}<\/style>\n<div class='ic'><div id='dFEY5EbGgbGgAcB' style='margin:0 auto;position:relative;width:496px;height:730px'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016821o_sm.jpg\" width=\"466\" height=\"700\"\nid=\"i016821o\"\nstyle=\"visibility:visible; position:relative\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016819o_sm.jpg\" width=\"466\" height=\"700\"\nid=\"i016819o\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016817o_sm.jpg\" width=\"466\" height=\"700\"\nid=\"i016817o\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016815o_sm.jpg\" width=\"466\" height=\"700\"\nid=\"i016815o\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016813o_sm.jpg\" width=\"466\" height=\"700\"\nid=\"i016813o\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016811o_sm.jpg\" width=\"466\" height=\"700\"\nid=\"i016811o\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016809o_sm.jpg\" width=\"466\" height=\"700\"\nid=\"i016809o\"\nnoindex=\"1\"\/>\n<meta itemprop='about' content=\"Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/div><div style='margin-top:2px; height:2px; width:496px; background-color:black;margin:0 auto 5px auto'><div id='mFEY5EbGgbGgAcB' style='height:2px;border-right:71px white solid;width:0'><\/div><\/div>\n<div style='font-size:85%; line-height:130%; color:#F44;white-space:nowrap'><b>Animatable<\/b> &mdash; slowly sweep mouse from side to side to view effect<br\/><span class='nobr'>\u5199\u771f<\/span>\u306e\u4e0a\u3092\u30de\u30a6\u30b9\u3067<span class='nobr'>\u5de6\u53f3<\/span>\u306b\u3086\u3063\u304f\u308a\u52d5\u304b\u3059\u3068\u3044\u308d\u3044\u308d\u306a<span class='nobr'>\u64ae\u5f71\u52b9\u679c<\/span>\u3092\u697d\u3057\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/div>\n<span class='caption'>Original (Unaligned) Frames<\/span>\n<br\/>showing my unsteady movements\n<div style='margin-top:4px;text-align:center;font-size:160%'><span class='nobr'>\u64ae\u3063<\/span>\u305f<span class='nobr'>\u5199\u771f<\/span>\u3092\u305d\u306e\u307e\u307e\u7e4b\u3052\u305f\u3060\u3051\u3067<span class='nobr'>\u3001\u8abf\u6574<\/span>\u3055\u308c\u3066\u3044\u306a\u3044\u30b3\u30de<\/div>\n<\/div><script type='text\/javascript'>with({D:document.getElementById('dFEY5EbGgbGgAcB'),I:new Array,X:0,i:0,MW:0,BW:0,tmp:0,L:1,}){var P=D.children[0].tagName==\"A\"?D.children[0]:D;for(tmp=0;tmp<P.children.length;tmp++)if(P.children[tmp].tagName==\"IMG\")I.push(P.children[tmp]);MW=D.style.width.match(\/^\\d+\/)\/I.length;BW=D.style.width.match(\/^\\d+\/)*0.6\/I.length;D.ontouchmove=D.onmousemove=function(e){if(e.touches&&e.touches.length>1)return true;if(!L){L=1;}var x=Math.floor((e.clientX||e.pageX)\/BW);if(X==0)X=x;else if(x!=X){var which=x>X?i+(x-X):i-(X-x);if(which>=I.length)which=I.length==2?0:I.length-1;else if(which<0)which=I.length==2?I.length-1:0;if(which!=i){I[which].style.visibility='visible';I[i].style.visibility='hidden';i=which;document.getElementById('mFEY5EbGgbGgAcB').style.width=(which*MW)+'px';}X=x;}return false;};}<\/script>\n\n<p>I'm pretty good at holding the camera steady for <span class='nobr'>a long<\/span> exposure (such\nas seen\n<a href='\/blog\/2009-05-16\/1210'>here<\/a> and\n<a href='\/blog\/2009-01-15\/1114'>here<\/a>, for example), but clearly not good at\nholding the camera steady while moving. <span class='nobr'>The images<\/span> need to be aligned individually to form <span class='nobr'>a unified<\/span> whole.<\/p>\n\n<p>Alignment consists of adjusting rotation and skew:<\/p>\n<ol>\n<li><p>Adjusting the angle of each image so that what should be vertical is indeed vertical. <span class='nobr'>As an example<\/span>, the seven shots in the wigglegrams on this page were adjusted by\n1.23\u00b0,\n1.36\u00b0,\n0.7\u00b0,\n0.8\u00b0,\n1.27\u00b0,\n3.24\u00b0, and\n3.95\u00b0 respectively.<\/p>\n<\/li>\n<li><p>Crop each image to restore a consistent framing of the scene across all images.<\/p><\/li>\n<li><p>Further crop each image to the maximum intersection of what remains of all the images, so that each image\nhas the exact same pixel dimensions.<\/p><\/li>\n<\/ol>\n\n<p>This is neither easy nor fun to do by hand in Lightroom, and this was <span class='nobr'>a severely<\/span>-limiting factor\nin my early wigglegram production.<\/p>\n\n<p>I knew there must be some way to automate the alignment, but I'm no good at pixel-level programming.\nThankfully, the kind folks behind <a href='http:\/\/hugin.sourceforge.net\/'>the Hugin Panorama sticher<\/a> included\nimage-stacking features, and <span class='nobr'>I was<\/span> able to build <span class='nobr'>a system<\/span> that automated the alignment.<\/p>\n\n<p>Results were.... spotty. Sometimes they were fantastic, and sometimes they were like this:<\/p>\n\n\n\n\n<style type=\"text\/css\">div#dFEY5EbGgbGgAcA img {  width:433px; height:690px; visibility:hidden; position:absolute; top:0; left:0; border: solid 10px #311}<\/style>\n<div class='ic'><div id='dFEY5EbGgbGgAcA' style='margin:0 auto;position:relative;width:463px;height:720px'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016821ow.jpg\" width=\"433\" height=\"690\"\nid=\"i016821ow\"\nstyle=\"visibility:visible; position:relative\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016819ow.jpg\" width=\"433\" height=\"690\"\nid=\"i016819ow\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016817ow.jpg\" width=\"433\" height=\"690\"\nid=\"i016817ow\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016815ow.jpg\" width=\"433\" height=\"690\"\nid=\"i016815ow\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016813ow.jpg\" width=\"433\" height=\"690\"\nid=\"i016813ow\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016811ow.jpg\" width=\"433\" height=\"690\"\nid=\"i016811ow\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016809ow.jpg\" width=\"433\" height=\"690\"\nid=\"i016809ow\"\nnoindex=\"1\"\/>\n<meta itemprop='about' content=\"Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/div><div style='margin-top:2px; height:2px; width:463px; background-color:black;margin:0 auto 5px auto'><div id='mFEY5EbGgbGgAcA' style='height:2px;border-right:66px white solid;width:0'><\/div><\/div>\n<div style='font-size:85%; line-height:130%; color:#F44;white-space:nowrap'><b>Animatable<\/b> &mdash; slowly sweep mouse from side to side to view effect<br\/><span class='nobr'>\u5199\u771f<\/span>\u306e\u4e0a\u3092\u30de\u30a6\u30b9\u3067<span class='nobr'>\u5de6\u53f3<\/span>\u306b\u3086\u3063\u304f\u308a\u52d5\u304b\u3059\u3068\u3044\u308d\u3044\u308d\u306a<span class='nobr'>\u64ae\u5f71\u52b9\u679c<\/span>\u3092\u697d\u3057\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/div>\n<span class='caption'>Auto-Aligned With Hugin Tools<\/span>\n<div style='margin-top:4px;text-align:center;font-size:140%'><span class='nobr'>\u81ea\u52d5\u6575<\/span>\u306b\u30bd\u30d5\u30c8\u304c\u3055\u304d\u307b\u3069\u306e\u30b3\u30de\u3092<span class='nobr'>\u3001\u8abf\u6574<\/span>\u3057\u305f\u5f8c\u306e\u30b3\u30de<span class='nobr'>\u3002\u7d50\u679c<\/span>\u306f<span class='nobr'>\u4eca\u4e00<\/span>\u3067\u3059\u306a\u3002\n<br\/>\n(\u3068\u3053\u308d\u3067\u3001\u3053\u306e<span class='nobr'>\u5b9f\u8a18<\/span>\u306e<span class='nobr'>\u4e00\u756a\u4e0a<\/span>\u306e\u30a6\u30a4\u30b0\u30eb\u30b0\u30e9\u30e0\u304c\u79c1\u304c<span class='nobr'>\u4f5c\u3063<\/span>\u305f\u7269\u3067\u3059\u3002)\n<\/div>\n<\/div><script type='text\/javascript'>with({D:document.getElementById('dFEY5EbGgbGgAcA'),I:new Array,X:0,i:0,MW:0,BW:0,tmp:0,L:1,}){var P=D.children[0].tagName==\"A\"?D.children[0]:D;for(tmp=0;tmp<P.children.length;tmp++)if(P.children[tmp].tagName==\"IMG\")I.push(P.children[tmp]);MW=D.style.width.match(\/^\\d+\/)\/I.length;BW=D.style.width.match(\/^\\d+\/)*0.6\/I.length;D.ontouchmove=D.onmousemove=function(e){if(e.touches&&e.touches.length>1)return true;if(!L){L=1;}var x=Math.floor((e.clientX||e.pageX)\/BW);if(X==0)X=x;else if(x!=X){var which=x>X?i+(x-X):i-(X-x);if(which>=I.length)which=I.length==2?0:I.length-1;else if(which<0)which=I.length==2?I.length-1:0;if(which!=i){I[which].style.visibility='visible';I[i].style.visibility='hidden';i=which;document.getElementById('mFEY5EbGgbGgAcA').style.width=(which*MW)+'px';}X=x;}return false;};}<\/script>\n\n<p>It's much better than the originals, but it still leaves <span class='nobr'>a lot<\/span> to be desired.\nSometimes it would even lend <span class='nobr'>a kind<\/span> of Salvador Dal\u00ed<i>esque<\/i> morph to various parts of various images. <span class='nobr'>It was a<\/span> step in the right direction, but <span class='nobr'>I needed<\/span> <span class='nobr'>a better<\/span> approach.<\/p>\n\n<p>Finally, a few months ago I started writing <span class='nobr'>a Lightroom<\/span> plugin to align\nimages using user-provided hints and guidance.<\/p>\n\n<div class='ic'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/lr\/wigglegram-dialog.png\" width=\"500\" height=\"381\"\nclass=\"raw\"\nid=\"iwigglegram_dialog\"\/>\n<br\/>\n<span class='caption'>In Prograss<\/span>\n<br\/>my plugin while creating the wigglegram that lead this post\n<meta itemprop='about' content=\"In Prograss my plugin while creating the wigglegram that lead this post\"\/><\/div>\n\n<p>At first I thought that aligning the images would be merely <span class='nobr'>a technical<\/span>\nundertaking, but it turns out that there's also an artistic component to\nchoosing the alignment.<\/p>\n\n<p>It may feel completely counter-intuitive, but you can take the same set\nof original and build wigglegrams with completely different focus points.\nFor example, in the one at the top of this post, the focus point is the\ntree (referenced in the dialog above as <span class='QO'>&#8220;<\/span>anchor point 3<span class='QC'>&#8221;<\/span>), but here's one\nwhere it's the waterfall in the background...<\/p>\n\n\n<style type=\"text\/css\">div#dMuY5EtDgtDgacA img {  width:453px; height:700px; visibility:hidden; position:absolute; top:0; left:0; border: solid 10px #311}<\/style>\n<div class='ic'><div id='dMuY5EtDgtDgacA' style='margin:0 auto;position:relative;width:483px;height:730px'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016821p5_sm.jpg\" width=\"453\" height=\"700\"\nid=\"i016821p5\"\nstyle=\"visibility:visible; position:relative\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016819p5_sm.jpg\" width=\"453\" height=\"700\"\nid=\"i016819p5\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016817p5_sm.jpg\" width=\"453\" height=\"700\"\nid=\"i016817p5\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016815p5_sm.jpg\" width=\"453\" height=\"700\"\nid=\"i016815p5\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016813p5_sm.jpg\" width=\"453\" height=\"700\"\nid=\"i016813p5\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016811p5_sm.jpg\" width=\"453\" height=\"700\"\nid=\"i016811p5\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016809p5_sm.jpg\" width=\"453\" height=\"700\"\nid=\"i016809p5\"\nnoindex=\"1\"\/>\n<meta itemprop='about' content=\"Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/div><div style='margin-top:2px; height:2px; width:483px; background-color:black;margin:0 auto 5px auto'><div id='mMuY5EtDgtDgacA' style='height:2px;border-right:69px white solid;width:0'><\/div><\/div>\n<div style='font-size:85%; line-height:130%; color:#F44;white-space:nowrap'><b>Animatable<\/b> &mdash; slowly sweep mouse from side to side to view effect<br\/><span class='nobr'>\u5199\u771f<\/span>\u306e\u4e0a\u3092\u30de\u30a6\u30b9\u3067<span class='nobr'>\u5de6\u53f3<\/span>\u306b\u3086\u3063\u304f\u308a\u52d5\u304b\u3059\u3068\u3044\u308d\u3044\u308d\u306a<span class='nobr'>\u64ae\u5f71\u52b9\u679c<\/span>\u3092\u697d\u3057\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/div>\n<span class='caption'>From the Same Images<\/span>\n<br\/>different feel\n<\/div><script type='text\/javascript'>with({D:document.getElementById('dMuY5EtDgtDgacA'),I:new Array,X:0,i:0,MW:0,BW:0,tmp:0,L:1,}){var P=D.children[0].tagName==\"A\"?D.children[0]:D;for(tmp=0;tmp<P.children.length;tmp++)if(P.children[tmp].tagName==\"IMG\")I.push(P.children[tmp]);MW=D.style.width.match(\/^\\d+\/)\/I.length;BW=D.style.width.match(\/^\\d+\/)*0.6\/I.length;D.ontouchmove=D.onmousemove=function(e){if(e.touches&&e.touches.length>1)return true;if(!L){L=1;}var x=Math.floor((e.clientX||e.pageX)\/BW);if(X==0)X=x;else if(x!=X){var which=x>X?i+(x-X):i-(X-x);if(which>=I.length)which=I.length==2?0:I.length-1;else if(which<0)which=I.length==2?I.length-1:0;if(which!=i){I[which].style.visibility='visible';I[i].style.visibility='hidden';i=which;document.getElementById('mMuY5EtDgtDgacA').style.width=(which*MW)+'px';}X=x;}return false;};}<\/script>\n\n<p>Like all the wigglegrams on this post, they're both built from the same original seven frames,\nso what's the difference? <span class='nobr'>In the wigglegram<\/span> at the top of this post, each frame is cropped so that\n<span class='nobr'>a small<\/span> orange leaf stuck to the middle of the main tree trunk is in the <i>exact<\/i> same location\nwithin each frame. That little orange leaf doesn't move from frame to frame; everything else does.\nThis has the effect of the view rotating about the tree as you move.<\/p>\n\n<p>In the wigglegram immediately above, the crop for each image is crafted so that the rock\nat the right side of the top of the waterfall doesn't move from frame to frame; everything else does.\nHere, everything seems to rotate about the background.<\/p>\n\n<p>How can these completely-different sensations be built from the same originals? Doesn't it matter where the camera\nwas pointing while the rapid-fire burst was being taken?<\/p>\n\n<p>The key is to realize that when you focus on something with your eye (the tree or the waterfall or whatever),\nyour <i>perspective<\/i> doesn't change. What changes is what you choose to keep unmoving in the center of your view.<\/p>\n\n<p>Your perspective does change as you move your head to the side, just as\nthe camera's perspective changes as it moves to the side. Once that\nperspective change is captured in the frames taken by the camera, when\nprocessing later you can use creative cropping to keep whatever you want\n<span class='QO'>&#8220;<\/span>centered<span class='QC'>&#8221;<\/span> and unmoving. <span class='nobr'>In the examples<\/span> above, the tree and the\nbackground, respectively, were kept unmoving from frame to frame, giving\nthe feeling that that's what we were focused on while moving.<\/p>\n\n<p>As a further example, here's a set of croppings where <span class='nobr'>a yellow<\/span> leaf in the near foreground was kept consistent across the frames:<\/p>\n\n<style type=\"text\/css\">div#dKtY5EhDghDgLdA img {  width:472px; height:700px; visibility:hidden; position:absolute; top:0; left:0; border: solid 10px #311}<\/style>\n<div class='ic'><div id='dKtY5EhDghDgLdA' style='margin:0 auto;position:relative;width:502px;height:730px'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016821p7_sm.jpg\" width=\"472\" height=\"700\"\nid=\"i016821p7\"\nstyle=\"visibility:visible; position:relative\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016819p7_sm.jpg\" width=\"472\" height=\"700\"\nid=\"i016819p7\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016817p7_sm.jpg\" width=\"472\" height=\"700\"\nid=\"i016817p7\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016815p7_sm.jpg\" width=\"472\" height=\"700\"\nid=\"i016815p7\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016813p7_sm.jpg\" width=\"472\" height=\"700\"\nid=\"i016813p7\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016811p7_sm.jpg\" width=\"472\" height=\"700\"\nid=\"i016811p7\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016809p7_sm.jpg\" width=\"472\" height=\"700\"\nid=\"i016809p7\"\nnoindex=\"1\"\/>\n<meta itemprop='about' content=\"Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/div><div style='margin-top:2px; height:2px; width:502px; background-color:black;margin:0 auto 5px auto'><div id='mKtY5EhDghDgLdA' style='height:2px;border-right:72px white solid;width:0'><\/div><\/div>\n<div style='font-size:85%; line-height:130%; color:#F44;white-space:nowrap'><b>Animatable<\/b> &mdash; slowly sweep mouse from side to side to view effect<br\/><span class='nobr'>\u5199\u771f<\/span>\u306e\u4e0a\u3092\u30de\u30a6\u30b9\u3067<span class='nobr'>\u5de6\u53f3<\/span>\u306b\u3086\u3063\u304f\u308a\u52d5\u304b\u3059\u3068\u3044\u308d\u3044\u308d\u306a<span class='nobr'>\u64ae\u5f71\u52b9\u679c<\/span>\u3092\u697d\u3057\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/div>\n<span class='caption'>Rotating About the Front<\/span>\n<br\/>a small yellow leaf in the foreground is fixed across the whole\n<\/div><script type='text\/javascript'>with({D:document.getElementById('dKtY5EhDghDgLdA'),I:new Array,X:0,i:0,MW:0,BW:0,tmp:0,L:1,}){var P=D.children[0].tagName==\"A\"?D.children[0]:D;for(tmp=0;tmp<P.children.length;tmp++)if(P.children[tmp].tagName==\"IMG\")I.push(P.children[tmp]);MW=D.style.width.match(\/^\\d+\/)\/I.length;BW=D.style.width.match(\/^\\d+\/)*0.6\/I.length;D.ontouchmove=D.onmousemove=function(e){if(e.touches&&e.touches.length>1)return true;if(!L){L=1;}var x=Math.floor((e.clientX||e.pageX)\/BW);if(X==0)X=x;else if(x!=X){var which=x>X?i+(x-X):i-(X-x);if(which>=I.length)which=I.length==2?0:I.length-1;else if(which<0)which=I.length==2?I.length-1:0;if(which!=i){I[which].style.visibility='visible';I[i].style.visibility='hidden';i=which;document.getElementById('mKtY5EhDghDgLdA').style.width=(which*MW)+'px';}X=x;}return false;};}<\/script>\n\n<p>This one is much less satisfying than the others, for two reasons.<\/p>\n\n<p>One of the reasons brings us back to the question \"<i>Doesn't it matter\nwhere the camera was pointing while the rapid-fire burst was being\ntaken?<\/i>\" Where the camera points for each frame determines what part of\nthe scene is available to each frame, which in turn has <span class='nobr'>a direct<\/span> impact on\nwhat parts of the scene are available to <i>all<\/i> frames of the unified\nwhole. After each frame is aligned so that whatever we want to be unmoving\nacross frames is unmoving, we have to set the crop dimensions for the\nunified whole such that it's contained within every (likely rotated and\nmoved) individual frame.<\/p>\n\n<p>If the camera was physically kept pointing at the same thing while it\nwas swept from one side to the other &mdash; say, kept pointing exactly at\nthe small orange leaf in the center of the tree trunk &mdash; and the\ncamera was kept perfectly level, you'd not have to adjust anything, and\nyou'd keep 100% of your pixels. <span class='nobr'>But in the<\/span> real world in my shaky hands,\nthe best <span class='nobr'>I can<\/span> hope for is that the camera is kept generally in the right\ndirection. <span class='nobr'>In the case<\/span> of this wigglegram, <span class='nobr'>I did try<\/span> to keep that leaf in\nthe center, so after adjusting the frames <span class='nobr'>I ended<\/span> up keeping (not have to\ncrop away) <span class='nobr'>a not<\/span>-too-bad 67% of the pixels.<\/p>\n\n<p>But with <span class='QO'>&#8220;<\/span>Rotating About the Front<span class='QC'>&#8221;<\/span> just above, where the physical\ncamera aim doesn't match the aim we're crafting, <span class='nobr'>I had to<\/span> crop away all but\n20% of the pixels.<\/p>\n\n<p>So, the tighter crop destroys the big sense that <span class='nobr'>I was<\/span> hoping to capture, making the result less satisfying.<\/p>\n\n<p>(A further side effect of small crops from across the various frames is\nthat you can get some pretty wild effects due to lens distortions, which\ntend to exaggerate toward the edge of the frame. Taking <span class='nobr'>a small<\/span> crop that\nruns from the middle of the first frame to the edge of the last frame can\nsee <span class='nobr'>a square<\/span> morph into <span class='nobr'>a squished<\/span> rectangle, or vice versa.)<\/p>\n\n\n<p>The other reason it's not satisfying is that the subject matter doesn't\nlend itself to rotation about the foreground. <span class='nobr'>It just feels<\/span> better rotating\nabout the tree, or the background.<\/p>\n\n<p>But you don't even have to rotate.<\/p>\n\n<p>I realized this weekend that once you've adjusted everything so that whatever item you picked\nis unmoving from frame to frame, you can then go ahead and let it shift slightly across the view from frame to frame,\nto give <span class='nobr'>a panning<\/span> feel. For example:<\/p>\n\n<style type=\"text\/css\">div#dGHZ5EAIgAIgPcA img {  width:449px; height:700px; visibility:hidden; position:absolute; top:0; left:0; border: solid 10px #311}<\/style>\n<div class='ic tight'><div id='dGHZ5EAIgAIgPcA' style='margin:0 auto;position:relative;width:479px;height:730px'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016821p5+20_sm.jpg\" width=\"449\" height=\"700\"\nid=\"i016821p5_20\"\nstyle=\"visibility:visible; position:relative\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016819p5+20_sm.jpg\" width=\"449\" height=\"700\"\nid=\"i016819p5_20\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016817p5+20_sm.jpg\" width=\"449\" height=\"700\"\nid=\"i016817p5_20\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016815p5+20_sm.jpg\" width=\"449\" height=\"700\"\nid=\"i016815p5_20\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016813p5+20_sm.jpg\" width=\"449\" height=\"700\"\nid=\"i016813p5_20\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016811p5+20_sm.jpg\" width=\"449\" height=\"700\"\nid=\"i016811p5_20\"\nnoindex=\"1\"\/>\n<img loading=\"lazy\" decoding=\"async\" src=\"\/i\/JF4_016809p5+20_sm.jpg\" width=\"449\" height=\"700\"\nid=\"i016809p5_20\"\nnoindex=\"1\"\/>\n<meta itemprop='about' content=\"Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) -- Kyoto, Japan -- Copyright 2012 Jeffrey Friedl, https:\/\/regex.info\/blog\/ -- This photo is licensed to the public under the Creative Commons Attribution-NonCommercial 4.0 International License http:\/\/creativecommons.org\/licenses\/by-nc\/4.0\/ (non-commercial use is freely allowed if proper attribution is given, including a link back to this page on http:\/\/regex.info\/ when used online)\"\/><\/div><div style='margin-top:2px; height:2px; width:479px; background-color:black;margin:0 auto 5px auto'><div id='mGHZ5EAIgAIgPcA' style='height:2px;border-right:68px white solid;width:0'><\/div><\/div>\n<div style='font-size:85%; line-height:130%; color:#F44;white-space:nowrap'><b>Animatable<\/b> &mdash; slowly sweep mouse from side to side to view effect<br\/><span class='nobr'>\u5199\u771f<\/span>\u306e\u4e0a\u3092\u30de\u30a6\u30b9\u3067<span class='nobr'>\u5de6\u53f3<\/span>\u306b\u3086\u3063\u304f\u308a\u52d5\u304b\u3059\u3068\u3044\u308d\u3044\u308d\u306a<span class='nobr'>\u64ae\u5f71\u52b9\u679c<\/span>\u3092\u697d\u3057\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/div>\n<span class='caption'>Panning<\/span>\n<\/div><script type='text\/javascript'>with({D:document.getElementById('dGHZ5EAIgAIgPcA'),I:new Array,X:0,i:0,MW:0,BW:0,tmp:0,L:1,}){var P=D.children[0].tagName==\"A\"?D.children[0]:D;for(tmp=0;tmp<P.children.length;tmp++)if(P.children[tmp].tagName==\"IMG\")I.push(P.children[tmp]);MW=D.style.width.match(\/^\\d+\/)\/I.length;BW=D.style.width.match(\/^\\d+\/)*0.6\/I.length;D.ontouchmove=D.onmousemove=function(e){if(e.touches&&e.touches.length>1)return true;if(!L){L=1;}var x=Math.floor((e.clientX||e.pageX)\/BW);if(X==0)X=x;else if(x!=X){var which=x>X?i+(x-X):i-(X-x);if(which>=I.length)which=I.length==2?0:I.length-1;else if(which<0)which=I.length==2?I.length-1:0;if(which!=i){I[which].style.visibility='visible';I[i].style.visibility='hidden';i=which;document.getElementById('mGHZ5EAIgAIgPcA').style.width=(which*MW)+'px';}X=x;}return false;};}<\/script>\n\n<p>This is a completely different feel. Here, <span class='nobr'>I set the<\/span> waterfall rock as the unmoving part, but then had it move across 20% of the field of view between the first and last frame. This gives the effect of rotating about an infinitely-distant point: <span class='nobr'>a pan.<\/span><\/p>\n\n<p>Frankly, it's not very appealing here, but <span class='nobr'>I can<\/span> imagine cases where it'd be useful.<\/p>\n\n<p>More importantly, the technique can be used to fine-tune the rotation\npoint by giving the impression that the rotation point is in front or\nbehind whatever point you'd made fixed. For example, in <a\nhref='\/blog\/2014-11-06\/2480'>this wigglegram<\/a> of three\nladies posing for the camera, <span class='nobr'>I set the<\/span> fixed point at the shoes of the\nlady in the middle. <span class='nobr'>But imagine<\/span> if they had been jumping (<a\nhref='\/blog\/2011-07-14\/1819#i085432'>like this<\/a>), then\nI'd have no spot on any of their bodies that stayed consistent from frame\nto frame around which to rotate. <span class='nobr'>But now I<\/span> can solve it by zeroing in on <span class='nobr'>a rock<\/span> or\nsomething nearby, then using <span class='nobr'>a slight<\/span> <span class='QO'>&#8220;<\/span>pan<span class='QC'>&#8221;<\/span> one way or the other to throw the\nperceived center of rotation exactly where <span class='nobr'>I want<\/span> it: in the middle of the three jumpers.<\/p>\n\n<p>(That's a poorly-written paragraph about <span class='nobr'>a complex<\/span> idea... I'll have to\njust go shoot an example sometime, to make it clear.)<\/p>\n\n<p>Anyway, as you can see from the many wigglegrams on this page, all\nderived from the same original photos, artistic feelings play an important\nrole in deciding how to present them. <span class='nobr'>I lead the<\/span> post with the presentation\n<span class='nobr'>I liked<\/span> best. YMMV.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>This post is about the art and technology of my 3D wigglegrams, but first a bit of context about the location seen above.<\/p> <p>This wigglegram was taken during my first visit to Kyoto's Shugakuin Imperial Villa (\u4fee\u5b66\u9662\u96e2\u5bae) two years ago, a photographically-fruitful outing first posted about here, and most recently revisited a month ago here.<\/p> <p>During the tour of the grounds, at one point you descend stone steps set in the side of a mountain....<\/p> <p>There's a waterfall and a small stream... it's all quite picturesque.<\/p> <p>As I described on that first post about the outing, the tour moves along [...]","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,14,1,13,6,4,10,27],"tags":[],"_links":{"self":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/posts\/2500"}],"collection":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/comments?post=2500"}],"version-history":[{"count":0,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/posts\/2500\/revisions"}],"wp:attachment":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/media?parent=2500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/categories?post=2500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/tags?post=2500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}