{"id":1177,"date":"2011-04-26T08:26:15","date_gmt":"2011-04-26T15:26:15","guid":{"rendered":"http:\/\/mcclanahoochie.com\/blog\/?post_type=portfolio&#038;p=1177"},"modified":"2023-06-10T10:32:19","modified_gmt":"2023-06-10T17:32:19","slug":"real-time-hdr-tonemapping","status":"publish","type":"post","link":"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/real-time-hdr-tonemapping\/","title":{"rendered":"Single Camera Real Time HDR Tonemapping"},"content":{"rendered":"<h3>April 2011<\/h3>\n<p>&nbsp;<\/p>\n<p><em><strong>Abstract<\/strong><\/em><\/p>\n<p>As a final project for my <a href=\"http:\/\/compphotography.wordpress.com\/\" target=\"_blank\" rel=\"noopener\">Computational Photography<\/a> class at Georgia Tech, I created an application that uses a single video camera to create <a href=\"http:\/\/en.wikipedia.org\/wiki\/Tone_mapping\" target=\"_blank\" rel=\"noopener\">tonemapped<\/a> <a href=\"http:\/\/en.wikipedia.org\/wiki\/High_dynamic_range_imaging\" target=\"_blank\" rel=\"noopener\">HDR<\/a> images in real time. This project&#8217;s inspiration comes from Soviet Montage Production&#8217;s <a href=\"http:\/\/www.sovietmontage.com\/2010\/09\/09\/hdr-video-a-reality\/\" target=\"_blank\" rel=\"noopener\">DSLR HDR video<\/a>.<\/p>\n<p>The app runs on Linux PCs (using USB or Firewire cameras) <em>and<\/em> Android phones (using the built-in camera). Custom OpenCV code manages the different exposure images, and generates a basic HDR image. The HDR image is fed to a tonemapping algorithm by <a href=\"http:\/\/www.mpi-inf.mpg.de\/~mantiuk\/contrast_domain\/\" target=\"_blank\" rel=\"noopener\">Mantiuk et al<\/a>, creating either a &#8216;ghostly&#8217; or &#8216;painterly&#8217; effect.<\/p>\n<p>An example of the Mantiuk tonemapping effect made with a DSLR camera and Luminance-HDR can be found\u00a0<a href=\"http:\/\/www.flickr.com\/photos\/mcclanahoochie\/5557708398\/in\/set-72157626343999590\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p>Some example project result images and videos can be seen below.<\/p>\n<p>&nbsp;<\/p>\n<p><em><strong>Videos<\/strong><\/em><\/p>\n<p><strong><em><\/em><em><a href=\"http:\/\/www.youtube.com\/watch?v=61oXtKp9SQI\" target=\"_blank\" rel=\"noopener\">Full Length Demo<\/a><\/em><\/strong><\/p>\n<p><span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/61oXtKp9SQI?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en-US&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span><\/p>\n<p><em><a href=\"http:\/\/www.youtube.com\/watch?v=t2oUN7MZYBA\" target=\"_blank\" rel=\"noopener\">Contrast Equalization<\/a><\/em><\/p>\n<p><em><a href=\"http:\/\/www.youtube.com\/watch?v=Rl7DDT75g8E\" target=\"_blank\" rel=\"noopener\">Contrast Mapping<\/a><\/em><\/p>\n<p>&nbsp;<\/p>\n<p><em><strong>Sample Images<\/strong><\/em><\/p>\n<figure id=\"attachment_1185\" aria-describedby=\"caption-attachment-1185\" style=\"width: 630px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/map.png\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1185\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/real-time-hdr-tonemapping\/map\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/map.png?fit=1440%2C900&amp;ssl=1\" data-orig-size=\"1440,900\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"contrast mapping\" data-image-description=\"&lt;p&gt;contrast mapping&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;contrast mapping&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/map.png?fit=1024%2C640&amp;ssl=1\" class=\"size-large wp-image-1185\" title=\"contrast mapping\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/map-1024x640.png?resize=640%2C400\" alt=\"contrast mapping\" width=\"640\" height=\"400\" srcset=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/map.png?resize=1024%2C640&amp;ssl=1 1024w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/map.png?resize=300%2C187&amp;ssl=1 300w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/map.png?w=1440&amp;ssl=1 1440w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><figcaption id=\"caption-attachment-1185\" class=\"wp-caption-text\">contrast mapping<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_1186\" aria-describedby=\"caption-attachment-1186\" style=\"width: 630px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/eq.png\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1186\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/real-time-hdr-tonemapping\/eq\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/eq.png?fit=1440%2C900&amp;ssl=1\" data-orig-size=\"1440,900\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"contrast equalization\" data-image-description=\"&lt;p&gt;contrast equalization&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;contrast equalization&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/eq.png?fit=1024%2C640&amp;ssl=1\" class=\"size-large wp-image-1186\" title=\"contrast equalization\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/eq-1024x640.png?resize=640%2C400\" alt=\"contrast equalization\" width=\"640\" height=\"400\" srcset=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/eq.png?resize=1024%2C640&amp;ssl=1 1024w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/eq.png?resize=300%2C187&amp;ssl=1 300w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/eq.png?w=1440&amp;ssl=1 1440w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><figcaption id=\"caption-attachment-1186\" class=\"wp-caption-text\">contrast equalization<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_1189\" aria-describedby=\"caption-attachment-1189\" style=\"width: 374px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/d0-map.jpg\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1189\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/real-time-hdr-tonemapping\/d0-map\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/d0-map.jpg?fit=769%2C960&amp;ssl=1\" data-orig-size=\"769,960\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"android normal + contrast mapped\" data-image-description=\"&lt;p&gt;Android Camera Screen Capture&amp;#8211; Mid-exposure Image (top) | Contrast Mapped HDR (bottom)&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Android Camera Screen Capture&amp;#8211; Mid-exposure Image (top) | Contrast Mapped HDR (bottom)&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/d0-map.jpg?fit=769%2C960&amp;ssl=1\" class=\"size-full wp-image-1189     \" title=\"android normal + contrast mapped\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/d0-map.jpg?resize=384%2C461\" alt=\"Android Camera Screen Capture-- Mid-exposure Image (top) | Contrast Mapped HDR (bottom)\" width=\"384\" height=\"461\" \/><\/a><figcaption id=\"caption-attachment-1189\" class=\"wp-caption-text\">Android Camera Screen Capture&#8211; Mid-exposure Image (top) | Contrast Mapped HDR (bottom)<\/figcaption><\/figure>\n<figure id=\"attachment_1195\" aria-describedby=\"caption-attachment-1195\" style=\"width: 374px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/d-b0-map.png\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1195\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/real-time-hdr-tonemapping\/d-b0-map\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/d-b0-map.png?fit=800%2C960&amp;ssl=1\" data-orig-size=\"800,960\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"Android Contrast Mapped HDR 2\" data-image-description=\"&lt;p&gt;Android Camera Screen Capture&amp;#8211; Mid-exposure Image (top) | Contrast Mapped HDR (bottom)&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Android Camera Screen Capture&amp;#8211; Mid-exposure Image (top) | Contrast Mapped HDR (bottom)&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/d-b0-map.png?fit=800%2C960&amp;ssl=1\" class=\"size-full wp-image-1195  \" title=\"Android Contrast Mapped HDR 2\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/d-b0-map.png?resize=384%2C461\" alt=\"Android Camera Screen Capture-- Mid-exposure Image (top) | Contrast Mapped HDR (bottom)\" width=\"384\" height=\"461\" srcset=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/d-b0-map.png?w=800&amp;ssl=1 800w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/d-b0-map.png?resize=250%2C300&amp;ssl=1 250w\" sizes=\"(max-width: 384px) 100vw, 384px\" \/><\/a><figcaption id=\"caption-attachment-1195\" class=\"wp-caption-text\">Android Camera Screen Capture&#8211; Mid-exposure Image (top) | Contrast Mapped HDR (bottom)<\/figcaption><\/figure>\n<p><em><strong>Implementation Details<\/strong><\/em><\/p>\n<p>Three images are captured from a single camera, each with varying exposures (low, medium, high). These are then added into a single HDR image by adding the\u00a0<a href=\"http:\/\/www.petapixel.com\/2011\/05\/05\/biology-for-photographers-why-is-the-aperture-scale-logarithmic\/\" target=\"_blank\" rel=\"noopener\">logarithm<\/a> of each image. The HDR image is fed to a tonemapping algorithm by\u00a0<a href=\"http:\/\/www.mpi-inf.mpg.de\/~mantiuk\/contrast_domain\/\" target=\"_blank\" rel=\"noopener\">Mantiuk et al<\/a>, taken from the<strong>\u00a0<a href=\"http:\/\/qtpfsgui.sourceforge.net\/\" target=\"_blank\" rel=\"noopener\">Luminance HDR<\/a><\/strong> project, and modified for this application.<\/p>\n<p>Mantuik et al&#8217;s tonemapping operator can work in different two modes: <em>contrast mapping<\/em>, or <em>contrast equalization<\/em>. Both methods are fairly computationally intensive, requiring <em>severe down-scaling<\/em> of the raw camera images to keep processing time reasonably fast.<\/p>\n<p>On Linux, USB cameras are supported (and captured) by OpenCV, while Firewire cameras are handled by a custom libdc1394 wrapper. Most USB cameras only support changing the brightness (not exposure), which generates a <em>faux<\/em>-HDR image that then gets tonemapped. An AVT Guppy machine vision firewire camera was also used for testing, because it allows changing the shutter speed and adjusting gain. This camera produced much better results than any webcam tested.<\/p>\n<p>On Android, the built-in camera was controlled via Android camera APIs in Java. Unfortunately, there is a <em>massive delay<\/em> between setting the exposure, and when the camera actually gets to that exposure. After each exposure change, an arbitrary number of dummy frames are discarded before grabbing an image, in attempt to give the camera time to adjust. This waiting for the camera&#8217;s exposure change takes up about as much time as the actual processing, exaggerating an already slow image processing loop.<\/p>\n<p>&nbsp;<\/p>\n<p><em><strong>Application Details<\/strong><\/em><\/p>\n<p>Pros \/ Features:<\/p>\n<ul>\n<li>Single camera, <em>live<\/em> High Dynamic Range Image viewing (real time hdr)<\/li>\n<li>Mantuik tone mapping operators\n<ul>\n<li>Contrast <em>Mapping<\/em> (faster, exaggerates shadows, darker)<\/li>\n<li>Contrast <em>Equalization<\/em> (slower, exaggerates colors, brighter)<\/li>\n<\/ul>\n<\/li>\n<li>Cross platform (Android \/ Linux \/ with a little work, Windows)<\/li>\n<li>Various camera support (USB \/ Firewire \/ Android)<\/li>\n<li>No image alignment pre-processing needed (assuming little camera movement)<\/li>\n<li>OpenCV + OpenMP<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Cons \/ TODOs:<\/p>\n<ul>\n<li>Very\u00a0low resolution<\/li>\n<li>Low frame rate (exposure change time limits frame rate)<\/li>\n<li>Android&#8217;s camera exposure change is terribly slow<\/li>\n<li>No fancy GUI<\/li>\n<li>Manual adjustment of camera settings required (trial-and-error based)<\/li>\n<li>Results are\u00a0extremely\u00a0dependent on quality\/extent of the camera&#8217;s exposure changes (quality = actually getting to the desired +\/-2 EV)<\/li>\n<li>Port code to GPU<\/li>\n<li>Use a faster tone-mapping-operator<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><em><strong>Resources<\/strong><\/em><\/p>\n<p>All the code for this project can be found in my Google Code repository:<br \/>\n<a href=\"https:\/\/code.google.com\/p\/viewercv\/\" target=\"_blank\" rel=\"noopener\"> ViewerCV<\/a> (Android) \u00a0| \u00a0<a href=\"https:\/\/code.google.com\/p\/rttmo\/\" target=\"_blank\" rel=\"noopener\">rttmo<\/a> (Linux)<\/p>\n<p>Download\u00a0<a href=\"https:\/\/market.android.com\/details?id=com.viewercv\" target=\"_blank\" rel=\"noopener\">ViewerCV<\/a> on Android Market.<\/p>\n<p>Related <a href=\"http:\/\/mcclanahoochie.com\/blog\/portfolio\/computer-vision-on-android-opencv\/\" target=\"_blank\" rel=\"noopener\">Android computer vision<\/a> post.<\/p>\n<p>Class presentation <a href=\"http:\/\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/Real_time_HDR_Tonemapping_with_a_Single_Camera.pdf\">slides<\/a>.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>April 2011 &nbsp; Abstract As a final project for my Computational Photography class at Georgia Tech, I created an application that uses a single video camera to create tonemapped HDR images in real time. This project&#8217;s inspiration comes from Soviet Montage Production&#8217;s DSLR HDR video. The app runs on Linux PCs (using USB or Firewire &#8230; <a title=\"Single Camera Real Time HDR Tonemapping\" class=\"read-more\" href=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/real-time-hdr-tonemapping\/\" aria-label=\"Read more about Single Camera Real Time HDR Tonemapping\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[58,121,108,54,92,101,29,122],"class_list":["post-1177","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-computational-photography","tag-hdr","tag-image-enhancement","tag-image-processing","tag-opencv","tag-programming","tag-projects","tag-tonemapping"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pZdXI-iZ","jetpack-related-posts":[{"id":1153,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/computer-vision-on-android-opencv\/","url_meta":{"origin":1177,"position":0},"title":"Computer Vision on Android with OpenCV","author":"mcclanahoochie","date":"April 8, 2011","format":false,"excerpt":"March 2011 With the help of Motodev Studio for Android, I've\u00a0extracted\u00a0the\u00a0android-opencv JNI\u00a0camera example and spawned a fork of my original computer vision app,\u00a0Viewer, to an OpenCV version: ViewerCV. Both are\u00a0available on Git Hub\u00a0as open source software example of doing Computer Vision on Android with OpenCV. Viewer Features: *FAST Features (default\u2026","rel":"","context":"In \"android\"","block_context":{"text":"android","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/android\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/viewercv1.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1912,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/11\/mini-review-of-topaz-adjust-5\/","url_meta":{"origin":1177,"position":1},"title":"Mini-Review of Topaz Adjust 5","author":"mcclanahoochie","date":"November 24, 2011","format":false,"excerpt":"I recently picked up a copy of Topaz Adjust 5 (released November 15th 2011), and fell in love with it! Here is a simple mini-review and some first impressions of Adjust 5. Topaz Adjust is a photo-editing plug-in developed by Topaz Labs that integrates into editors (such as Photoshop) by\u2026","rel":"","context":"In \"image editing\"","block_context":{"text":"image editing","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/image-editing\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/11\/topaz-labs-logo.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2144,"url":"https:\/\/mcclanahoochie.com\/blog\/2012\/04\/new-camera-nikon-d7000\/","url_meta":{"origin":1177,"position":2},"title":"New Camera: Nikon D7000","author":"mcclanahoochie","date":"April 8, 2012","format":false,"excerpt":"It's official: I'm really into photography as a hobby right now :), proven with my recent purchase... I just upgraded my\u00a0old camera, to a Nikon D7000, and WOW, what an upgrade! Now I finally have auto exposure bracketing (for much easier HDR images)! Even though \u00a0this camera makes HDR really\u2026","rel":"","context":"In \"camera\"","block_context":{"text":"camera","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/camera\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/04\/2012-04-05_18-02-12_891-e1333803287432-1024x607.jpg?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/04\/2012-04-05_18-02-12_891-e1333803287432-1024x607.jpg?resize=350%2C200 1x, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/04\/2012-04-05_18-02-12_891-e1333803287432-1024x607.jpg?resize=525%2C300 1.5x"},"classes":[]},{"id":2018,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/12\/last-post-of-2011\/","url_meta":{"origin":1177,"position":3},"title":"Last Post of 2011","author":"mcclanahoochie","date":"December 31, 2011","format":false,"excerpt":"Nothing important here, just some last minute ramblings while reflecting back on 2011... January - Spoke at the ATT Developer's Conference about a few of my Android projects February - Bought my first DSLR: a Nikon D3100 March - Discovered HDR photography April - Released first version of ViewerCV into\u2026","rel":"","context":"In \"life\"","block_context":{"text":"life","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/life\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/lh4.googleusercontent.com\/--3YyhA5zcyE\/Tvo1Ap80SuE\/AAAAAAAAEI0\/nU4TJ4fZq8c\/s160-c\/BestOf2011.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2168,"url":"https:\/\/mcclanahoochie.com\/blog\/2012\/04\/opencl-image-pyramid-detail-enhancement\/","url_meta":{"origin":1177,"position":4},"title":"Laplacian Pyramid Image Enhancement","author":"mcclanahoochie","date":"April 27, 2012","format":false,"excerpt":"My final project for the Computational Photography class at GaTech. Multi-scale image contrast\/detail manipulation Operating on images at multiple scales is conventionally done using multi-scale decompositions, such as the Laplacian pyramid [Burt and Adelson 1983].\u00a0Such techniques decompose an image to multiple detail layers at different scales in a pyramid like\u2026","rel":"","context":"In \"computational photography\"","block_context":{"text":"computational photography","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/computational-photography\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/04\/pyr_detail.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2314,"url":"https:\/\/mcclanahoochie.com\/blog\/2012\/07\/samsung-galaxy-s-iii-vs-motorola-droid-x\/","url_meta":{"origin":1177,"position":5},"title":"Samsung Galaxy S III vs Motorola DROID X","author":"mcclanahoochie","date":"July 14, 2012","format":false,"excerpt":"I recently upgraded my phone from a Motorola Droid X to a Samsung Galaxy S3 (finally!), and WOW what a difference! Below is a giant chart comparing the two phones, but first I'll list some random thoughts about owning and using the GS3. Not surprisingly, everything about the Galaxy S\u2026","rel":"","context":"In \"android\"","block_context":{"text":"android","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/android\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/07\/DSC_0468-1-300x246.jpg?resize=350%2C200","width":350,"height":200},"classes":[]}],"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts\/1177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/comments?post=1177"}],"version-history":[{"count":0,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts\/1177\/revisions"}],"wp:attachment":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/media?parent=1177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/categories?post=1177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/tags?post=1177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}