<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-851933833498682629</id><updated>2012-02-15T23:35:48.817-08:00</updated><category term='images'/><category term='Sigma dp2 spp'/><category term='dll'/><category term='bicubic'/><category term='Malibu Canyon'/><category term='graduation'/><category term='Father&apos;s Office'/><category term='16-bit'/><category term='photos'/><category term='big government'/><category term='Wii Fit'/><category term='war'/><category term='Death Jr.'/><category term='LACMA DP2'/><category term='Sigma dp2 simpler times'/><category term='C++'/><category term='Dp2 Panorama autostitch'/><category term='Osirix'/><category term='dp2 d300 comparison'/><category term='dancing'/><category term='illegal immigration'/><category term='my recent documents'/><category term='macro'/><category term='managed'/><category term='proclaimers'/><category term='3D volumetric data'/><category term='weddings'/><category term='rant'/><category term='interpolation'/><category term='Law Of Dancing'/><category term='d40x'/><category term='line profile'/><category term='zoom lenses'/><category term='peace'/><category term='prime lenses'/><category term='photography'/><category term='music'/><category term='d80'/><category term='iPhone 4s'/><category term='16bit images'/><category term='C#'/><category term='Sigma Dp2'/><category term='unmanaged'/><category term='Sigma dp2 fireworks'/><category term='16 bit bitmap'/><category term='flowers'/><category term='image processing'/><category term='nikon'/><category term='d40'/><category term='lens selection'/><category term='bitmap'/><category term='future plans'/><category term='Bresenham'/><category term='Random numbers'/><title type='text'>Finished my Imaging PhD!</title><subtitle type='html'>Image processing and other random topics.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-3303251201860093344</id><published>2011-10-23T18:10:00.000-07:00</published><updated>2011-10-23T18:17:55.045-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigma Dp2'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone 4s'/><title type='text'>The difference between the iPhone 4s camera and the dp2</title><content type='html'>Is not as large as I thought it would be.  I suspect that if I were able to control the aperture and focus point, then the iPhone camera might actually be pretty nice.  As it is, it still remains the camera to go to when you don't have something else.&lt;br /&gt;&lt;br /&gt;For instance, here's a photo of Thomas with one camera:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-j5otMW1pElw/TqS7pRnuhuI/AAAAAAAAADI/DlRpqOTaN_A/s1600/SDIM2081.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://2.bp.blogspot.com/-j5otMW1pElw/TqS7pRnuhuI/AAAAAAAAADI/DlRpqOTaN_A/s400/SDIM2081.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5666860548917987042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here he is with the other:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-mcFuEKwFwEo/TqS8F8TybQI/AAAAAAAAADU/hklbjUL48I8/s1600/IMG_0116.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://4.bp.blogspot.com/-mcFuEKwFwEo/TqS8F8TybQI/AAAAAAAAADU/hklbjUL48I8/s400/IMG_0116.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5666861041413418242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think it's pretty clear which one is which, but I'll leave that as an exercise to the reader :)  Both were autocorrected in lightroom 3.41 (along with the 'punch' preset)&lt;br /&gt;&lt;br /&gt;The photos were taken at dusk, so that both of them would be at the edge of their operable range.&lt;br /&gt;&lt;br /&gt;Personally, I believe that the first photo is a better one, because:&lt;br /&gt;1) shadows were handled better&lt;br /&gt;2) crisper overall&lt;br /&gt;3) less purple&lt;br /&gt;4) Focus handling is better&lt;br /&gt;&lt;br /&gt;But it's not like the second one is so far behind that it's not usable.  I guess the real question is how the prints turn out...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-3303251201860093344?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/3303251201860093344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=3303251201860093344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/3303251201860093344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/3303251201860093344'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2011/10/difference-between-iphone-4s-camera-and.html' title='The difference between the iPhone 4s camera and the dp2'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-j5otMW1pElw/TqS7pRnuhuI/AAAAAAAAADI/DlRpqOTaN_A/s72-c/SDIM2081.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-7305858153090883788</id><published>2011-05-02T13:12:00.000-07:00</published><updated>2011-05-02T13:20:17.092-07:00</updated><title type='text'>Radiation FUD: "Unsafe at any dose"</title><content type='html'>So I saw &lt;a href="http://www.nytimes.com/2011/05/01/opinion/01caldicott.html?_r=1"&gt;this article in the NYTimes&lt;/a&gt;, and it really triggered something in me.  An irritation about doctors who think that they "know better" about something that they know nothing about?&lt;br /&gt;&lt;br /&gt;It's really made me very angry, and as someone who actually knows a bit about medical physics, I just have to rant.  &lt;br /&gt;&lt;br /&gt;The author is just plain wrong about many of her facts.&lt;br /&gt;&lt;br /&gt;She denigrates physicists for discussing 'permissible doses of radiation', and states that radiation in any dose is dangerous.  She seems to be completely uneducated on the nature of radiation itself.  Does she stay away from sunlight all the time?  The sun is a large source of radiation, including the photons that we use to see-- and&lt;br /&gt;sometimes those photons interact with skin cells and produce melanomas.  Does that mean that sunlight in any dose is completely unsafe, and that we should stay away from all light sources or photon emissions?  I certainly hope she's not advocating that stance, since the human body produces &lt;a href="http://en.wikipedia.org/wiki/Vitamin_D"&gt;vitamin D&lt;/a&gt; when exposed to sunlight, and staying indoors can lead to bone degeneration.&lt;br /&gt;&lt;br /&gt;She says that physicists also ignore the effects of internal dosing-- but is she aware that the radioactive contents of potassium rich foods &lt;a href="http://en.wikipedia.org/wiki/Banana_equivalent_dose"&gt;have been well studied&lt;/a&gt;.  Or how about a PET scan-- where does she think that the source for that image comes from?  Hint 1: it's radiation, hint 2: it's internal.&lt;br /&gt;&lt;br /&gt;How about airplane travel?  Should we stop all air travel, because flying above the protective layers of atmosphere will deliver radiation dose about the equivalent of a chest x-ray?&lt;br /&gt;&lt;br /&gt;Does she never walk on grass?  Because &lt;a href="http://www.globalsecurity.org/military/systems/munitions/du.htm"&gt;dirt contains trace amounts of uranium&lt;/a&gt;. Not enough to be practically harmful, but by her standard of 'any dose is dangerous', she would never step foot on dirt again.&lt;br /&gt;&lt;br /&gt;How about CT scans, or mammograms?  Those images do not appear by magic, they appear by radiation.  And interestingly enough, radiologists have long argued _against_ dose constraints in the US, because they state that dose constraints will interfere with their ability to treat and diagnose a patient.  The ACR has a '&lt;a href="http://www.acr.org/SecondaryMainMenuCategories/quality_safety/RadSafety/RadiationSafety/guideline-diagnostic-reference.aspx"&gt;guideline&lt;/a&gt;,' but there is no law.  For her to claim that doctors have been shut out of the legislative process when it comes to radiation standards is disingenuous at best.&lt;br /&gt;&lt;br /&gt;Even so, there is an entire field of medical physics, called dosimetry, that is predicated on the concept of ALARA (As Low As Reasonably Achievable).  The more signal (radiation) that is used when taking these images, the better idea the radiologist can get of the internal contents of a person using these imaging modalities.  Increased signal also means increased dose to the patient. and so&lt;br /&gt;medical physicists and device manufacturers strive to reduce the amount of dose requires to produce a useful medical image.  (My dissertation was a subset of this field, aimed at reducing mammography radiation through computational increase of signal to noise).&lt;br /&gt;&lt;br /&gt;Radiation can be a tool in other fields as well, not only for diagnostic medical procedures, but also for producing power.  I believe that the debate should be between the various sources of power that we have available to us.  In the comparison between fossil fuels and nuclear power, the deleterious effects of neither should be&lt;br /&gt;discounted.  Living within 1000 yards of a freeway have been &lt;a href="http://www.ehjournal.net/content/6/1/23"&gt;correlatively linked&lt;/a&gt; with higher cancer rates, and such particulates (or worse) are released by coal-burning plants, as opposed to just oil. Wind energy has problems with environmental advocates worried about wildlife migration patterns and with nearby residents thinking that it&lt;br /&gt;messes up the skyline.  The production of solar panels is just as bad as producing other &lt;a href="http://cleantechnica.com/2009/01/14/danger-solar-panels-can-be-hazardous-to-your-health/"&gt;silicon-based electronic devices&lt;/a&gt;, because it's a silicon-based electronic device.  All of these technologies have advantages and disadvantages, and it's important to weigh facts rather than knee-jerk reactions.&lt;br /&gt;&lt;br /&gt;Personally, I believe that nuclear power is the best plan for long-term stability and growth of the country, but only if sufficient safeguards are put in place.  The plant between Los Angeles and San Diego, San Onofre, has a 25 foot tsunami wall, which was found to be inadequate in Fukushima.  Now that we know that such a disaster is&lt;br /&gt;possible, I think it should be a national priority to ensure that our current generators are reinforced against the kinds of natural disasters that Japan experienced, not just the 7.0 quake that&lt;a href="http://latimesblogs.latimes.com/lanow/2011/03/san-onofre-nuclear-plant-can-withstand-quakestsunamis-officials-say.html?cid=6a00d8341c630a53ef014e86b65b5c970d"&gt; Edison claims San Onofre can withstand&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I do believe that this debate is a very important one, but I think it's also important that those who contribute to this debate have some knowledge about the facts at hand.  I would suggest that Dr. Caldicott begin with &lt;a href="http://xkcd.com/radiation/"&gt;Randall Munroe's Dose Chart&lt;/a&gt; before she makes fantastic claims about a field in which she has no expertise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-7305858153090883788?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/7305858153090883788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=7305858153090883788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7305858153090883788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7305858153090883788'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2011/05/radiation-fud-unsafe-at-any-dose.html' title='Radiation FUD: &quot;Unsafe at any dose&quot;'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-4559708295233978254</id><published>2010-04-27T07:34:00.001-07:00</published><updated>2010-04-27T07:42:44.300-07:00</updated><title type='text'>Diaper changing sucks</title><content type='html'>It does suck.  But not for the normal reasons that you're thinking; you're probably thinking, "Oh, just some guy, bitching about having to clean up his own kid's shit.  If you don't like it, don't have kids."&lt;br /&gt;&lt;br /&gt;Fair enough.  I'm just complaining about the myriad modern 'conveniences' that end up taking a huge extra portion of time.&lt;br /&gt;&lt;br /&gt;Take the diaper genie.  The problem with this miracle device is that way in which diapers are actually disposed.  This thing has a trap door through which you push the used diaper, and then the diaper is hygienically housed in an elongated blue trash bag (blue, presumably, so that hazmat teams know to avoid it).  But here's the thing-- that trap door is incredibly strong.  So you have to push a soaking wet diaper through this very strong trapdoor.  And if the kid has diarrhea?  Then guess what you're getting all over your hands!  In the fight between trapdoor and diaper, the diaper usually loses.&lt;br /&gt;&lt;br /&gt;"But that just means you haven't sealed the diaper properly!" I hear you cry.  Maybe your baby is less prolific than mine, but he seems to be like the rest of us-- some days, he's like a little cow, turning everything that went in into very stinky fertilizer.  And on those days, those size 4 diapers just aren't enough.&lt;br /&gt;&lt;br /&gt;The wipes used to clean everything up?  What the hell?  Why, when I try to pull out one, do I get five?  I only have one hand free, not two-- the other one is trying to keep the baby from getting up and jumping off the changing table to go off onto another adventure.  Sometimes, these wipes are even glued together, so I'm forced to use two instead of one.  These are Whole Foods wipes.  For all the save-the-planet rhetoric, they could at least spend some time making sure that I get one wipe when I want one wipe.&lt;br /&gt;&lt;br /&gt;To add injury to insult, the diaper genie blue hazmat bags have a little raised plastic ring around the inside.  I see no point for this raised ring; however, if you scrape your hand along said ring, you'll cut yourself.  So it's a good morning when your hand gets covered in piss, shit, and blood as you try to keep up with a toddler.&lt;br /&gt;&lt;br /&gt;Time to drop off at daycare, with bandages...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-4559708295233978254?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/4559708295233978254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=4559708295233978254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/4559708295233978254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/4559708295233978254'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2010/04/diaper-changing-sucks.html' title='Diaper changing sucks'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-6612419823652566724</id><published>2010-03-18T09:22:00.000-07:00</published><updated>2010-03-18T09:54:06.379-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='future plans'/><title type='text'>Class idea</title><content type='html'>I've been mulling this over the last few days.  &lt;br /&gt;&lt;br /&gt;I want to teach a class, but a very specific class.  I want to teach a class that would train students to be engineers that I would hire and expect, right out of the gate, that they knew how to do the work required, or at least how to work with a team.  A lot of my work in graduate school was isolated from the nine-tenths of work necessary to make a product commercial.  For instance, I learned how to make a gaussian blur filter, and even learned how to make equivalent versions as a PDE, using the FFT, and as a straight-up filter, but I never learned how to wrap that knowledge into something that could be presented to the end user.&lt;br /&gt;&lt;br /&gt;The thing is, in order to teach at a university in the US (and maybe in other parts of the world, I haven't checked), you have to publish papers on the field.  Publication has nothing to do with industry success; in fact, I'd argue that they are inversely indicative of commercial success.  Academic code only has to work on a small subset of data, and may not have been thoroughly tested and almost certainly hasn't been looked at in detail by anyone other than the author.  That makes for very non-robust code, not code you can just roll out into the world.  I want to teach students how to make production-level code, and that means looking at things like source control, software engineering, bug tracking, and so forth.  Now, how to get a university to bite, when I don't want to publish?  That's the question...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-6612419823652566724?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/6612419823652566724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=6612419823652566724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6612419823652566724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6612419823652566724'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2010/03/class-idea.html' title='Class idea'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-2004742551327354755</id><published>2010-03-18T09:14:00.001-07:00</published><updated>2010-03-18T09:14:56.753-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graduation'/><title type='text'>Graduated!</title><content type='html'>I don't really update this much, but maybe I should?&lt;br /&gt;&lt;br /&gt;Anyway, I'm all graduated now!  Up next:  What next?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-2004742551327354755?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/2004742551327354755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=2004742551327354755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/2004742551327354755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/2004742551327354755'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2010/03/graduated.html' title='Graduated!'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-8783129416351043806</id><published>2009-08-03T08:08:00.000-07:00</published><updated>2009-08-03T08:16:05.559-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dp2 Panorama autostitch'/><title type='text'>Morning Pano with the Dp2</title><content type='html'>So the Littlest Guy was talking all morning this morning, starting at around 4:30 and just continuing.  After about an hour or so of this, I got up and took him from his exhausted mother to go wandering around to try to get him to sleep.  On my way out the door, I saw this:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mmroden.smugmug.com/photos/609738141_GiMh4-L-1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 800px; height: 484px;" src="http://mmroden.smugmug.com/photos/609738141_GiMh4-L-1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is a pano of three shots stitched together.  I actually shot about 30, but the three I used were the ones with the least blur.  It turns out, the best way to avoid motion blur from just holding the camera in one hand with a squirming baby in the other is to set your exposure to manual, aperture to f/5.0 (for reasonable sharpness, even though everything's at infinity), infinity manual focus, and a shutter speed of 1/80.  I used 1/40, which meant that the vast majority of my shots were blurry, and only a few salvagable.  Luckily, they were positioned in the region I wanted to give me the image I wanted (though not as wide as I would have liked).  I used the incredible &lt;a href="http://www.cs.ubc.ca/~mbrown/autostitch/autostitch.html"&gt;Autostitch &lt;/a&gt;to make it work.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I might have been able to have taken this in one shot with the Dp1, just because it's got a wider lens; but then, I'd have two of these cameras, and that's a bit much.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-8783129416351043806?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/8783129416351043806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=8783129416351043806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/8783129416351043806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/8783129416351043806'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2009/08/morning-pano-with-dp2.html' title='Morning Pano with the Dp2'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-5660903724167703523</id><published>2009-07-19T16:15:00.000-07:00</published><updated>2009-07-19T16:20:11.422-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LACMA DP2'/><title type='text'>Los Angeles County Museum of Art</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Tahoma; font-size: 12px; "&gt;&lt;p class="first" style="margin-bottom: 0px; margin-top: 0px; "&gt;Found in LACMA, these shots just hurt.&lt;/p&gt;&lt;p style="margin-bottom: 0px; margin-top: 1em; "&gt;Stare at them for about thirty seconds and tell me if you don't agree:&lt;/p&gt;&lt;div class="operaContainer" style="overflow-x: visible; overflow-y: visible; margin-top: 1em; margin-bottom: 1em; "&gt;&lt;div class="imageZoomer" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; text-align: left; position: relative; width: 540px; margin-top: 1em; margin-right: auto; margin-bottom: 1em; margin-left: auto; "&gt;&lt;div class="toolbar" style="margin-bottom: 5px; text-align: center; "&gt;&lt;span class="prefix" style="color: rgb(153, 153, 153); margin-right: 10px; "&gt;Image control:&lt;/span&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Zoom out&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="disabled" style="text-decoration: none; color: rgb(153, 153, 153); margin-right: 10px; cursor: pointer; "&gt;Zoom 100%&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Zoom in&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Contract All&lt;/a&gt;&lt;a class="button" href="http://www.markmroden.com/photos/595663421_nsGVF-L.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Open in new window&lt;/a&gt;&lt;/div&gt;&lt;div title="click to expand all images" class="viewport" style="overflow-x: auto; overflow-y: auto; width: 540px; visibility: hidden; "&gt;&lt;img src="http://www.markmroden.com/photos/595663421_nsGVF-L.jpg" class="zoom first last" style="margin-top: 0em; margin-bottom: 0em; overflow-x: hidden; overflow-y: hidden; margin-left: auto; margin-right: auto; cursor: pointer; display: block; " /&gt;&lt;img src="http://a.img-dpreview.com/images/imgexpand0.gif" class="expand-icon" style="margin-left: auto; margin-right: auto; cursor: pointer; margin-top: 0px !important; margin-bottom: 0px !important; position: absolute; left: 10px; top: 30px; visibility: hidden; " /&gt;&lt;/div&gt;&lt;div title="click to contract all images" class="expandedViewport" style="position: absolute; top: 20px; display: block; left: -33px; "&gt;&lt;img src="http://www.markmroden.com/photos/595663421_nsGVF-L.jpg" width="606" height="600" style="cursor: pointer; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(51, 51, 51); border-right-color: rgb(51, 51, 51); border-bottom-color: rgb(51, 51, 51); border-left-color: rgb(51, 51, 51); margin-top: 0px !important; margin-bottom: 0px !important; " /&gt;&lt;img src="http://a.img-dpreview.com/images/imgexpand1.gif" class="contract-icon" style="cursor: pointer; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(51, 51, 51); border-right-color: rgb(51, 51, 51); border-bottom-color: rgb(51, 51, 51); border-left-color: rgb(51, 51, 51); margin-top: 0px !important; margin-bottom: 0px !important; position: absolute; left: 10px; top: 10px; border-width: initial; border-color: initial; visibility: hidden; " /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="margin-bottom: 0px; margin-top: 1em; "&gt;and&lt;/p&gt;&lt;div class="operaContainer" style="overflow-x: auto; overflow-y: auto; margin-top: 1em; margin-bottom: 1em; "&gt;&lt;img src="http://www.markmroden.com/photos/595663773_oyYxT-M.jpg" class="zoom first last" style="margin-top: 0em; margin-bottom: 0em; overflow-x: hidden; overflow-y: hidden; display: block; margin-right: auto; margin-left: auto; " /&gt;&lt;/div&gt;&lt;p style="margin-bottom: 0px; margin-top: 1em; "&gt;While this one just hurts my social conscience:&lt;/p&gt;&lt;div class="operaContainer" style="overflow-x: visible; overflow-y: visible; margin-top: 1em; margin-bottom: 1em; "&gt;&lt;div class="imageZoomer" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; text-align: left; position: relative; width: 540px; margin-top: 1em; margin-right: auto; margin-bottom: 1em; margin-left: auto; "&gt;&lt;div class="toolbar" style="margin-bottom: 5px; text-align: center; "&gt;&lt;span class="prefix" style="color: rgb(153, 153, 153); margin-right: 10px; "&gt;Image control:&lt;/span&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Zoom out&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="disabled" style="text-decoration: none; color: rgb(153, 153, 153); margin-right: 10px; cursor: pointer; "&gt;Zoom 100%&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Zoom in&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Expand All&lt;/a&gt;&lt;a class="button" href="http://www.markmroden.com/photos/595659697_9xFz8-L.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Open in new window&lt;/a&gt;&lt;/div&gt;&lt;div title="click to expand all images" class="viewport" style="overflow-x: auto; overflow-y: auto; width: 540px; visibility: visible; "&gt;&lt;img src="http://www.markmroden.com/photos/595659697_9xFz8-L.jpg" class="zoom first last" style="margin-top: 0em; margin-bottom: 0em; overflow-x: hidden; overflow-y: hidden; margin-left: auto; margin-right: auto; cursor: pointer; display: block; " /&gt;&lt;img src="http://a.img-dpreview.com/images/imgexpand0.gif" class="expand-icon" style="margin-left: auto; margin-right: auto; cursor: pointer; margin-top: 0px !important; margin-bottom: 0px !important; position: absolute; left: 10px; top: 30px; visibility: hidden; " /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="margin-bottom: 0px; margin-top: 1em; "&gt;It's cool to see just how far art has come from this:&lt;/p&gt;&lt;div class="operaContainer" style="overflow-x: visible; overflow-y: visible; margin-top: 1em; margin-bottom: 1em; "&gt;&lt;div class="imageZoomer" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; text-align: left; position: relative; width: 540px; margin-top: 1em; margin-right: auto; margin-bottom: 1em; margin-left: auto; "&gt;&lt;div class="toolbar" style="margin-bottom: 5px; text-align: center; "&gt;&lt;span class="prefix" style="color: rgb(153, 153, 153); margin-right: 10px; "&gt;Image control:&lt;/span&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Zoom out&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="disabled" style="text-decoration: none; color: rgb(153, 153, 153); margin-right: 10px; cursor: pointer; "&gt;Zoom 100%&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Zoom in&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Contract All&lt;/a&gt;&lt;a class="button" href="http://www.markmroden.com/photos/595664043_HBwbo-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Open in new window&lt;/a&gt;&lt;/div&gt;&lt;div title="click to expand all images" class="viewport" style="overflow-x: auto; overflow-y: auto; width: 540px; visibility: hidden; "&gt;&lt;img src="http://www.markmroden.com/photos/595664043_HBwbo-M.jpg" class="zoom first last" style="margin-top: 0em; margin-bottom: 0em; overflow-x: hidden; overflow-y: hidden; margin-left: auto; margin-right: auto; cursor: pointer; display: block; " /&gt;&lt;img src="http://a.img-dpreview.com/images/imgexpand0.gif" class="expand-icon" style="margin-left: auto; margin-right: auto; cursor: pointer; margin-top: 0px !important; margin-bottom: 0px !important; position: absolute; left: 10px; top: 30px; visibility: hidden; " /&gt;&lt;/div&gt;&lt;div title="click to contract all images" class="expandedViewport" style="position: absolute; top: 20px; display: block; left: -30px; "&gt;&lt;img src="http://www.markmroden.com/photos/595664043_HBwbo-M.jpg" width="600" height="435" style="cursor: pointer; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(51, 51, 51); border-right-color: rgb(51, 51, 51); border-bottom-color: rgb(51, 51, 51); border-left-color: rgb(51, 51, 51); margin-top: 0px !important; margin-bottom: 0px !important; " /&gt;&lt;img src="http://a.img-dpreview.com/images/imgexpand1.gif" class="contract-icon" style="cursor: pointer; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(51, 51, 51); border-right-color: rgb(51, 51, 51); border-bottom-color: rgb(51, 51, 51); border-left-color: rgb(51, 51, 51); margin-top: 0px !important; margin-bottom: 0px !important; position: absolute; left: 10px; top: 10px; border-width: initial; border-color: initial; visibility: hidden; " /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="margin-bottom: 0px; margin-top: 1em; "&gt;and, even further back, this:&lt;/p&gt;&lt;div class="operaContainer" style="overflow-x: visible; overflow-y: visible; margin-top: 1em; margin-bottom: 1em; "&gt;&lt;div class="imageZoomer" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; text-align: left; position: relative; width: 540px; margin-top: 1em; margin-right: auto; margin-bottom: 1em; margin-left: auto; "&gt;&lt;div class="toolbar" style="margin-bottom: 5px; text-align: center; "&gt;&lt;span class="prefix" style="color: rgb(153, 153, 153); margin-right: 10px; "&gt;Image control:&lt;/span&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Zoom out&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="disabled" style="text-decoration: none; color: rgb(153, 153, 153); margin-right: 10px; cursor: pointer; "&gt;Zoom 100%&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" disabled="" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Zoom in&lt;/a&gt;&lt;a class="button" href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32444431#" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Contract All&lt;/a&gt;&lt;a class="button" href="http://www.markmroden.com/photos/595672071_QEFqZ-L.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 204); margin-right: 10px; cursor: pointer; "&gt;Open in new window&lt;/a&gt;&lt;/div&gt;&lt;div title="click to expand all images" class="viewport" style="overflow-x: auto; overflow-y: auto; width: 540px; visibility: hidden; "&gt;&lt;img src="http://www.markmroden.com/photos/595672071_QEFqZ-L.jpg" class="zoom first last" style="margin-top: 0em; margin-bottom: 0em; overflow-x: hidden; overflow-y: hidden; margin-left: auto; margin-right: auto; cursor: pointer; display: block; " /&gt;&lt;img src="http://a.img-dpreview.com/images/imgexpand0.gif" class="expand-icon" style="margin-left: auto; margin-right: auto; cursor: pointer; margin-top: 0px !important; margin-bottom: 0px !important; position: absolute; left: 10px; top: 30px; visibility: hidden; " /&gt;&lt;/div&gt;&lt;div title="click to contract all images" class="expandedViewport" style="position: absolute; top: 20px; display: block; left: -130px; "&gt;&lt;img src="http://www.markmroden.com/photos/595672071_QEFqZ-L.jpg" width="800" height="534" style="cursor: pointer; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(51, 51, 51); border-right-color: rgb(51, 51, 51); border-bottom-color: rgb(51, 51, 51); border-left-color: rgb(51, 51, 51); margin-top: 0px !important; margin-bottom: 0px !important; " /&gt;&lt;img src="http://a.img-dpreview.com/images/imgexpand1.gif" class="contract-icon" style="cursor: pointer; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-top-width: 2px; border-right-width: 2px; border-bottom-width: 2px; border-left-width: 2px; border-top-color: rgb(51, 51, 51); border-right-color: rgb(51, 51, 51); border-bottom-color: rgb(51, 51, 51); border-left-color: rgb(51, 51, 51); margin-top: 0px !important; margin-bottom: 0px !important; position: absolute; left: 10px; top: 10px; border-width: initial; border-color: initial; visibility: hidden; " /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class="last" style="margin-bottom: 0px; margin-top: 1em; "&gt;All photos courtesy of the Dp2.  &lt;a href="http://mmroden.smugmug.com/gallery/8962371_coWrp/1/595660307_9uUyk"&gt;Check out the rest here&lt;/a&gt;.&lt;/p&gt;&lt;p class="last" style="margin-bottom: 0px; margin-top: 1em; "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="last" style="margin-bottom: 0px; margin-top: 1em; "&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-5660903724167703523?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/5660903724167703523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=5660903724167703523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/5660903724167703523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/5660903724167703523'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2009/07/los-angeles-county-museum-of-art.html' title='Los Angeles County Museum of Art'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-6365458102642405949</id><published>2009-07-19T08:13:00.001-07:00</published><updated>2009-07-19T08:56:15.663-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dp2 d300 comparison'/><title type='text'>Where the Dp2 just absolutely falls down</title><content type='html'>On the last night that my brother Paul and his wife Valerie were in town, they sold a copy of their print, America the Beautiful, to my boss/advisor/mentor, Daniel V.  Daniel wanted a picture taken with them, and so I tried with the Dp2.  This was the result:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://mmroden.smugmug.com/photos/595348300_gEpmr-M.jpg"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Focus was off, and the thing just couldn't figure it out.  I can only ask people to sit still for so long, and the back LCD was just painfully useless for focus finding in the relatively low light of my living room.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This was the result using the Nikon d300, 17-55 f/2.8 lens, and sb900 flash:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mmroden.smugmug.com/photos/595346610_3CkqM-M.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 600px; height: 399px;" src="http://mmroden.smugmug.com/photos/595346610_3CkqM-M.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, when compared to ~$3k of photography gear that I use to shoot weddings, the Dp2 is just not quite there yet.  It's also one quarter the price.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-6365458102642405949?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/6365458102642405949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=6365458102642405949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6365458102642405949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6365458102642405949'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2009/07/where-dp2-just-absolutely-falls-down.html' title='Where the Dp2 just absolutely falls down'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-8824524714297204720</id><published>2009-07-05T09:38:00.000-07:00</published><updated>2009-07-05T11:24:34.312-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigma dp2 spp'/><title type='text'>Spp 3.5.2 is much better</title><content type='html'>My first few posts, I bitched about the quality of the SPP program.  No more!  SPP 3.5.2 has addressed all of my concerns except cropping.  Sure, it slows down when I'm running massive matlab processing routines in the background, but if it didn't, then it would be violating the laws of computer science.&lt;br /&gt;&lt;br /&gt;It's also easier to go from what I had to this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/571447236_WiaXr-L-1.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;from the first time I posted the shot, &lt;a href="http://imagingphd.blogspot.com/2009/06/sigma-dp2-first-impressions.html"&gt;in this post here&lt;/a&gt;, where Thomas had Alien Eyes and the photo itself was very, very dark.&lt;br /&gt;&lt;br /&gt;The more I look at these, the more I realize I really need to calibrate my monitor sometime soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-8824524714297204720?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/8824524714297204720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=8824524714297204720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/8824524714297204720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/8824524714297204720'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2009/07/spp-352-is-much-better.html' title='Spp 3.5.2 is much better'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-2057621919929194536</id><published>2009-07-05T09:27:00.001-07:00</published><updated>2009-07-05T09:37:29.174-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigma dp2 fireworks'/><title type='text'>Fireworks and the Dp2</title><content type='html'>Fireworks shots can be tricky.  It requires timing and technique in order to get it right.&lt;br /&gt;&lt;br /&gt;First, you'll probably want to stop down to f/8 or something like that.  Fireworks are bright, and they will easily blow past your sensor's dynamic range if you leave the aperture at 2.8 and expose for a while.&lt;br /&gt;&lt;br /&gt;Expose for more than a second.  At one second, unless your timing is really, really good, you'll only get about half of any given burst.  2.5 or even 5 seconds is the right amount.&lt;br /&gt;&lt;br /&gt;Because you'll be exposing for a long time, make sure to use a tripod.  If you don't use a tripod, you still have to stabilize your camera; no stabilization makes for wonky trails effects.&lt;br /&gt;&lt;br /&gt;If you can, try to frame the firework with something else.  The shots I took yesterday didn't have anything to really frame with, except in one shot, by a lucky accident.&lt;br /&gt;&lt;br /&gt;With that having been said, enjoy!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/582261568_PsnBi-L-2.jpg"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/582262206_7Q8WH-L-2.jpg"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/582269037_iyxyn-L-3.jpg"&gt;&lt;br /&gt;&lt;br /&gt;I like this shot, although you can see the need for a tripod here.  Problem is, a lot of these shots were fairly well stabilized (even though a stroller hardly qualifies as particularly stable), so I can't really be sure if the jitters in this image are from wind or from the camera moving.  Usually, when all the trails of the fireworks move together, it's from camera movement, but I don't think that's what happened here.  I may be just fooling myself because I like the shot.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/582270889_fruyX-L-1.jpg"&gt;&lt;br /&gt;&lt;br /&gt;This last shot showed some very interesting postprocessing recovery.  I don't know if the thumbnail production on the Dp2 is just really bad compared to the raw output, but the following image was just a mass of white where the large burst is.  But, because I shot in raw, that white was easily recovered into some very cool trails:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/582272095_gkLWa-L-1.jpg"&gt;&lt;br /&gt;&lt;br /&gt;And finally, the serendipetous shot of someone else in the crowd chimping.  I would say something snarky like "Firewroks Watching: Yer doin' it wrong!", but I was guilty myself of chimping a fair share throughout the show.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/582260296_KH5G4-L-1.jpg"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-2057621919929194536?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/2057621919929194536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=2057621919929194536' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/2057621919929194536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/2057621919929194536'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2009/07/fireworks-and-dp2.html' title='Fireworks and the Dp2'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-4851902005190995074</id><published>2009-07-05T07:26:00.000-07:00</published><updated>2009-07-05T07:30:02.662-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigma dp2 simpler times'/><title type='text'>Simpler Times</title><content type='html'>Ah, simpler times.&lt;br /&gt;When a man could go to a beach and fly a kite.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/581415477_zunp6-L.jpg"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/581416423_N9NTU-L.jpg"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When people would take black and white photos.&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/581417496_cQLEu-L.jpg"&gt;&lt;br /&gt;(gotta love that extreme detail...)&lt;br /&gt;&lt;br /&gt;When a bunch of friends could gather on a beach...&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/581415999_ZbH7s-L.jpg"&gt;&lt;br /&gt;&lt;br /&gt;... and drink a frosty beverage.&lt;br /&gt;&lt;img src="http://www.markmroden.com/photos/581417024_X58Hr-L-1.jpg"&gt;&lt;br /&gt;&lt;br /&gt;This July 3rd semi-nostalgia has been brought to you by the Dp2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-4851902005190995074?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/4851902005190995074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=4851902005190995074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/4851902005190995074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/4851902005190995074'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2009/07/simpler-times.html' title='Simpler Times'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-8371430963841575998</id><published>2009-06-28T10:31:00.001-07:00</published><updated>2009-06-28T11:08:52.465-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sigma Dp2'/><title type='text'>Sigma Dp2: Focus</title><content type='html'>&lt;div style="text-align: left;"&gt;Focusing with the Sigma Dp2 can be a bit of a trial.  The difficulty lies in the tradeoff: Do you want the super thin f/2.8 when closely focused, or do you want to get everything in the foreground in focus while also sharpening the background?  Personally, I've always tended to go for the former rather than the latter, but that's because I think the d300 with 60mm lens is a bit more forgiving than the 24mm the dp2 has.&lt;/div&gt;&lt;br /&gt;I really like the colors in this one:&lt;br /&gt;&lt;img src="http://mmroden.smugmug.com/photos/576165222_g7yqb-M.jpg"&gt;&lt;br /&gt;&lt;a href="http://mmroden.smugmug.com/photos/576165222_g7yqb-X3.jpg"&gt;Larger Image here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But the focus is such that certain branches are out of focus, and the whole image is close to what I want, but far enough away that it really bugs me.&lt;br /&gt;&lt;br /&gt;I should go to f/4, at least, but then when I'm faced with some fast-moving bees, then it's hard enough to capture them with a slower aperture:&lt;br /&gt;&lt;img src="http://mmroden.smugmug.com/photos/576164303_Ev7qL-M.jpg"&gt;&lt;br /&gt;&lt;a href="http://mmroden.smugmug.com/photos/576164303_Ev7qL-X3.jpg"&gt;Larger Image Here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And if I'm careful about putting the focus point on the closest portion of the object in the frame, then the image comes out fine:&lt;br /&gt;&lt;img src="http://mmroden.smugmug.com/photos/576166062_hsQQQ-M.jpg"&gt;&lt;br /&gt;larger:&lt;br /&gt;&lt;a href="http://mmroden.smugmug.com/photos/576166062_hsQQQ-X3.jpg"&gt;Larger Image Here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On a side note about battery life: this is in the first five cycles of the camera battery, which are supposed to be the weakest.  I took roughly thirty minutes to walk around the block and take these photos, and by the end, the battery went from 3 bars to dead.  A second battery is a must.&lt;br /&gt;&lt;br /&gt;I also think I've figured out why SPP irritates me so much-- you can't cancel an operation.  If the program let me go from one image to the next with more rapidity, I think it would feel like less of a dog.  The images it produces really are superb, but the lack of responsiveness seems to be the biggest impediment to me liking it.&lt;br /&gt;&lt;br /&gt;Having said all of that!  Here's a shot that I particularly like, if only that I could walk up to the nest to take it:&lt;br /&gt;&lt;img src="http://mmroden.smugmug.com/photos/576194305_TAAPr-M.jpg"&gt;&lt;br /&gt;&lt;a href="http://mmroden.smugmug.com/photos/576194305_TAAPr-X3.jpg"&gt;Larger version here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yay, birds!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-8371430963841575998?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/8371430963841575998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=8371430963841575998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/8371430963841575998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/8371430963841575998'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2009/06/sigma-dp2-focus.html' title='Sigma Dp2: Focus'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-7163743834279615064</id><published>2009-06-28T10:12:00.000-07:00</published><updated>2009-06-28T10:31:05.565-07:00</updated><title type='text'>Sigma Dp2 Second Impressions</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma; font-size: 12px; "&gt;(another cross-post from the dpreview forums: &lt;span class="Apple-style-span" style="font-family: Tahoma; font-size: 12px; "&gt;&lt;a href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32252929"&gt;http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32252929&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family: Tahoma;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma; font-size: 12px; "&gt;My biggest gripe was the speed of SPP. I've since sat here and done a bit more accurate timing with a stopwatch.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma; font-size: 12px; "&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;For many photos, the program takes 2-5 seconds, which is just this side of irritating. On the occasional photo, though, it takes around 20 seconds, with the progress bar just locked in the middle. I don't know what the difference is with those photos, and the timing problem doesn't seem to be consistent; looking at the same photo a second time may or may not produce the same timing lag. That behavior suggests to me that there's some threading issues, and I'd wonder if people on older machines who find the program works very well are also on single processor machines.&lt;/p&gt;But that's secondary to the camera, really.&lt;br /&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;I took the camera to a country club for an event, and then to my sister-in-law's house. The interior of her house is pretty dim, so that was a good test of interior shots (our own house, in comparison, has many many windows, and far less interesting things to shoot).&lt;/p&gt;One of my photography mentors, at the country club:&lt;br /&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(1,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(1,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(1,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(1,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://mmroden.smugmug.com/photos/575288880_AikjE-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain1" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://forums.dpreview.com/images/one.gif" width="13" height="13" id="iconimg1" onmouseover="mouseoverimg(1);" onmouseout="mouseoutimg(1);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(1,2);" onmouseover="mouseoverimg(1);" onmouseout="mouseoutimg(1);" src="http://mmroden.smugmug.com/photos/575288880_AikjE-M.jpg" border="0" id="embedimg1" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg1" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;larger:&lt;br /&gt;&lt;a class="forumsmessage" href="http://mmroden.smugmug.com/photos/575288880_AikjE-X3.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://mmroden.smugmug.com/photos/575288880_AikjE-X3.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;I'm diggin' the use of this camera as a portrait device; since it's mostly silent (except for the focusing motor), people don't really notice when it's being used on them.&lt;/p&gt;Some people pay great attention:&lt;br /&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(2,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(2,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(2,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(2,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://mmroden.smugmug.com/photos/575290764_GB2Ua-M-1.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain2" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://forums.dpreview.com/images/one.gif" width="13" height="13" id="iconimg2" onmouseover="mouseoverimg(2);" onmouseout="mouseoutimg(2);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(2,2);" onmouseover="mouseoverimg(2);" onmouseout="mouseoutimg(2);" src="http://mmroden.smugmug.com/photos/575290764_GB2Ua-M-1.jpg" border="0" id="embedimg2" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg2" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;larger:&lt;br /&gt;&lt;a class="forumsmessage" href="http://mmroden.smugmug.com/photos/575290764_GB2Ua-X3-1.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://mmroden.smugmug.com/photos/575290764_GB2Ua-X3-1.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;The problem there was that he was too close, and it was too dark in there to get really accurate focus. I'm using firmware 1.0.2, but it's still a bit difficult for the camera to find things. I still think the photo is a good capture of him but I wish the focus point had been on is eyes, which was my intention.&lt;/p&gt;This photo was of a mural inside the club:&lt;br /&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(3,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(3,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(3,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(3,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://mmroden.smugmug.com/photos/575318317_BMo5a-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain3" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="13" height="13" id="iconimg3" onmouseover="mouseoverimg(3);" onmouseout="mouseoutimg(3);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(3,2);" onmouseover="mouseoverimg(3);" onmouseout="mouseoutimg(3);" src="http://mmroden.smugmug.com/photos/575318317_BMo5a-M.jpg" border="0" id="embedimg3" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg3" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;larger:&lt;br /&gt;&lt;a class="forumsmessage" href="http://mmroden.smugmug.com/photos/575318317_BMo5a-X3.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://mmroden.smugmug.com/photos/575318317_BMo5a-X3.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;It was shot at ISO 100, which meant that I could not see it at all on the viewfinder and had to push it up to +2 exp and with a great deal of X3 fill light in order to see anything. At 1/40, it's somewhat lucky that I was able to get a shot without hand-held blurring.&lt;/p&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;Because the sensor is so sharp, it's not as forgiving with handheld shots as a d300, in my experience. Close examination of portraits especially show slight blurring, as here:&lt;/p&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(4,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(4,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(4,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(4,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://www.markmroden.com/photos/575293989_oPpi2-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain4" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="13" height="13" id="iconimg4" onmouseover="mouseoverimg(4);" onmouseout="mouseoutimg(4);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(4,2);" onmouseover="mouseoverimg(4);" onmouseout="mouseoutimg(4);" src="http://www.markmroden.com/photos/575293989_oPpi2-M.jpg" border="0" id="embedimg4" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg4" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;larger:&lt;br /&gt;&lt;a class="forumsmessage" href="http://www.markmroden.com/photos/575293989_oPpi2-X3.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://www.markmroden.com/photos/575293989_oPpi2-X3.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;Pixel peeping on this (and other) shots will show slight blurring. The shot was at 1/40, which for a lens that's 41mm equivalent, should have been fine to stop motion and so forth, assuming they were still (which they were). So, I really have to bump to something like 1/60 with people, just to get the most out of the sharpness of the lens and the sensor.&lt;/p&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;A quick note on metering. The metering performance is not very good when moving from sunlight to shade. I'm used to metering being done off of the current focus spot (and have set my spot metering accordingly), but moving from shade with 1/13 metering at ISO 100 to sunlight keeps the same 1/13 metering. Only after about ten seconds or so does the metering seem to catch on. I've found myself really switching into manual mode more in order to catch everything.&lt;/p&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;The flash is quite good, with the expected redeye that will need to be fixed in postprocessing (would be great if SPP had it...):&lt;/p&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(5,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(5,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(5,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(5,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://mmroden.smugmug.com/photos/575322362_b4aBX-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain5" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="13" height="13" id="iconimg5" onmouseover="mouseoverimg(5);" onmouseout="mouseoutimg(5);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(5,2);" onmouseover="mouseoverimg(5);" onmouseout="mouseoutimg(5);" src="http://mmroden.smugmug.com/photos/575322362_b4aBX-M.jpg" border="0" id="embedimg5" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg5" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;larger:&lt;br /&gt;&lt;a class="forumsmessage" href="http://mmroden.smugmug.com/photos/575322362_b4aBX-X3.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://mmroden.smugmug.com/photos/575322362_b4aBX-X3.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;Her hair is that red. Speaking of color, this succulent appeared to be way, way more green than in real life. I think the effect is cool, but it's also very artificial in appearance, especially in the out-of-focus areas:&lt;/p&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(6,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(6,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(6,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(6,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://www.markmroden.com/photos/575291964_MTtk2-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain6" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://forums.dpreview.com/images/one.gif" width="13" height="13" id="iconimg6" onmouseover="mouseoverimg(6);" onmouseout="mouseoutimg(6);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(6,2);" onmouseover="mouseoverimg(6);" onmouseout="mouseoutimg(6);" src="http://www.markmroden.com/photos/575291964_MTtk2-M.jpg" border="0" id="embedimg6" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg6" /&gt;&lt;br /&gt;&lt;br /&gt;larger:&lt;br /&gt;&lt;a class="forumsmessage" href="http://www.markmroden.com/photos/575291964_MTtk2-X3.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://www.markmroden.com/photos/575291964_MTtk2-X3.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;All other test shots: &lt;a class="forumsmessage" href="http://www.markmroden.com/gallery/8704093_zsKmR#575287740_Dt5Ph" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://www.markmroden.com/gallery/8704093_zsKmR#575287740_Dt5Ph&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;All in all, I'm really getting into this camera. It's not a very rapid shooter, and I find that that means I can't just spam shots and hope that one of fifteen work out. I recently shot a wedding with a second shooter and an assistant, and all told, we had some 3.3k shots at the end of the day. One third that number would be unattainable on a Dp2; the battery life isn't that good, and the camera isn't so fast as to take the same shot three times in a row so you can choose the 'best' one later in post. I'm forced to think, to compose, to stop and ask what it is I want to shoot, which means that I'm getting back into photography as a hobby rather than as a business. That's exactly what I need right now, so the Dp2 is perfect for me at the moment.&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-7163743834279615064?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/7163743834279615064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=7163743834279615064' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7163743834279615064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7163743834279615064'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2009/06/another-cross-post-from-dpreview-forums.html' title='Sigma Dp2 Second Impressions'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-905093409167202886</id><published>2009-06-28T10:08:00.000-07:00</published><updated>2009-06-28T10:11:46.970-07:00</updated><title type='text'>Sigma Dp2 First Impressions</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Tahoma; font-size: 12px; "&gt;&lt;div&gt;(this post is also at dpreview.com: &lt;a href="http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32215272"&gt;http://forums.dpreview.com/forums/read.asp?forum=1027&amp;amp;message=32215272&lt;/a&gt;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;My dp2 showed up a day early, and proceeded to occupy what remained of the daylight hours. I figured I'd write a mini review here.&lt;br /&gt;First, I like the camera, but it has its foibles. Namely:&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;1) Focus! It's painful. If I'm in M mode, I want manual focus to be up all the damn time, not when I occasionally hit the focus button. I'm willing to live with the constraint that focus isn't that rapid (it's actually pretty comparable to a non-AF-S nikon, at least on the subjects I try to focus on, because I always focus on edges). I'm irked by a manual mode that isn't manual.&lt;/p&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;2) Going around the horn on ISO. I want to be able to select ISO, and then go left or right. Maybe I'm in the minority here, but constantly going to 1600 to go back to 100 is irritating. If there were a way to limit the qs menu from 100, 200, and 400 (for instance), I'd be fine, and a way to set that range for night shooting/day shooting.&lt;/p&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;3) The shutter seems to have just a touch of lag. I'd see something on the screen, hit the capture button, and then it would capture the moment just a bit later. Not a deal killer, but irking when trying to shoot a kid.&lt;/p&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;4) I assume that there's some focus lock thing (again with the focus!). I get the focus set how I like, and then I shoot, and the camera readjusts focus (incorrectly, most of the time). This behavior seemed a bit intermittent, and I'm not sure why. Maybe because I took the shot quickly within getting focus?&lt;/p&gt;Now the goodness!&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;1) I was pleasantly surprised at how closely the lens focused. The range is pretty excellent, for instance getting this shot here:&lt;/p&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(1,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(1,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(1,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(1,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://www.markmroden.com/photos/571446513_HRBtd-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain1" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://forums.dpreview.com/images/one.gif" width="13" height="13" id="iconimg1" onmouseover="mouseoverimg(1);" onmouseout="mouseoutimg(1);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(1,2);" onmouseover="mouseoverimg(1);" onmouseout="mouseoutimg(1);" src="http://www.markmroden.com/photos/571446513_HRBtd-M.jpg" border="0" id="embedimg1" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg1" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;larger image:&lt;br /&gt;&lt;a class="forumsmessage" href="http://www.markmroden.com/photos/571446513_HRBtd-XL.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://www.markmroden.com/photos/571446513_HRBtd-XL.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;That flower was pretty close to the lens, definitely within two feet, probably within one foot. That surprised me.&lt;/p&gt;2) This thing is sharp like a razor, when you get the focus right. Compare:&lt;br /&gt;&lt;br /&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(2,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(2,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(2,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(2,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://www.markmroden.com/photos/571446979_sxxgv-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain2" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="13" height="13" id="iconimg2" onmouseover="mouseoverimg(2);" onmouseout="mouseoutimg(2);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(2,2);" onmouseover="mouseoverimg(2);" onmouseout="mouseoutimg(2);" src="http://www.markmroden.com/photos/571446979_sxxgv-M.jpg" border="0" id="embedimg2" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg2" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;larger image:&lt;br /&gt;&lt;a class="forumsmessage" href="http://www.markmroden.com/photos/571446979_sxxgv-XL.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://www.markmroden.com/photos/571446979_sxxgv-XL.jpg&lt;/a&gt;&lt;br /&gt;with&lt;br /&gt;&lt;br /&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(3,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(3,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(3,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(3,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://www.markmroden.com/photos/276865140_wfz2T-M-2.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain3" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://forums.dpreview.com/images/one.gif" width="13" height="13" id="iconimg3" onmouseover="mouseoverimg(3);" onmouseout="mouseoutimg(3);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(3,2);" onmouseover="mouseoverimg(3);" onmouseout="mouseoutimg(3);" src="http://www.markmroden.com/photos/276865140_wfz2T-M-2.jpg" border="0" id="embedimg3" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg3" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;larger image:&lt;br /&gt;&lt;a class="forumsmessage" href="http://www.markmroden.com/photos/276865140_wfz2T-XL-2.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://www.markmroden.com/photos/276865140_wfz2T-XL-2.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3) It's possible to get shots of kids:&lt;br /&gt;&lt;br /&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(4,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(4,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(4,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(4,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://www.markmroden.com/photos/571447696_gWWWa-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain4" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="13" height="13" id="iconimg4" onmouseover="mouseoverimg(4);" onmouseout="mouseoutimg(4);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(4,2);" onmouseover="mouseoverimg(4);" onmouseout="mouseoutimg(4);" src="http://www.markmroden.com/photos/571447696_gWWWa-M.jpg" border="0" id="embedimg4" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg4" /&gt;&lt;br /&gt;&lt;br /&gt;original:&lt;br /&gt;&lt;a class="forumsmessage" href="http://www.markmroden.com/photos/571447696_gWWWa-X3.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://www.markmroden.com/photos/571447696_gWWWa-X3.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That become very nice black and whites:&lt;br /&gt;&lt;br /&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(5,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(5,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(5,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(5,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://www.markmroden.com/photos/571447236_WiaXr-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain5" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="13" height="13" id="iconimg5" onmouseover="mouseoverimg(5);" onmouseout="mouseoutimg(5);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(5,2);" onmouseover="mouseoverimg(5);" onmouseout="mouseoutimg(5);" src="http://www.markmroden.com/photos/571447236_WiaXr-M.jpg" border="0" id="embedimg5" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg5" /&gt;&lt;br /&gt;&lt;br /&gt;original:&lt;br /&gt;&lt;a class="forumsmessage" href="http://www.markmroden.com/photos/571447236_WiaXr-X3.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://www.markmroden.com/photos/571447236_WiaXr-X3.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;4) Black and white conversion has a very interesting graininess to it when converted using SPP:&lt;/p&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(6,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(6,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(6,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(6,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://www.markmroden.com/photos/571448723_ga8rq-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain6" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="13" height="13" id="iconimg6" onmouseover="mouseoverimg(6);" onmouseout="mouseoutimg(6);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(6,2);" onmouseover="mouseoverimg(6);" onmouseout="mouseoutimg(6);" src="http://www.markmroden.com/photos/571448723_ga8rq-M.jpg" border="0" id="embedimg6" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg6" /&gt;&lt;br /&gt;&lt;br /&gt;original:&lt;br /&gt;&lt;a class="forumsmessage" href="http://www.markmroden.com/photos/571448723_ga8rq-X3.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://www.markmroden.com/photos/571448723_ga8rq-X3.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Compare that to other Nikon converted b&amp;amp;w's from lightroom at similar iso:&lt;br /&gt;&lt;br /&gt;&lt;div align="center" style="padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; color: rgb(85, 85, 85); font-size: 11px; "&gt;Image control: &lt;span class="forumslink" onclick="zoomimg(7,0.5);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom out&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(7,0);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom 100%&lt;/span&gt; | &lt;span class="forumslink" onclick="zoomimg(7,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Zoom in&lt;/span&gt; | &lt;span class="forumslink" onclick="expandimg(7,2);" style="color: rgb(0, 0, 221); cursor: pointer; "&gt;Expand / Contract&lt;/span&gt; | &lt;a class="forumsmessage" href="http://www.markmroden.com/photos/544992191_Zetcm-M.jpg" target="_blank" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;New window&lt;/a&gt;&lt;/div&gt;&lt;div width="540" align="center" id="imgcontain7" style="zoom: 1; overflow-x: auto; overflow-y: auto; width: 540px; "&gt;&lt;img src="http://forums.dpreview.com/images/one.gif" width="13" height="13" id="iconimg7" onmouseover="mouseoverimg(7);" onmouseout="mouseoutimg(7);" style="cursor: pointer; position: absolute; z-index: 2; " /&gt;&lt;img onclick="expandimg(7,2);" onmouseover="mouseoverimg(7);" onmouseout="mouseoutimg(7);" src="http://www.markmroden.com/photos/544992191_Zetcm-M.jpg" border="0" id="embedimg7" alt="Click to expand / contract the width of this image" style="cursor: pointer; z-index: 1; " /&gt;&lt;/div&gt;&lt;img src="http://a.img-dpreview.com/images/one.gif" width="50" height="1" id="bufferimg7" /&gt;&lt;br /&gt;&lt;br /&gt;original:&lt;br /&gt;&lt;a class="forumsmessage" href="http://www.markmroden.com/photos/544992191_Zetcm-X3.jpg" target="_blank" title="Click to open link in a new browser window" style="text-decoration: none; color: rgb(0, 0, 221); "&gt;http://www.markmroden.com/photos/544992191_Zetcm-X3.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;Personally, I prefer the SPP image, and the actual ratio to keepers to throwaways because of movement is comparable.&lt;/p&gt;BUT! The extremely ugly:&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;SPP is, bar none, the worst image processing software I have ever used. The results are great, but take way way way too long. I have a dual core X2 2 ghz machine with 3 gb of RAM running Windows 7. By no means a screaming machine, but it's absolutely ridiculous that I should wait about a minute just to open an image.&lt;/p&gt;Continuing with enumerations, this software needs:&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;1) Someone to sit down the an optimizer and Scott Meyer's book on Effective C++. If they're not writing in C++, then they're doing it wrong, period. I'm willing to bet that if I took a look at that code, I would find a whole bunch of nested for loops with the stopping criteria evaluated in the loop rather than assigned to a const-- there's no way this code is this slow without some bad looping.&lt;/p&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;2) Here's another image processing optimization tip: if you iterate through the image more than once, you're doing it wrong.&lt;/p&gt;3) If you iterate without an iterator or a pointer, you're doing it wrong.&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;4) Cancel button. That the cancel button appears to be to kill the processing app is just wrong, because it could introduce data corruption issues.&lt;/p&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;5) Where's crop? I think that there are some basic functions that could be provided here pretty simply, like cropping to particular ratios (either predefined or user entered), or ... Well, really, I just want to crop.&lt;/p&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;6) It's ok to have a background thread that processes all the images in the specified folder in the background, so that when I open an image, I don't wait a minute for the image to open.&lt;/p&gt;7) What about presets that are available on the camera, like Sepia?&lt;br /&gt;&lt;br /&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;Final verdict: I really, really like this camera. It didn't take me that long to figure out the controls, and I figure that people will immediately correct my focus issues, which is fine. It will definitely replace my d300 as a walkaround camera, but I need more experience with it before I'll feel confident to take it to an event I'm paid to capture.&lt;/p&gt;&lt;p class="justify" style="text-align: justify; margin-top: 0px; "&gt;I will replace SPP as soon as I can. I fantasize that there will be a reasonable Lightroom plugin to process these images, because SPP really is just horrible. The images it makes are beautiful, but I don't buy the argument that good things come to those who wait; when I take 200 images, I don't want to take four days to process them.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-905093409167202886?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/905093409167202886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=905093409167202886' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/905093409167202886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/905093409167202886'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2009/06/sigma-dp2-first-impressions.html' title='Sigma Dp2 First Impressions'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-6315826252934093328</id><published>2008-07-23T08:42:00.000-07:00</published><updated>2008-07-23T09:01:22.237-07:00</updated><title type='text'>First paper... psyche!</title><content type='html'>So I keep wanting to write about the first paper that I was going to publish, but apparently there's some shenanigans still pending.  Yes, that's right, what I wrote turns out to have potential legal issues associated with it-- which is odd, considering the triviality of the solution in the paper.  Until the _second_ paper comes out (advisor, I'm looking at you...), this blog will continue to be about useless, trivial things.  Which is what most blogs are about anyway, so it's not like I'm not in good company.&lt;br /&gt;&lt;br /&gt;First up: &lt;a href="http://www.mahaenergy.com/store/Index.asp"&gt;Maha batteries.&lt;/a&gt;  These batteries are the &lt;span style="font-style: italic;"&gt;best&lt;/span&gt;, bar none, thanks for playing, see ya later.  I've had some &lt;a href="http://www.amazon.com/Rechargeable-Batteries-2650mAH-batteries-DC1500/dp/B000HWWH8O/ref=pd_bbs_1?ie=UTF8&amp;amp;s=electronics&amp;amp;qid=1216828561&amp;amp;sr=8-1"&gt;duracell rechargeables&lt;/a&gt;, and those damn things, even though they're rated for 2650 mAh, last about five minutes in my &lt;a href="http://www.amazon.com/Nikon-SB-800-Speedlight-Digital-Cameras/dp/B00015GYU4/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=electronics&amp;amp;qid=1216827971&amp;amp;sr=8-1"&gt;sb800 flash&lt;/a&gt;.  The maha's, though, those things last for a good couple of hours, even on repeat mode, and I only need one set of 5 batteries (the flash has a fifth battery for fast recycle times) to last for most of a wedding.  If you want batteries to go with your digital camera, look no further.  Plus, my charger was making odd crackling noises, so I called up Maha tech support.  They shipped me a new charger, which arrived the next business day (last Monday), for free, and it works like a charm.  How's that for customer service?  They have a customer for life, if they keep this up.&lt;br /&gt;&lt;br /&gt;Second up: how much fat in dairy products?  (How's that for a random topic...)  If you look at the &lt;a href="http://www.eatwell.gov.uk/asksam/healthydiet/milkanddairyq/"&gt;conventional wisdom&lt;/a&gt;, you can eat low fat (or no-fat) dairy products, and still get your vitamins and minerals.  That same website states that we get most of our vitamin D from the sun.  As a programmer, I go in the sun only when forced; for me, then, I need to get it from food.  Vitamins are only absorbed in fats, according to the &lt;a href="http://www.amazon.com/Textbook-Medical-Physiology-STUDENT-CONSULT/dp/0721602401/ref=reader_req_dp"&gt;physiology text&lt;/a&gt; I've been studying and teaching out of for a few years now.  The upshot?  You need fat in your diet to absorb vitamins.  It's that simple-- an entirely fat-free diet will mean that your body will have no mechanism for absorbing (some) vitamins in your gut, and that can mean certain anemias crop up, bone problems, etc etc.  So while everyone's all worried about not eating fat, make sure that you're still eating fat with your milk and yogurt, otherwise a lot of the good it can do you disappears.  Some of you know why I'm harping on this, some of you don't, and since there's only about two people who are reading this, I think you already know why I'd care so much about nutrition at the moment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-6315826252934093328?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/6315826252934093328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=6315826252934093328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6315826252934093328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6315826252934093328'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/07/first-paper-psyche.html' title='First paper... psyche!'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-3085985729362274845</id><published>2008-06-17T06:49:00.000-07:00</published><updated>2008-06-17T07:26:26.234-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wii Fit'/><category scheme='http://www.blogger.com/atom/ns#' term='Osirix'/><category scheme='http://www.blogger.com/atom/ns#' term='3D volumetric data'/><title type='text'>Wii Fit, Day 15 (wherein I bitch about OsiriX)</title><content type='html'>Whoo!  Second day below BMI 25-- down to 24.75!  And my Wii Fit age, whatever that's worth, is now down to 29.  Given that I felt like refried ass when I got home to do this, those numbers are saying something.  I'm not sure what they're saying ("Be tired when you work out!  That way, the board will think you're doing well!" or "When you're awake, your mind is working so much your body twitches and lowers your ability to balance.  Stop thinking, and you'll be younger!"), but hey, it was a nice shot in the arm after a very long day. &lt;br /&gt;&lt;br /&gt;Another great part was when it told me that Melodie was spending too much time asleep, and I should wake her up.  Not only is the Wii Fit harassing me if I traipse above the 25 BMI mark, but now it wants me to harass my wife as well.  Good job, Nintendo!&lt;br /&gt;&lt;br /&gt;But really, I spent the morning fixing my car and (re)writing a physics lab report.  &lt;a href="http://www.osirix-viewer.com/"&gt;OsiriX&lt;/a&gt; is a program used to view DICOM on the Mac.  It's free, but it's got some serious usability problems, and those problems cost me quite a bit of time.  First, it converts PET values to SUV values by default.  SUV stands for, really, Silly Useless Value-- it's an attempt to calibrate the activity in a location by the amount that should be expected in that area given your probe.  So if you're imaging, say, radioactive oxygen, then the lungs should be bright, and if they're not (or rather, where they're not) you've got a blockage in the lungs, and you now know where the blockage is so you can go and remove it.  That last bit of information is important; before PET, you could know something was wrong with the lungs, but not necessarily pinpoint it.  What was frustrating about OsiriX assigning PET values automatically was that the lab involved imaging a phantom, not any actual tissue, so there really is no baseline expectation from which to draw any conclusions, so the numbers that were being reported for pixel values were all wrong, and I had to rewrite big chunks of it.&lt;br /&gt;&lt;br /&gt;The other problem with OsiriX is that it's truly Volume of Interest (VOI) retarded.  The region of interest capability of the software is entirely based off of planar selections, and it is impossible (at least from what I could do) to save all of the regions of interest for a 3D PET image.  Sure, there were menu options to do so, but none of them worked, so I ended up doing a lot of the VOI stuff by hand, which was a pain.  And I really didn't want to do a volume rendering in order to get statistics under the VOI, and the volume rendering capability was all but useless, and wrong to boot.  It could not render a simply cylinder, as it kept putting holes in the side.&lt;br /&gt;&lt;br /&gt;The program may be useful for a simple viewer and simple DICOM database, but anything more complicated seems to be beyond its reach, or so much of a pain that you'd spend the majority of your time wrestling with the program rather than getting answers you need.&lt;br /&gt;&lt;br /&gt;The major problem is that the people who're writing the program have a very crufty attitude towards 3D volumetric data-- they think it's just a bunch of 2D images layered on top of each other.  That view is a convenience of the old hack of storing volumes of data as 2D images, and in the age of a modern computer which can handle more than a megabyte of memory at a time, should be banished from any realistic imaging software.  I'll say it again: imaging software that thinks of 3D images as 2D slices is WRONG.  2D slices may be a convenience for viewing data on a film, if that's your poison (and I'm not a radiologist, maybe there's some reason beyond "we've always done it this way" for the 2D slice viewing of 3D medical data), but when you're using a computer screen, you should take advantage of modern graphics hardware and treat the data as truly volumetric. &lt;br /&gt;&lt;br /&gt;Any software that wants to do so should:&lt;br /&gt;1) Store all data as single blocks of data.  There are no separate planes in a 3D data set.  I repeat, there are no single TIFF or DICOM planes in a 3D data set, so never save them as such.  There is only one block of data, or, if you're backprojecting, the original data itself. &lt;br /&gt;2) Visualize only in 3D.  Viewing on axis should be just moving a &lt;a href="http://www.opengl.org/documentation/specs/version1.1/glspec1.1/node28.html"&gt;clipping plane&lt;/a&gt; through a 3D dataset, and any axis should be selectable for this treatment, not just the z axis (which is what is normally done now).  Hell, if I want my axis to be 45 degrees off from x, y, and z, and I want to step through the data a plane at a time like that, that is extremely simply to do mathematically and provides the user with much more freedom from arbitrary constraints.  Anatomic data is not aligned to a grid, and treating it as such may prevent the visualization of useful objects.&lt;br /&gt;3) Use VOI's as entirely 3D datasets as well.  Since there are no 2D planes, there are no 2D ROI's either, but 3D VOI's.  I should be able to mark regions on my clipping plane, or place a sphere, or use a segmentation threshold (directly on the data, or on some derivative data, like the &lt;a href="http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm"&gt;laplacian&lt;/a&gt;) to gather regions.  If I want to be particularly snazzy, segmentation routines like &lt;a href="http://www.math.ucla.edu/%7Elvese/"&gt;Luminita's&lt;/a&gt; or &lt;a href="http://www.wisdom.weizmann.ac.il/%7Eachi/"&gt;Achi's&lt;/a&gt; should start to become standard.  None of this restriction of drawing VOIs as the sum of ROIs, except as the simplest case.  This VOI data should be a full 3D data block, just like my underlying data.&lt;br /&gt;&lt;br /&gt;Done with bitching.  To work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-3085985729362274845?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/3085985729362274845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=3085985729362274845' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/3085985729362274845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/3085985729362274845'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/wii-fit-day-15-wherein-i-bitch-about.html' title='Wii Fit, Day 15 (wherein I bitch about OsiriX)'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-7739304521984569327</id><published>2008-06-15T20:41:00.000-07:00</published><updated>2008-06-17T06:49:41.596-07:00</updated><title type='text'>Wii Fit, days 13 and 14</title><content type='html'>Took a break for a few days, mainly because I was being lazy.  So, on Saturday, I started at 11:30 in the evening.  I tried to get started at 8:30 in the morning, but nearly fell asleep during the sun salutations.  Anyway, I found out that if you use the Wii Fit over midnight, it will reset your timer, no matter what you were doing.  Seems like it might be useful to have the it consider a workout to be a solid block, rather than interrupting for a silly little thing like midnight.  But then again, maybe the cheerful wii fit board just has to reset by then anyway.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today, I did the boxing game twice, which is just fantastic.  I'm liking the advanced version a lot-- after all the pushups and so forth, I worked out the (shoulder) kinks.  Down to a BMI of 24.81, and also hiked for a couple of hours up to Griffith Park Observatory, but only about 26 minutes on the Fit.  Wii Fit Age: 36, still old, I guess. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-7739304521984569327?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/7739304521984569327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=7739304521984569327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7739304521984569327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7739304521984569327'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/wii-fit-days-14-and-15.html' title='Wii Fit, days 13 and 14'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-4708233175490516251</id><published>2008-06-11T22:20:00.000-07:00</published><updated>2008-06-11T22:21:39.298-07:00</updated><title type='text'>Wii Fit, Day 10 (or, I'm Weak)</title><content type='html'>Just... Couldn't... Do ... It ... Today&lt;br /&gt;&lt;br /&gt;I biked to and from school, which is apparently the same as 1 hour and 20 minutes, according to the Fit.&lt;br /&gt;&lt;br /&gt;I did do my body test-- down 0.7 pounds, but still just above a BMI of 25.  My age is now a whopping 34, up from 30 yesterday.  Ah well.&lt;br /&gt;&lt;br /&gt;But tomorrow is a new day!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-4708233175490516251?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/4708233175490516251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=4708233175490516251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/4708233175490516251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/4708233175490516251'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/wii-fit-day-10-or-im-weak.html' title='Wii Fit, Day 10 (or, I&apos;m Weak)'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-6091269144623929306</id><published>2008-06-10T22:49:00.000-07:00</published><updated>2008-06-10T23:02:53.181-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Malibu Canyon'/><category scheme='http://www.blogger.com/atom/ns#' term='Wii Fit'/><category scheme='http://www.blogger.com/atom/ns#' term='Father&apos;s Office'/><title type='text'>Wii Fit, Day 9</title><content type='html'>Today was a good day.  Studied for my final tomorrow, prepared for an image assessment trial (ie, got a protocol ready), and other such work things.  Halfway through the day, Serena showed up, and the three of us hiked in&lt;a href="http://www.markmroden.com/gallery/5144215_mAzpv#311072543_sQvZB"&gt; Malibu Canyon &lt;/a&gt;for two hours.  A fairly amorous couple decided to... er... get amorous in the crater lake there (we walked up, and she was in the water naked, and the guy was himself about to go in, but stopped just as we walked up.  I guess that's the risk of sex in a public park, even on a Tuesday afternoon).&lt;br /&gt;&lt;br /&gt;On the way home, we had to -- it was like a magnet pulling iron fillings, we had no choice-- dine at &lt;a href="http://www.fathersoffice.com/"&gt;Father's Office&lt;/a&gt;.  It is the tastiness, and the Wii chastised me for imbibing too much ("You've gained 0.7 pounds!  Good Lord, son, are you trying to crush me?"  I made that second sentence up, but not the first), but sometimes, life must be lived.   Today was a yoga/strength day, starting with deep breathing, half moon, dance pose, bridge, shoulder stand, and sun salutations, and then moving on to pushups (2x20), jackknifes (1x30), triceps (1x20), and plank (30 secs).  I really need to work on my pushup form; I may lower the number, just to make sure I don't blow the form into uselessness.&lt;br /&gt;&lt;br /&gt;Then, I watched Melodie do the meditation balance game, and she destroyed it.  180 seconds, sitting perfectly still.  I was amazed.  I tried to replicate the feat.  I failed.  She came in at one point, when I'd gotten to 130 seconds, and I lost it.  She told me, when I asked (peevishly, I'll admit), that all I had to do was to think of nothing-- which is much, much harder than it sounds.  So I failed a few more times.  And then I remembered reading in &lt;a href="http://www.elizabethgilbert.com/eatpraylove.htm"&gt;Eat, Pray, Love&lt;/a&gt; (a book about a very self absorbed rich person who trots around the globe after destroying the life of her soon-to-be ex-husband because she can't figure out how to go on a spiritual journey with another person) what she was told when she had a similar problem, and I paraphrase:  "It is a shame that no one else has had this problem before you."  That phrase really clicked; I started to think about that, while in the balance game, and voila-- 180 seconds.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-6091269144623929306?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/6091269144623929306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=6091269144623929306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6091269144623929306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6091269144623929306'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/wii-fit-day-9.html' title='Wii Fit, Day 9'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-1020751427298507628</id><published>2008-06-09T21:47:00.000-07:00</published><updated>2008-06-09T21:51:45.131-07:00</updated><title type='text'>Wii Fit, Day 8</title><content type='html'>Note to self: don't eat dinner and then try to do the Fit.  It will just tell you that you are a fatass, and that your lack of discipline has set your goal back by months.&lt;br /&gt;&lt;br /&gt;Melodie and I went for a bike ride for a good hour, hour and a half, to Beverly Hills today, and when we got back, I was so starving that I ate pretty much everything I could get my hands on.  I guess the biking is really upping my metabolism-- but the Fit was kind enough to point out that my weight had now recrossed the magical BMI of 25, and asked me to choose which of the lapses in mental discipline had led to my downfall.  Overeating, I suppose?  I guess I'm not supposed to eat, or I have to eat during a specific timeframe?  Or maybe I'm just grumpy that the damn thing would suggest that a weight fluctuation of a pound and a half is a huge amount, requiring an excuse-- and then go ahead and tell me that a fluctuation within 2 pounds is normal, from day to day.  Nice.&lt;br /&gt;&lt;br /&gt;Also, my Wii Fit age was 54, and then I redid the test, and it was 34.  Hrm.  I wonder if there's any rhyme or reason to how that gets calculated.&lt;br /&gt;&lt;br /&gt;So, feeling grumpy at the thing and that the biking up Santa Monica Blvd was enough for the day, I stopped after 10 minutes of balance exercises.  Tomorrow:  more strength training, as well as studying for a final.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-1020751427298507628?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/1020751427298507628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=1020751427298507628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/1020751427298507628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/1020751427298507628'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/wii-fit-day-8.html' title='Wii Fit, Day 8'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-1120502883717320110</id><published>2008-06-08T23:02:00.000-07:00</published><updated>2008-06-08T23:19:28.364-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wii Fit'/><category scheme='http://www.blogger.com/atom/ns#' term='Death Jr.'/><title type='text'>Wii Fit, Day Seven</title><content type='html'>For once, I thought I'd actually write up what I had done on the day that I had done it.&lt;br /&gt;&lt;br /&gt;Today is a momentous day (sort of)-- I finally managed to get my BMI below 25, now down to 24.93, and was rewarded with a thumbs up from my Mii.  Yay!  I've unlocked all but the last strength and aerobic exercise, and now just have to unlock the longer-running exercises (how many jackknifes can one do?  I'm up to 30 reps, but maybe it goes to 100?).  My Wii Fit Age is now 41, I think, up from the 36 I had yesterday when so bloated with tasty naan.  I wonder whether that age thing has any bearing on reality...&lt;br /&gt;&lt;br /&gt;I went for arms and abs today.  A brief Yogic warmup (breathing, half moon, sun salutation, chair, bridge), and then on to strength exercises (6 pushups/side planks, 6 torso twists, 30 jackknifes, back to 10 pushups/side planks, 30 more jackknifes, 20 triceps with a five pound weight).  My arms feel like noodles.&lt;br /&gt;&lt;br /&gt;And then aerobics, doing the boxing game twice.  I really like the boxing game; the final ten seconds are very satisfying-- breaking 300 on the second time around was pretty excellent, even if the gruff coach guy told me I was holding back.  I found that to really get the punches going, gotta put more acceleration, and a longer range.  Finally, I cooled down with a 1x advanced step routine.  All in all, it felt pretty good.&lt;br /&gt;&lt;br /&gt;Here's the thing.  I'm thinking that my earlier complaints about the soccer game and so forth don't really hold water.  Now that I've gotten a much better grasp of what I need to do there, I'll get pretty good scores, and a high of 144.  It's true that I shouldn't be moving my head much, but still, I can accomplish a lot by balance shifting, and that's what shows up on the screen.  Melodie's pointed out to me that, since I'm much taller than she is, when I try to balance, it seems like the Wii Fit is interpreting my balancing movements as being far more oscillatory than hers.  I'd assume that the board is calibrated (ie, if someone's 6'3", then when their head moves, the radius of that movement with respect to the ground is longer than if someone who's 5'9" moves), but &lt;a href="http://en.wikipedia.org/wiki/The_Long_Kiss_Goodnight"&gt;assumptions make an ass out of you and umption&lt;/a&gt;.  Maybe that's why I can get away with just balance shifts in the soccer game, rather than moving my head, like I'm 'supposed to'-- the board isn't calibrated for the movements of a larger person.  Who knows?&lt;br /&gt;&lt;br /&gt;Another game I've been playing: Death Jr.  This game is purely awesome, and reminds me that there are just straight up fun games out there to play.  Some of the jumping puzzles are frustrating, though-- I just finished the level which ends with Experiment #51 (or whatever it's called), and those puzzles represented the first frustrating parts of the game.  Earlier, if I died, I could see that I was being retarded; but these times, I just felt frustrated, because there was some wacky timing thing I had to get down to get across (it's the room with the tank, for those of you who've played it).  I wonder how it'd stack up, as a game, when you're playing with someone who isn't a gamer, and might not be keen on that kind of frustration?&lt;br /&gt;&lt;br /&gt;In other news-- about to finish up the quarter.  Just have to finish a final Biomedical Physics lab, and take a test in... another class I won't write about yet, and then I'm done!  Off to work at &lt;a href="http://www.icrcompany.com/"&gt;iCRCo&lt;/a&gt; for the summer, where I hope that my image processing knowledge can be put to good use.  Of course, such things remain unpublishable until they are published-- but general knowledge will be revealed, if I have any.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-1120502883717320110?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/1120502883717320110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=1120502883717320110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/1120502883717320110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/1120502883717320110'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/wii-fit-day-seven.html' title='Wii Fit, Day Seven'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-5228519435863950401</id><published>2008-06-08T08:30:00.001-07:00</published><updated>2008-06-08T08:32:28.797-07:00</updated><title type='text'>Wii Fit, Day 6</title><content type='html'>Well, it happened-- my weight went up a bit, back over the overweight marker.  It was probably the huge Indian meal I had-- ah, Saag Paneer, who can resist your delicate spinachy ways?  I felt bloated all evening, after eating about a quarter of what I could have eaten ten years ago.  I guess I'm really getting old; after ten minutes of aerobics, I could feel the meal making a return up the passage from which it had been deposited, so decided that that was enough for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-5228519435863950401?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/5228519435863950401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=5228519435863950401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/5228519435863950401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/5228519435863950401'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/wii-fit-day-6.html' title='Wii Fit, Day 6'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-6120232922135232748</id><published>2008-06-07T10:47:00.000-07:00</published><updated>2008-06-07T10:52:21.394-07:00</updated><title type='text'>Wii Fit, Day 5.</title><content type='html'>A good day, I think.  I got a second controller, a second nunchuck, a copy of Raving Rabbids, and a copy of Death Jr, just in case I feel like actually playing a game with the thing.  Brief reviews: Rabbids is cute and fun, and Death Jr. is a cute and fun copy of zelda, with a kids death vibe to it.&lt;br /&gt;&lt;br /&gt;As for the Fit!  It told me that, for the first time, I'd dipped below BMI 25, and was now normal!  Yay!  Of course, me getting my hair cut (finally) probably has nothing to do with the sudden weight loss (only a pound, but apparently enough).  I've unlocked all the balance exercises (what the hell is with the meditation exercise?), all but two strength exercises, four or five yoga exercises, and one aerobic exercise. &lt;br /&gt;&lt;br /&gt;I watched Melodie do the aerobic thing yesterday, and she had similar problems to me, where the board would occaisionally not find her feet, or registered her feet touching the board as a kick, or vice versa.  I guess I should just relax, rather than hope the thing will be accurate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-6120232922135232748?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/6120232922135232748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=6120232922135232748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6120232922135232748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6120232922135232748'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/wii-fit-day-5.html' title='Wii Fit, Day 5.'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-2412382699974057980</id><published>2008-06-06T06:44:00.000-07:00</published><updated>2008-06-06T06:58:04.118-07:00</updated><title type='text'>Wii Fit, Day Four</title><content type='html'>Wii Fit, Day Four.  Today, my goal was to figure out the aerobics portion of the Fit.  I focused almost exclusively on the Hula-Hoop (R)(!) exercise, doing it some 8 times before stopping.  I actually used it more than that, because I was so miserable at swinging my hips the way that the Wii wanted me to, I'd restart once the hoop dropped to the ground.  By the 8th time, I'd managed to figure out how to get the additional hoops that are thrown at you (despite what the Mii on the screen does, just lean left, not forward and left) and how to move my hips (ignore the 'big circles' hint given by the game; the way to get 250+ spins is to move your stomach in tight circles).  I also worked up a very large amount of sweat.&lt;br /&gt;&lt;br /&gt;The other aerobic game I did was the step game, and once I unlocked it, advanced step.  These games are fun, but apparently have a very hard time registering my giant feet (or something).  I always thought I had pretty good rhythm, but the Wii disagrees, and who am I to argue?  Several times, however (and Melodie is my witness!) I'd put my foot on or off the board, and the game wouldn't register it.  Weird.&lt;br /&gt;&lt;br /&gt;I'm liking the Yoga now for warmups, and I really wish I could combine the positions.  For instance, I'm used to a sun salutation being a combination of what the Fit calls Sun Salutation Start--Plank--Down Dog-- Up Cobra-- Down Dog-- Jump feet forward to finish Sun Salutation.  The Fit's version of the Sun Salutation leaves out those intermediate steps, and is basically a glorified version of touching your toes.  Why is that a problem?  Because I'm starting to feel a bit unbalance.  I'm definitely working more in one direction than another; if I do 40 jackknifes, say, there should be a stretch to the opposite direction, so that the spine can unwind.  &lt;br /&gt;&lt;br /&gt;Penguin game-- very frustrating at first, but eventually I figured it out.  I can get between 50 and 80 points pretty consistently, depending on whether or not I can grab the red fish.  The TightRope game I've also more or less gotten-- it really just requires steadiness, and doesn't particularly care which foot you life to walk forward with.  By the time my Mii finishes, it's almost always putting the opposite foot forward than what I'm walking with.&lt;br /&gt;&lt;br /&gt;Total workout time: 1 hr.  Wii Fit Age: 37.  Weight: 202, BMI 25.09.&lt;br /&gt;(I did the body test after working out, and had apparently lost enough to make my age 32 and my weight 200, with a BMI of 24.something.  It was gratifying to see my Mii lose weight).&lt;br /&gt;&lt;br /&gt;[As a side note, I am still working on that PhD-- and hopefully, soon, I'll have something to show for it.  But until it's published, I ain't sayin' squat.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-2412382699974057980?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/2412382699974057980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=2412382699974057980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/2412382699974057980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/2412382699974057980'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/wii-fit-day-four.html' title='Wii Fit, Day Four'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-8317691796428454589</id><published>2008-06-05T08:54:00.000-07:00</published><updated>2008-06-05T09:02:15.439-07:00</updated><title type='text'>Day three on the Wii Fit</title><content type='html'>It's Day Three on the Wii Fit, and I've finally figured out how to do pushups on this thing when you're taller than the average.  Basically, grab the sides, rather than place your hands flat on it.  That way, when you go lower, your hands are below your shoulders, rather than inside of them (which is basically the same thing as doing &lt;a href="http://www.youtube.com/watch?v=vrl6GihD1M0"&gt;triangle pushups&lt;/a&gt;, which I can't do).  Once I figured that out, the pushup/plank exercise became a lot easier.&lt;br /&gt;&lt;br /&gt;I also added in my bike riding to the fitness log (20 minutes to school and back, 40 minutes total, which the Wii Fit considers 'heavy exercise' and doubles), so I think I'm unlocking things pretty quickly.  By this point, I've already unlocked most of the exercises (certainly more than half) and have most of the strength exercises on later reps (30 for jackknife, 10 for pushup, 20 for the single leg twist, etc). &lt;br /&gt;&lt;br /&gt;Total time spent: 34 minutes.  Weight: up a bit to 202 (I had to enter in a reason why I got fatter by 1.1 pounds; definitely a shame tactic there-- there's no brushing it off as 'daily fluctuation'), and Wii Fit age is down to 37.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-8317691796428454589?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/8317691796428454589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=8317691796428454589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/8317691796428454589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/8317691796428454589'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/day-three-on-wii-fit.html' title='Day three on the Wii Fit'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-6190511963549207714</id><published>2008-06-04T07:08:00.000-07:00</published><updated>2008-06-04T07:26:45.510-07:00</updated><title type='text'>Day Two on the Wii Fit</title><content type='html'>Yesterday was Day Two on the Wii Fit.  I didn't get as much time to mess around with it (37 minutes, but much less time on exposition), because a professor sent out an email saying that the final grade would be determined by labs, and that there would be no final.  Since I was not even close to finishing said labs, I didn't spend much time exploring new stuff on the Fit.&lt;br /&gt;&lt;br /&gt;I did do some of the aerobic games yesterday, and Melodie did the running one.  What was interesting with the running game was that &lt;a href="http://www.athlinks.com/myresults.aspx?rid=26186431"&gt;Melodie's a runner&lt;/a&gt;, and she knows how to do it right.   When she ran the first time like she would normally run, the game told her that she wasn't burning enough calories and that she was clearly a novice exerciser.  The second time she did it, she just did the twist rather than run (basically), and got a much higher score.  The tip she got from a coach once was that she was 'running like a washing machine', meaning that she kept twisting her torso when she ran, which expended energy uselessly-- that energy wasn't spent going forward, just side to side.  It appears that the Wii wants that same useless expenditure of energy-- which is OK, from the perspective of burning calories, but not OK, in that the form of the runner will definitely deteriorate if that strategy is adopted.&lt;br /&gt;&lt;br /&gt;Me, I only run when chased, and so those three minutes were very tiring.&lt;br /&gt;&lt;br /&gt;37 minutes on, 1.3 pounds lost (probably just daily fluctuation).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-6190511963549207714?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/6190511963549207714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=6190511963549207714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6190511963549207714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6190511963549207714'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/day-two-on-wii-fit.html' title='Day Two on the Wii Fit'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-2367357542544780434</id><published>2008-06-03T10:05:00.000-07:00</published><updated>2008-06-03T10:09:29.042-07:00</updated><title type='text'>An older blog...</title><content type='html'>I used to maintain this blog here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://processedimage.blogspot.com"&gt;http://processedimage.blogspot.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;but have since completely forgotten my username, password, etc.&lt;br /&gt;&lt;br /&gt;So, to make sure that the information there isn't completely forgotten, I repost it.&lt;br /&gt;&lt;br /&gt;Why?  Because that's the most straightforward code, with examples, that I've found for running a multigrid solution to the poisson equation.  Or, for that matter, the most complete explanation I've seen of multigrid, period-- so, I repost, on the hopes that it may help some poor engineering student who's lost in a world of badly explained math.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-2367357542544780434?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/2367357542544780434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=2367357542544780434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/2367357542544780434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/2367357542544780434'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/older-blog.html' title='An older blog...'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-7472824907374331130</id><published>2008-06-03T07:07:00.000-07:00</published><updated>2008-06-03T07:43:58.029-07:00</updated><title type='text'>Got a Wii Fit!</title><content type='html'>Been a while since I wrote something.  A lot's changed in the intervening 8 months, but unfortunately, not a lot I can write about.  However, after being chastized by a friend for being so lousy with the blog, I thought I'd give it a quick update.&lt;br /&gt;&lt;br /&gt;First, a few new photos!  &lt;br /&gt;My friends Kariann and Alina got married, and chose me to be their photographer, which was &lt;a href="http://www.markmroden.com/Weddings/485567"&gt;awesome&lt;/a&gt;.  We went to Mammoth Mountain a few weekends ago, where &lt;a href="http://www.sereneimagephotography.com"&gt;Serena&lt;/a&gt; and Josh got engaged.  I didn't shoot shots of them doing that (Melodie did, actually, but that's another story), but I did get some of the countryside, shown &lt;a href="http://www.markmroden.com/gallery/4765875_jSJ4j#282587830_TwuNV"&gt;here&lt;/a&gt;, and some of us can be found &lt;a href="http://www.markmroden.com/gallery/4768172_knhKs#282852513_oFwxj"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But the real thing I wanted to write about was the new Wii Fit that I got from my &lt;a href="http://www.markmroden.com/gallery/4682885_Mf9u2#276868192_SAuXm"&gt;parents&lt;/a&gt; as a pre-birthday present.&lt;br /&gt;&lt;br /&gt;In short, the Wii Fit is pretty awesome.  Construction wise, it feels pretty sturdy and present, despite being made entirely of plastic, in a way I haven't come to expect from consumer electronics.   I suppose being able to support the weight of a 200 pound guy reasonably would require that it be sturdy.&lt;br /&gt;&lt;br /&gt;One nitpick-- Wii wireless networking doesn't support encryption, at least from what I can tell, which is just plain irresponsible on Nintendo's part.  That was the only unexpectedly irritating thing I noticed during setting this system up, that I'll need to get a wired LAN adapter.&lt;br /&gt;&lt;br /&gt;The Fit itself is pretty fun to use.  I went through the incredibly ... blunt setup process, which informed me that I was a fat bastard (6'2.5", rounded to 6'3", 203 pounds) who clearly had never gotten off of the couch in his life.  I could defend myself here-- I do have a black belt (though I haven't trained in three months), I bike to school, etc, etc, but better, I suppose, to let the tiny Japanese make judgements on my apparently enormous Caucasian frame and just get it over with.  Besides, I have a secret weapon-- I've been letting my hair grow long, and once I cut it, I'll probably drop a pound.  Hah!  How's that for manipulating the scales?&lt;br /&gt;&lt;br /&gt;My first day on the Wii after that was interesting.  My balance isn't all that it could be (or once was, I suppose), which the thing let me know by telling me my age was 44, coupled with a picture of my Mii as an old man, holding his back.  I started with some Yoga poses, which was very interesting, and scored from 1 to 100 based on how wobbly you are.  Two of the three poses I'd never done before: Half-Moon and Tree.  For those poses, I earned about 35 to 50 points, as my balance was way off.  Half-Moon was particularly interesting, because as I started to do it, muscles I hadn't stretched in a long while started to scream in protest.  Already off to a good start, stretching things I'd forgotten I had.  Warrior pose was incredibly easy, so much so that I wonder if the board was misconfigured or something-- it was the only time my balance never moved, and I got a score of 99.  I've been doing that pose for some eight years now, so it might also have been experience.&lt;br /&gt;&lt;br /&gt;Then, on to strength training.  This part was more interesting.  I'd never been able to satisfactorily do a pushup, and the Wii's introductory push-up regimen includes planking (a different plant than what I was used to, in that I was used to resting on my elbows, not my hands).  Plus, my shoulders are a bit broad for the thing; my hands needed to rest on the very edges of the board, so someone much bigger than me might have serious issues doing that part of the workout.  My strength results varied from "couch potato" (1 star) to "bodybuilder" (4 stars), depending on whether I worked my legs (strong from the kicking) or my arms (weak like a t-rex).  One very frustrating exercise was the backwards row-- I just could not get the balance right for that exercise.  Apparently, you have to be back on your heels while you do it?  Regardless, the Wii stated that I hadn't done any reps by the time I was done, which was frustrating, since I was doing them as demonstrated.  The second time around, I figured that by standing on the back edge of the board, I could get the full number of reps, but that seems like cheating to me.&lt;br /&gt;&lt;br /&gt;Speaking of being back on your heels as a balance position, that's generally a bad place to be, sparring-wise.  I haven't really sparred in a year or so, so that's about as weak an excuse as I can get, but it felt entirely unnatural to move my balance into such a weak position.  The other thing that's a bad idea to do is just to move your head, rather than move your entire body, when dodging things.  So, when it came time to do the soccer balance game, I sucked at it, because I was used to moving my entire body out of the way, and not leading with my head.  Either I need to empty the cup (a la&lt;a href="http://www.amazon.com/Zen-Martial-Arts-Joe-Hyams/dp/0553275593"&gt; Zen and the Martial Arts&lt;/a&gt;) or I need to avoid that particular exercise.  For now, after trying multiple times and getting my score to 55, I'm got to avoid.&lt;br /&gt;&lt;br /&gt;But I had a load of fun with the ski jump game (got 256 yards after my third try!) and was really challenged by the balls-rolling-into-holes game (90 points on the first try!).&lt;br /&gt;&lt;br /&gt;I avoided aerobics, because I hate aerobics-- but I guess I'll have to stop avoiding them at some point, if I want to unlock all the games.&lt;br /&gt;&lt;br /&gt;Overall, on this first day, I did 36 minutes of actual exercising, and an hour and 20 minutes all told (due to watching demos of the exercises, etc).&lt;br /&gt;&lt;br /&gt;I'm psyched to keep this up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-7472824907374331130?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/7472824907374331130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=7472824907374331130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7472824907374331130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7472824907374331130'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2008/06/got-wii-fit.html' title='Got a Wii Fit!'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-3778930302448110647</id><published>2007-08-26T12:40:00.000-07:00</published><updated>2007-08-26T13:37:36.963-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interpolation'/><category scheme='http://www.blogger.com/atom/ns#' term='bicubic'/><category scheme='http://www.blogger.com/atom/ns#' term='line profile'/><category scheme='http://www.blogger.com/atom/ns#' term='Bresenham'/><title type='text'>Suppose you want to sample regularly along a line...</title><content type='html'>Line profiles are useful tools.  They allow you to get a sense of the intensities in the image, specifically, under the line itself.  When attempting to determine the resolution of a system, line phantoms are often used; these phantoms can be seen in almost any camera review at &lt;a href="http://www.dpreview.com"&gt;dpreview&lt;/a&gt;.  Using a line profile tool, you can get a sense of the amount of contrast at the resolution extinction point of the detector; ie, the peak to peak distance determines the pixel-by-pixel resolution, and the peak to trough distance determines the contrast at that resolution.&lt;br /&gt;&lt;br /&gt;I recently wrote one of these, and became very frustrated with the lack of straightforward code to do so.  So, here's my code, hopefully to save someone else the headache.&lt;br /&gt;&lt;br /&gt;First things first-- you need to define where pixels are located.  One convention has the pixels at the intersections of lines on a grid.  This convention is most commonly used in math applications, solutions of PDEs on grids, and so forth.  Another convention holds that the pixels are in the space inside the intersections of the pixels; that is, the grid designates the borders of the pixels, and the interior space of the grid is the location of the intensity value of a given pixel.  This convention more commonly reflects the actual nature of a CCD or CMOS imager (those used in digital cameras).  The flux of light across a certain element is measured in a process that converts photons into electrons, and those electrons are then converted to a digital signal via an analog/digital converter.  Thus, this second convention more accurately reflects the physical reality from which the pixel grid was derived.&lt;br /&gt;&lt;br /&gt;The implications of the selection of convention have to do with how many pixels you will sample to determine the value of points along the line.  If you choose the first convention, many common formulae for the interpolation of data on a grid (nearest neighbor, linear, bicubi, Lanczos) are all available to you in their conventional forms.  If you choose the second convention, while perhaps more accurately reflecting reality, the formulae all have to be converted into this new convention.  Thus, I opt for the first, if only so that I can keep with mathematical convention and not rewrite everyone's formulae.&lt;br /&gt;&lt;br /&gt;So, once that decision is out of the way, the line itself must be drawn.  Presumably, the user provides start and end points, and it is up to you to sample along the line.  You may be tempted to use a &lt;a href="http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm"&gt;Bresenham&lt;/a&gt; approach, especially if you come from a graphics background.  However, remember that we're trying to get numbers that reflect reality, we are not drawing and creating our own reality.  The Bresenham approach is useful for drawing, but not for sampling, because you lose the actual floating-space locations of pixels along the line.  Not only that, the division of values by the delta-Y term requires the use of a special case when the line is drawn entirely vertically, and avoiding special cases makes programming easier.&lt;br /&gt;&lt;br /&gt;The code to sample along the line, then, will depend on using the length of the hypotenuse to determine the change in x and y that should be performed for each pixel.  The code looks like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="type"&gt;float&lt;/span&gt; dxPrime&lt;span class="operator"&gt; = (&lt;/span&gt;mCurrEndPoint&lt;span class="operator"&gt;.&lt;/span&gt;X&lt;span class="operator"&gt; -&lt;/span&gt; mCurrStartPoint&lt;span class="operator"&gt;.&lt;/span&gt;X&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;float&lt;/span&gt; dyPrime&lt;span class="operator"&gt; = (&lt;/span&gt;mCurrEndPoint&lt;span class="operator"&gt;.&lt;/span&gt;Y&lt;span class="operator"&gt; -&lt;/span&gt; mCurrStartPoint&lt;span class="operator"&gt;.&lt;/span&gt;Y&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;float&lt;/span&gt; hyp&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Sqrt&lt;span class="operator"&gt;(&lt;/span&gt;dxPrime&lt;span class="operator"&gt; *&lt;/span&gt; dxPrime&lt;span class="operator"&gt; +&lt;/span&gt; dyPrime&lt;span class="operator"&gt; *&lt;/span&gt; dyPrime&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;&lt;br /&gt;if&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;hyp&lt;span class="operator"&gt; &amp;gt;&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt;) {&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;    float&lt;/span&gt; dx&lt;span class="operator"&gt; =&lt;/span&gt; dxPrime&lt;span class="operator"&gt; /&lt;/span&gt; hyp&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;    float&lt;/span&gt; dy&lt;span class="operator"&gt; =&lt;/span&gt; dyPrime&lt;span class="operator"&gt; /&lt;/span&gt; hyp&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;    float&lt;/span&gt;&lt;span class="operator"&gt;[]&lt;/span&gt; xcoord&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt;&lt;span class="type"&gt; float&lt;/span&gt;&lt;span class="operator"&gt;[(&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Ceiling&lt;span class="operator"&gt;(&lt;/span&gt;hyp&lt;span class="operator"&gt;)];&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;    float&lt;/span&gt;&lt;span class="operator"&gt;[]&lt;/span&gt; ycoord&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt;&lt;span class="type"&gt; float&lt;/span&gt;&lt;span class="operator"&gt;[(&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Ceiling&lt;span class="operator"&gt;(&lt;/span&gt;hyp&lt;span class="operator"&gt;)];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    xcoord&lt;span class="operator"&gt;[&lt;/span&gt;&lt;span class="int"&gt;0&lt;/span&gt;&lt;span class="operator"&gt;] = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;mCurrStartPoint&lt;span class="operator"&gt;.&lt;/span&gt;X&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;    ycoord&lt;span class="operator"&gt;[&lt;/span&gt;&lt;span class="int"&gt;0&lt;/span&gt;&lt;span class="operator"&gt;] = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;mCurrStartPoint&lt;span class="operator"&gt;.&lt;/span&gt;Y&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;    int&lt;/span&gt; i&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;    for&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;i&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt; i&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; hyp&lt;span class="operator"&gt;;&lt;/span&gt; i&lt;span class="operator"&gt;++) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        xcoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;] =&lt;/span&gt; xcoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;] +&lt;/span&gt; dx&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        ycoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;] =&lt;/span&gt; ycoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;] +&lt;/span&gt; dy&lt;span class="operator"&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now that you've sampled, you need to get intensity values along those lines.  There are three approaches.&lt;br /&gt;&lt;br /&gt;Nearest neighbor (just choose the closest pixel as the value to use, cheapest in time and writing, worst accuracy):&lt;br /&gt;&lt;pre&gt;mLineVals&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt;&lt;span class="type"&gt; float&lt;/span&gt;&lt;span class="operator"&gt;[(&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Ceiling&lt;span class="operator"&gt;(&lt;/span&gt;hyp&lt;span class="operator"&gt;)];&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;int&lt;/span&gt; xval&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;float&lt;/span&gt; a&lt;span class="operator"&gt;,&lt;/span&gt; b&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;float&lt;/span&gt; c&lt;span class="operator"&gt;,&lt;/span&gt; d&lt;span class="operator"&gt;,&lt;/span&gt; e&lt;span class="operator"&gt;,&lt;/span&gt; f&lt;span class="operator"&gt;,&lt;/span&gt; g&lt;span class="operator"&gt;,&lt;/span&gt; h&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="comment"&gt; //for bicubic&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="flow"&gt;for&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;i&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt; i&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; hyp&lt;span class="operator"&gt;;&lt;/span&gt; i&lt;span class="operator"&gt;++) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    xval&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Floor&lt;span class="operator"&gt;(&lt;/span&gt;xcoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;]+&lt;/span&gt;&lt;span class="float"&gt;0.5f&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    yval&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Floor&lt;span class="operator"&gt;(&lt;/span&gt;ycoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;]+&lt;/span&gt;&lt;span class="float"&gt;0.5f&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    mLineVals&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;] =&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt;);&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Linear Interpolation (chooses the four closest pixels as the values to use, second cheapest in time and a bit more accurate):&lt;br /&gt;&lt;pre&gt;mLineVals&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt;&lt;span class="type"&gt; float&lt;/span&gt;&lt;span class="operator"&gt;[(&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Ceiling&lt;span class="operator"&gt;(&lt;/span&gt;hyp&lt;span class="operator"&gt;)];&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;int&lt;/span&gt; xval&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;float&lt;/span&gt; a&lt;span class="operator"&gt;,&lt;/span&gt; b&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;float&lt;/span&gt; c&lt;span class="operator"&gt;,&lt;/span&gt; d&lt;span class="operator"&gt;,&lt;/span&gt; e&lt;span class="operator"&gt;,&lt;/span&gt; f&lt;span class="operator"&gt;,&lt;/span&gt; g&lt;span class="operator"&gt;,&lt;/span&gt; h&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="comment"&gt; //for bicubic&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="flow"&gt;for&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;i&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt; i&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; hyp&lt;span class="operator"&gt;;&lt;/span&gt; i&lt;span class="operator"&gt;++) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    xval&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Floor&lt;span class="operator"&gt;(&lt;/span&gt;xcoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;]);&lt;/span&gt;&lt;br /&gt;    yval&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Floor&lt;span class="operator"&gt;(&lt;/span&gt;ycoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;]);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    a&lt;span class="operator"&gt; =&lt;/span&gt; xcoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;] - (&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;xval&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;    b&lt;span class="operator"&gt; =&lt;/span&gt; ycoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;] - (&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;yval&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;&lt;br /&gt;    if&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;xval&lt;span class="operator"&gt; &amp;gt;=&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt; &amp;amp;&amp;amp;&lt;/span&gt; xval&lt;span class="operator"&gt;+&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;XSize&lt;span class="operator"&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        yval&lt;span class="operator"&gt; &amp;gt;=&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt; &amp;amp;&amp;amp;&lt;/span&gt; yval&lt;span class="operator"&gt;+&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;YSize&lt;span class="operator"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        mLineVals&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;] = &lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt; a&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt; b&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt;) +&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            a&lt;span class="operator"&gt; * (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt; b&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt; a&lt;span class="operator"&gt;) *&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            a&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bicubic interpolation (chooses the 16 closest pixels as the values to use, most expensive in time but still fast enough on modern hardware, and the smoothest of all, and what I use):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;mLineVals&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt;&lt;span class="type"&gt; float&lt;/span&gt;&lt;span class="operator"&gt;[(&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Ceiling&lt;span class="operator"&gt;(&lt;/span&gt;hyp&lt;span class="operator"&gt;)];&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;int&lt;/span&gt; xval&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;float&lt;/span&gt; a&lt;span class="operator"&gt;,&lt;/span&gt; b&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;float&lt;/span&gt; c&lt;span class="operator"&gt;,&lt;/span&gt; d&lt;span class="operator"&gt;,&lt;/span&gt; e&lt;span class="operator"&gt;,&lt;/span&gt; f&lt;span class="operator"&gt;,&lt;/span&gt; g&lt;span class="operator"&gt;,&lt;/span&gt; h&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="comment"&gt; //for bicubic&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="flow"&gt;for&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;i&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt; i&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; hyp&lt;span class="operator"&gt;;&lt;/span&gt; i&lt;span class="operator"&gt;++) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    xval&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Floor&lt;span class="operator"&gt;(&lt;/span&gt;xcoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;]);&lt;/span&gt;&lt;br /&gt;    yval&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Math&lt;span class="operator"&gt;.&lt;/span&gt;Floor&lt;span class="operator"&gt;(&lt;/span&gt;ycoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;]);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    a&lt;span class="operator"&gt; =&lt;/span&gt; xcoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;] - (&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;xval&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;    b&lt;span class="operator"&gt; =&lt;/span&gt; ycoord&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;] - (&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;yval&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    c&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="float"&gt; 1.0f&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt; a&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;    d&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="float"&gt; 1.0f&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt; b&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    e&lt;span class="operator"&gt; =&lt;/span&gt; a&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="float"&gt; 1.0f&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="comment"&gt;//backwards distance is a + 1 pixel&lt;br /&gt;&lt;/span&gt;    f&lt;span class="operator"&gt; =&lt;/span&gt; b&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="float"&gt; 1.0f&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    g&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="float"&gt; 2.0f&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt; a&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="comment"&gt;//forwards distance is 2 pixels - a;&lt;br /&gt;&lt;/span&gt;    h&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="float"&gt; 2.0f&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt; b&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;&lt;br /&gt;    if&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;xval&lt;span class="operator"&gt;-&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; &amp;gt;=&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt; &amp;amp;&amp;amp;&lt;/span&gt; xval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;XSize&lt;span class="operator"&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        yval&lt;span class="operator"&gt;-&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; &amp;gt;=&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt; &amp;amp;&amp;amp;&lt;/span&gt; yval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;YSize&lt;span class="operator"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        mLineVals&lt;span class="operator"&gt;[&lt;/span&gt;i&lt;span class="operator"&gt;] =&lt;/span&gt;&lt;span class="comment"&gt; //inImage.GetPixelAt(xval, yval);&lt;br /&gt;&lt;/span&gt;&lt;span class="operator"&gt;            (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; +&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; +&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; +&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; +&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; +&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; +&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; +&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; +&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;            //top line&lt;br /&gt;&lt;/span&gt;&lt;span class="operator"&gt;            (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; -&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; -&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; +&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; -&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; +&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; -&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; -&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; -&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt; *&lt;/span&gt; f&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;            //bottom line&lt;br /&gt;&lt;/span&gt;&lt;span class="operator"&gt;            (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; -&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; -&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; +&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt; *&lt;/span&gt; a&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; -&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; +&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt; *&lt;/span&gt; c&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; -&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; -&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; -&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt; *&lt;/span&gt; h&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;            //left side&lt;br /&gt;&lt;/span&gt;&lt;span class="operator"&gt;            (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; -&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; +&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; -&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt; *&lt;/span&gt; e&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; +&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;) +&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;            //right side&lt;br /&gt;&lt;/span&gt;&lt;span class="operator"&gt;            (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; -&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; +&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt; *&lt;/span&gt; b&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt;) +&lt;br /&gt;            (&lt;/span&gt;&lt;span class="int"&gt;4&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 8&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 5&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; -&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt; *&lt;/span&gt; g&lt;span class="operator"&gt;) * (&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt; -&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; +&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt; *&lt;/span&gt; d&lt;span class="operator"&gt;) *&lt;/span&gt; inImage&lt;span class="operator"&gt;.&lt;/span&gt;GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;xval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 2&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; yval&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(there's a fourth, Lanczos, but I'm ignoring it, because bicubic is good enough, I think).&lt;br /&gt;&lt;br /&gt;And there you have it.  From there, you need to be able to draw the line profile.  However, that drawing code is specific to each platform.  To do it in C#, I would have a class that inherits from PictureBox and overwrites the draw routine, like so:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="keyword"&gt;&lt;br /&gt;private&lt;/span&gt;&lt;span class="type"&gt; void&lt;/span&gt; JustPaint&lt;span class="operator"&gt;() {&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;    //start from 1% of the edge and go to 99% of the edge&lt;br /&gt;    //round down for the start, up for the end, but want to make sure leave some space&lt;br /&gt;&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;    if&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;mValues&lt;span class="operator"&gt; ==&lt;/span&gt; null&lt;span class="operator"&gt;)&lt;/span&gt;&lt;span class="flow"&gt; return&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="comment"&gt; //no drawing yet&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="flow"&gt;    if&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;mValues&lt;span class="operator"&gt;.&lt;/span&gt;Length&lt;span class="operator"&gt; ==&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;&lt;span class="flow"&gt; return&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="comment"&gt; //no drawing yet&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;    if&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;Image&lt;span class="operator"&gt; ==&lt;/span&gt; null&lt;span class="operator"&gt; ||&lt;/span&gt; mOldWidth&lt;span class="operator"&gt; !=&lt;/span&gt; Width&lt;span class="operator"&gt; ||&lt;/span&gt; mOldHeight&lt;span class="operator"&gt; !=&lt;/span&gt; Height&lt;span class="operator"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        Image&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt; Bitmap&lt;span class="operator"&gt;(&lt;/span&gt;Width&lt;span class="operator"&gt;,&lt;/span&gt; Height&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;    Graphics g&lt;span class="operator"&gt; =&lt;/span&gt; Graphics&lt;span class="operator"&gt;.&lt;/span&gt;FromImage&lt;span class="operator"&gt;(&lt;/span&gt;Image&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    mOldWidth&lt;span class="operator"&gt; =&lt;/span&gt; Width&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;    mOldHeight&lt;span class="operator"&gt; =&lt;/span&gt; Height&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;    int&lt;/span&gt; theStart&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)((&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Width&lt;span class="operator"&gt; *&lt;/span&gt;&lt;span class="float"&gt; 0.01f&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;    int&lt;/span&gt; theEnd&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)((&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Width&lt;span class="operator"&gt; *&lt;/span&gt;&lt;span class="float"&gt; 0.99f&lt;/span&gt;&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="float"&gt; 0.5f&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;    int&lt;/span&gt; theMaxHeight&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)((&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Height&lt;span class="operator"&gt; *&lt;/span&gt;&lt;span class="float"&gt; 0.01f&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;    int&lt;/span&gt; theMinHeight&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)((&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;Height&lt;span class="operator"&gt; *&lt;/span&gt;&lt;span class="float"&gt; 0.99f&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;    float&lt;/span&gt; theHeightRange&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)(&lt;/span&gt;theMinHeight&lt;span class="operator"&gt; -&lt;/span&gt; theMaxHeight&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    g&lt;span class="operator"&gt;.&lt;/span&gt;Clear&lt;span class="operator"&gt;(&lt;/span&gt;Color&lt;span class="operator"&gt;.&lt;/span&gt;White&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;    //rescale the values to be between 0 and 1&lt;br /&gt;    //note that mRescale is set with mLineVals, so that when this code&lt;br /&gt;    //is called during redraws that are not relevant to line moving, less work is done&lt;br /&gt;&lt;br /&gt;    //the x step is from theStart to theEnd, scaled by the length of the line.&lt;br /&gt;    //clearly, we drop some points for long lines.&lt;br /&gt;    //so, we have to get a sampling rate from mRescaled.length vs theEnd-theStart&lt;br /&gt;&lt;/span&gt;&lt;span class="type"&gt;    float&lt;/span&gt; theRange&lt;span class="operator"&gt; =&lt;/span&gt; theEnd&lt;span class="operator"&gt; -&lt;/span&gt; theStart&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;    float&lt;/span&gt; theSample&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;    float&lt;/span&gt; theDrawStep&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="int"&gt; 1&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;    if&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;theRange&lt;span class="operator"&gt; &amp;gt;&lt;/span&gt; mValues&lt;span class="operator"&gt;.&lt;/span&gt;Length&lt;span class="operator"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        theSample&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="float"&gt; 1.0f&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;        theDrawStep&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;theRange&lt;span class="operator"&gt; / (&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;mValues&lt;span class="operator"&gt;.&lt;/span&gt;Length&lt;span class="operator"&gt;;&lt;br /&gt;    }&lt;/span&gt;&lt;span class="flow"&gt; else&lt;/span&gt;&lt;span class="operator"&gt; {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        theSample&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;mValues&lt;span class="operator"&gt;.&lt;/span&gt;Length&lt;span class="operator"&gt; / (&lt;/span&gt;&lt;span class="type"&gt;float&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;theRange&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;        theDrawStep&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="float"&gt; 1.0f&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="comment"&gt; //every pixel gets hit&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="operator"&gt;    }&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;    float&lt;/span&gt; i&lt;span class="operator"&gt; =&lt;/span&gt; theSample&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;    float&lt;/span&gt; theDrawStart&lt;span class="operator"&gt; =&lt;/span&gt; theStart&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;    float&lt;/span&gt; theDrawSpot&lt;span class="operator"&gt; = (&lt;/span&gt;theStart&lt;span class="operator"&gt;) + (&lt;/span&gt;theDrawStep&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;    int&lt;/span&gt; intDrawStart&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)(&lt;/span&gt;theDrawStart&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="float"&gt; 0.5f&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="type"&gt;&lt;br /&gt;&lt;br /&gt;    int&lt;/span&gt; intDrawSpot&lt;span class="operator"&gt; = (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)(&lt;/span&gt;theDrawSpot&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="float"&gt; 0.5f&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;    while&lt;/span&gt;&lt;span class="operator"&gt; ((&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)(&lt;/span&gt;i&lt;span class="operator"&gt;+&lt;/span&gt;&lt;span class="float"&gt;0.5f&lt;/span&gt;&lt;span class="operator"&gt;) &amp;lt;&lt;/span&gt; mValues&lt;span class="operator"&gt;.&lt;/span&gt;Length&lt;span class="operator"&gt;){&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        g&lt;span class="operator"&gt;.&lt;/span&gt;DrawLine&lt;span class="operator"&gt;(&lt;/span&gt;mBluePen&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;            new&lt;/span&gt; Point&lt;span class="operator"&gt;((&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)(&lt;/span&gt;theDrawStart&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="float"&gt; 0.5f&lt;/span&gt;&lt;span class="operator"&gt;),&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                theMinHeight&lt;span class="operator"&gt; - (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)(&lt;/span&gt;mValues&lt;span class="operator"&gt;[(&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)((&lt;/span&gt;i&lt;span class="operator"&gt; -&lt;/span&gt; theSample&lt;span class="operator"&gt;)+&lt;/span&gt;&lt;span class="float"&gt;0.5f&lt;/span&gt;&lt;span class="operator"&gt;)] *&lt;/span&gt; theHeightRange&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="float"&gt; 0.5f&lt;/span&gt;&lt;span class="operator"&gt;)),&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;            new&lt;/span&gt; Point&lt;span class="operator"&gt;((&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)(&lt;/span&gt;theDrawSpot&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="float"&gt; 0.5f&lt;/span&gt;&lt;span class="operator"&gt;),&lt;/span&gt;&lt;br /&gt;                theMinHeight&lt;span class="operator"&gt; - (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)(&lt;/span&gt;mValues&lt;span class="operator"&gt;[(&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)(&lt;/span&gt;i&lt;span class="operator"&gt;+&lt;/span&gt;&lt;span class="float"&gt;0.5f&lt;/span&gt;&lt;span class="operator"&gt;)] *&lt;/span&gt; theHeightRange&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="float"&gt; 0.5f&lt;/span&gt;&lt;span class="operator"&gt;)));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        theDrawStart&lt;span class="operator"&gt; =&lt;/span&gt; theDrawSpot&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;        theDrawSpot&lt;span class="operator"&gt; +=&lt;/span&gt; theDrawStep&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        i&lt;span class="operator"&gt; +=&lt;/span&gt; theSample&lt;span class="operator"&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;There you have it.  Assuming you can draw a line, you can now display a graph of that line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-3778930302448110647?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/3778930302448110647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=3778930302448110647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/3778930302448110647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/3778930302448110647'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/08/suppose-you-want-to-sample-regularly.html' title='Suppose you want to sample regularly along a line...'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-7988090685389461203</id><published>2007-08-20T14:41:00.001-07:00</published><updated>2008-12-08T15:54:47.154-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><category scheme='http://www.blogger.com/atom/ns#' term='macro'/><category scheme='http://www.blogger.com/atom/ns#' term='flowers'/><title type='text'>Some Flower Pictures</title><content type='html'>I see a lot of flower pictures turning up and around on the web.  Some are pretty simple things, with the flower straight on. Then you do something where you put the flower to the side, and maybe you get some nice light on it, and everything's awesome.  Trick is, to make the flower image stand out as a unique image, as one that will make people sit up and take notice, rather than say, "Ah, good, you've learned something in your photography class."&lt;br /&gt;&lt;br /&gt;There are, of course, things you can do to get the flower to be interesting.  One good ploy is to have a bug on it, like so:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_DmFt2Yspa1U/RsoMHRwoUUI/AAAAAAAAAAU/NKxJ7Frxs50/s1600-h/spiderflower.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_DmFt2Yspa1U/RsoMHRwoUUI/AAAAAAAAAAU/NKxJ7Frxs50/s320/spiderflower.jpg" alt="" id="BLOGGER_PHOTO_ID_5100902847116497218" border="0" /&gt;&lt;/a&gt;That's pretty neat (or at least, I like to think so), but it's not about the flower, it's about the bug and the flower.  It might also have depth of field issues, if you want to be a total perfectionist, but that's another subject for another time.&lt;br /&gt;&lt;br /&gt;But, eventually, there is something in the beauty of a flower that can be pulled out.  For those of you shooting with Nikons, I highly recommend the 60mm 2.8 macro lens, as it can give ridiculously sharp results, even after having been dropped on concrete (my bad).&lt;br /&gt;&lt;br /&gt;As an example:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_DmFt2Yspa1U/RsoMyBwoUVI/AAAAAAAAAAc/MgcrZopEs0w/s1600-h/bwrose.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_DmFt2Yspa1U/RsoMyBwoUVI/AAAAAAAAAAc/MgcrZopEs0w/s320/bwrose.jpg" alt="" id="BLOGGER_PHOTO_ID_5100903581555904850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Unfortunately, these small images don't do the detail in the image justice.  The rightmost petal, up close, looks like:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_DmFt2Yspa1U/RsoNQRwoUWI/AAAAAAAAAAk/vIju2FVuAHA/s1600-h/petal+detail.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_DmFt2Yspa1U/RsoNQRwoUWI/AAAAAAAAAAk/vIju2FVuAHA/s320/petal+detail.jpg" alt="" id="BLOGGER_PHOTO_ID_5100904101246947682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;But how do you do it?  Here's the simple steps:&lt;br /&gt;&lt;br /&gt;1) Get a tripod.  A nice sturdy one.  There are loads of tripods out in the world, and plenty of reviews.   The Manfrotto 3021 seems to be pretty popular; that's what I use, but it's by no means perfect.&lt;br /&gt;2) Get a flower.  Preferably one you like.&lt;br /&gt;3) Arrange the flower and the light in such a way that some aspect of the flower is emphasized, some part of it you want to expose to the viewer, so that it's more than just a flower, but also has your expression on it.  This step is really where the 'art' part comes in, and you can futz with this for a long time.  Suffice it to say, the above shots all have several decisions that went into making them.  I chose black and white for the rose, for instance, because I really like the detail in the shot, and the way the flower petals overlap with one another, coupled with the softness of the light, makes for an image I like to look at.  Others might want to emphasize the color, or spray some mist on it, or something.&lt;br /&gt;4) Set your camera to a timer.  This step ensures that you won't affect the camera or the tripod when the shot is taken; if you have your hands on the thing, twitching might move the camera, or the force of pressing the button might change your composition.&lt;br /&gt;5) If you're shooting digital, go to the lowest ISO you can.  You're on a tripod; there's no reason not to take your time.&lt;br /&gt;6) Check your depth of field.  One of the reasons I like true macro lenses is the ability to go to f/22 or something ridiculous; except, it's not ridiculous when close up.  The depth of field shrinks the closer you focus on something, and if you're only an inch or two away from your subject, an f/4 aperture is paper thin.  The selection of the aperture is really part of composition from step 3, and should be given due consideration (and considerable experimentation when learning).&lt;br /&gt;&lt;br /&gt;I prefer natural light, frankly, because I'm lazy.  I also happen to think flowers look just fine in natural light, but I'm not the final word.&lt;br /&gt;&lt;br /&gt;(all of these shots, btw, can be found on http://www.markmroden.com)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-7988090685389461203?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/7988090685389461203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=7988090685389461203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7988090685389461203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7988090685389461203'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/08/some-flower-pictures.html' title='Some Flower Pictures'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_DmFt2Yspa1U/RsoMHRwoUUI/AAAAAAAAAAU/NKxJ7Frxs50/s72-c/spiderflower.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-7290244661973545011</id><published>2007-08-12T18:05:00.001-07:00</published><updated>2007-08-12T18:06:02.658-07:00</updated><title type='text'>One year, w00t!</title><content type='html'>One year anniversary!  Yay!&lt;br /&gt;&lt;br /&gt;Check out the photos from Granrose's 80th, in Pottsville, where we celebrated:&lt;br /&gt;&lt;br /&gt;http://www.markmroden.com/gallery/3292544#182808129&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-7290244661973545011?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/7290244661973545011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=7290244661973545011' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7290244661973545011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7290244661973545011'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/08/one-year-w00t.html' title='One year, w00t!'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-849751626870860953</id><published>2007-08-03T09:40:00.000-07:00</published><updated>2007-08-03T09:50:51.753-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='illegal immigration'/><category scheme='http://www.blogger.com/atom/ns#' term='big government'/><title type='text'>Since when does the government get to fire me?</title><content type='html'>So I read &lt;a href="http://www.latimes.com/news/politics/la-na-social3aug03,0,6934256.story?coll=la-home-center"&gt;this article here&lt;/a&gt; in this morning's LA Times, and I am pretty angry about it.&lt;br /&gt;&lt;br /&gt;Since when does the Federal Government have the ability to fire me?  Am I now employed by them, or employed by my employer?&lt;br /&gt;&lt;br /&gt;How do they know that workers with inconsistencies in their SSN's and their W-2's are, in fact, illegal?  Have they done any studies to show the correlation?  It appears, from the article, that two thirds of people who have these discrepancies are, in fact, native born, so how does that square up?&lt;br /&gt;&lt;br /&gt;What's the process for correcting the problem?  Will it end up being something as messed up as Medicare, part D, which requires a deep and intimate knowledge of &lt;a href="http://mathworld.wolfram.com/ParsevalsTheorem.html"&gt;Parseval's Theorem&lt;/a&gt; and it's solution in some kind of n-dimensional &lt;a href="http://mathworld.wolfram.com/HilbertSpace.html"&gt;Hilbert space&lt;/a&gt;?  I'm not even sure I know if those mathematical concepts go together, but I'm pretty sure they do, like I'm pretty sure that since I've been working 3 jobs to support myself in graduate school, I'm gonna be one of the flagged workers.&lt;br /&gt;&lt;br /&gt;This administration started out with claims that all come from Reagan, that we're going to make government smaller, and that more government is the problem and not the solution.  It seems to have caught up to them that all of the social problems they want to fix, be it showing nipples at football games, underage sex, illegal aliens, underage sex with illegal aliens while watching naked football, or any other hobgoblins that keep such God-fearing busybodies awake at night, all require some kind of government intervention.&lt;br /&gt;&lt;br /&gt;So what's it gonna be, Republicans?  More government to fix your perceived ills of society, or less government and keeping your promises?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-849751626870860953?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/849751626870860953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=849751626870860953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/849751626870860953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/849751626870860953'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/08/since-when-does-government-get-to-fire.html' title='Since when does the government get to fire me?'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-433527919186487033</id><published>2007-08-01T13:07:00.000-07:00</published><updated>2007-08-01T13:10:49.061-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='my recent documents'/><title type='text'>"My Recent Documents" rant</title><content type='html'>So, I like to get the images I'm working on at the moment via the Recent Documentations option in the directory tree.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately, for reasons that are beyond me, this dialog is, by default, sorted in ascending date order, instead of descending date order, so that you get the oldest documents you've worked with, instead of the newest.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Like anyone has _ever_ wanted that feature in a Recent Documents list.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While I'm on the subject of this dialog box, how hard is it to save the state of the damn thing from opening to opening?  If I'm using the 'details' view, the next time I open the dialog, I want the 'details' view up.  Not difficult.  Why revert to some standard template that I don't want?  Would it be possible to get around this by keeping a copy of the dialog box around, so that I can open and close it at will, but flush the previous selection, and maybe copy settings to another dialog, so I can have different options for save and load?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And why don't other programs do that, if it's so easy?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-433527919186487033?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/433527919186487033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=433527919186487033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/433527919186487033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/433527919186487033'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/08/my-recent-documents-rant.html' title='&quot;My Recent Documents&quot; rant'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-4814929723225106918</id><published>2007-08-01T07:20:00.000-07:00</published><updated>2007-08-01T07:25:34.067-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='peace'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='war'/><category scheme='http://www.blogger.com/atom/ns#' term='proclaimers'/><title type='text'>Walking across America</title><content type='html'>I would walk five hundred miles&lt;br /&gt;and I would walk five hundred more&lt;br /&gt;Just to be the man who walked a thousand miles&lt;br /&gt;To end this stupid war.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.marchforpeace.info/"&gt;http://www.marchforpeace.info/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With apologies to &lt;a href="http://www.proclaimers.co.uk/2003/"&gt;The Proclaimers&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-4814929723225106918?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/4814929723225106918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=4814929723225106918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/4814929723225106918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/4814929723225106918'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/08/walking-across-america.html' title='Walking across America'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-8724188902087093775</id><published>2007-08-01T05:32:00.000-07:00</published><updated>2007-08-01T05:43:29.919-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='managed'/><category scheme='http://www.blogger.com/atom/ns#' term='unmanaged'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='dll'/><title type='text'>Return to C++!</title><content type='html'>Finally, I get to return to C++.&lt;br /&gt;&lt;br /&gt;Not that C# is all bad, mind you.  It's pretty decent when it comes to UI and the day-to-day meanderings and wanderings of what needs to happen to keep a program running.  Perhaps its nicest feature is the ease with which I can attach an outside dll and use that, because now that I need to make sure I have some serious horsepower, C# is stepping out of the way.&lt;br /&gt;&lt;br /&gt;One thing that irritates me:  how hard it is to debug unmanaged C++ from inside a managed C# environment.  But mmr, I hear you cry, the whole freakin' point of C# is that everything can be managed for you, and the IDE will hold your hand.  But sometimes, I don't want my hand held, I want to run free.  Free as the wind blows, free as the grass grows.&lt;br /&gt;&lt;br /&gt;To attach a dll, just do this:&lt;br /&gt;&lt;pre&gt;&lt;span class="keyword"&gt;using&lt;/span&gt; System&lt;span class="operator"&gt;.&lt;/span&gt;Runtime&lt;span class="operator"&gt;.&lt;/span&gt;InteropServices&lt;span class="operator"&gt;;&lt;br /&gt;&lt;br /&gt;[&lt;/span&gt;DllImport&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"mydll.dll"&lt;/span&gt;&lt;span class="operator"&gt;)]&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;public static extern&lt;/span&gt;&lt;span class="type"&gt; void&lt;/span&gt; MyFunc&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt; inImagePtr&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; outImagePtr&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; inYSize&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; inXSize&lt;span class="operator"&gt;);&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;private&lt;/span&gt; unsafe ushort&lt;span class="operator"&gt;[]&lt;/span&gt; UseMyFunc&lt;span class="operator"&gt;(&lt;/span&gt;ushort&lt;span class="operator"&gt;[]&lt;/span&gt; inChannelData&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; inRows&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; inColumns&lt;span class="operator"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    ushort&lt;span class="operator"&gt;[]&lt;/span&gt; theOutData&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt; ushort&lt;span class="operator"&gt;[&lt;/span&gt;inChannelData&lt;span class="operator"&gt;.&lt;/span&gt;Length&lt;span class="operator"&gt;];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        fixed&lt;span class="operator"&gt; (&lt;/span&gt;ushort&lt;span class="operator"&gt;*&lt;/span&gt; inBufferPtr&lt;span class="operator"&gt; = &amp;amp;&lt;/span&gt;inChannelData&lt;span class="operator"&gt;[&lt;/span&gt;&lt;span class="int"&gt;0&lt;/span&gt;&lt;span class="operator"&gt;]) {&lt;/span&gt;&lt;br /&gt;            fixed&lt;span class="operator"&gt; (&lt;/span&gt;ushort&lt;span class="operator"&gt;*&lt;/span&gt; outBufferPtr&lt;span class="operator"&gt; = &amp;amp;&lt;/span&gt;theOutData&lt;span class="operator"&gt;[&lt;/span&gt;&lt;span class="int"&gt;0&lt;/span&gt;&lt;span class="operator"&gt;]) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                MyFunc&lt;span class="operator"&gt;((&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;inBufferPtr&lt;span class="operator"&gt;, (&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt;&lt;span class="operator"&gt;)&lt;/span&gt;outBufferPtr&lt;span class="operator"&gt;,&lt;/span&gt; inRows&lt;span class="operator"&gt;,&lt;/span&gt; inColumns&lt;span class="operator"&gt;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;&lt;br /&gt;        return&lt;/span&gt; theOutData&lt;span class="operator"&gt;;&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Essentially, you need to have a function exposed by the dll, and then you can use that function.  So you get the speed of C++ inside the function, but the handiness of C# outside the function.  Not a bad combination.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-8724188902087093775?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/8724188902087093775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=8724188902087093775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/8724188902087093775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/8724188902087093775'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/08/return-to-c.html' title='Return to C++!'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-1543304009707594142</id><published>2007-07-27T08:50:00.000-07:00</published><updated>2007-07-27T08:58:51.640-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Law Of Dancing'/><category scheme='http://www.blogger.com/atom/ns#' term='dancing'/><category scheme='http://www.blogger.com/atom/ns#' term='weddings'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Mark's Law of Dancing Music</title><content type='html'>Here is Mark's Law of Dancing Music, or Music To Dance To:&lt;br /&gt;&lt;br /&gt;No song which leads with a guitar, or multiple guitars, be they analog or electric, is a dance song.  Period.  Do not try to argue with this law, your argument flops dying on the floor like a fish gasping for water, much like how you must dance.&lt;br /&gt;&lt;br /&gt;Corollary:  Spanish music is exempted.&lt;br /&gt;Corollary to the Corollary:  If it is Spanish music, there is a dance, and one specific dance, which may be danced to that song, be it a Mambo, Salsa, etc.  If you do not know that dance, sit down.  You will simply continue to embarrass yourself, as you did while squawking to the chicken dance.&lt;br /&gt;&lt;br /&gt;Wedding DJ's, take heed: stop playing songs with guitars in them as primary instruments.  Especially if the song has a solo.  No one knows how to dance to these songs, because they are undancable to all but either the most skilled (who aren't at your wedding), the most drunk (who don't care what's being played), or the most painfully inept (which no one really wants to watch, except to be thankful that it is not them).  No more Def Leoppard, Metallica, Rolling Stones, Offspring, or anything like that, unless the bride is specifically paying you for that song.  In which case, it is she who needs to consult the rule, not you.  Grooms don't count.&lt;br /&gt;&lt;br /&gt;That is all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-1543304009707594142?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/1543304009707594142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=1543304009707594142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/1543304009707594142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/1543304009707594142'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/07/marks-law-of-dancing-music.html' title='Mark&apos;s Law of Dancing Music'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-7797438386626314614</id><published>2007-07-26T15:07:00.001-07:00</published><updated>2008-12-08T15:54:47.293-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='prime lenses'/><category scheme='http://www.blogger.com/atom/ns#' term='d80'/><category scheme='http://www.blogger.com/atom/ns#' term='nikon'/><category scheme='http://www.blogger.com/atom/ns#' term='d40x'/><category scheme='http://www.blogger.com/atom/ns#' term='d40'/><category scheme='http://www.blogger.com/atom/ns#' term='lens selection'/><category scheme='http://www.blogger.com/atom/ns#' term='zoom lenses'/><title type='text'>Nikon: d40x, or d80?  And which lens?</title><content type='html'>I shoot Nikon when I take pictures.  My progression through the various cameras and so forth basically went like this:&lt;br /&gt;&lt;br /&gt;1) point and shoot, 2 mpix.  This was the Canon sd100 (or something like that), a little guy the size of a deck of cards.  Nice camera, not particularly cheap but cheap for the time, but slow as a dog.  I could not take a picture within a few seconds, and when I did, the exposure time had to be very long to capture what I thought was a shot in decent light.&lt;br /&gt;2)  Canon S1 IS.  I liked this camera, it had all kinds of bells and whistles, and with a macro lens attached, could let me take shots like:&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_DmFt2Yspa1U/RqkjnGH4alI/AAAAAAAAAAM/q2Dfm7dDGl0/s1600-h/38095644.img_4801.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_DmFt2Yspa1U/RqkjnGH4alI/AAAAAAAAAAM/q2Dfm7dDGl0/s320/38095644.img_4801.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5091640008284596818" /&gt;&lt;/a&gt;&lt;br /&gt;Very cool, and very close in, since that little guy could not have been more than a centimeter high.&lt;br /&gt;&lt;br /&gt;Problem was, the S1 IS (and presumably it's more recent cousin, the Canon S5 IS) suffered from the same shutter lag problem, as well as requiring a tripod for shots made in all but bright sunlight.  The noise was bad enough that I couldn't go past ISO 100, and so the exposure times would just be too high to be fixed by the image stablization.&lt;br /&gt;&lt;br /&gt;So I then decided to buy an SLR.  It came down to the Canon Rebel (first generation), or the Nikon D70. Based on specs and noise profiles from &lt;a href="http://www.dpreview.com/"&gt;dpreview.com&lt;/a&gt;, as well as the couple hundred dollar difference in price, it was pretty clear to me that the Canon was the way to go.  I went to my local Ritz (Wolf?) Camera, just to try them out, and the Nikon was clearly the better way to go.  It felt like an actual tool, a black and meaningful piece of equipment used to do serious things.  The Canon felt cheap and chintzy, and was too small for my &lt;a href="http://www.penny-arcade.com/comic/2001/08/29"&gt;gargantuan paws&lt;/a&gt;. So, to the Nikon!&lt;br /&gt;&lt;br /&gt;I've since moved on to a D200, with a variety of prime and zoom lenses, and really couldn't be happier.  I have realized that I needed to change equipment as the needs I had weren't being met by my previous equipment; but, since changing to an SLR, I now have equipment that meets or exceeds my needs, so I have more to learn.  Which is good, because it keeps me interested in the hobby.&lt;br /&gt;&lt;br /&gt;Recently, a friend of mine asked me for links about the D40x, and this is what I told her.  I replicate it because I actually get asked this question quite a bit:&lt;br /&gt;&lt;br /&gt;=========================&lt;br /&gt;&lt;br /&gt;Here's the d40x:&lt;br /&gt;&lt;a href="http://www.bhphotovideo.com/c/product/494398-REG/Nikon__D40x_Digital_Camera_with.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.bhphotovideo.com/c&lt;wbr&gt;/product/494398-REG/Nikon_&lt;/wbr&gt;&lt;wbr&gt;_D40x_Digital_Camera_with.html&lt;/wbr&gt;&lt;/a&gt;&lt;wbr&gt;&lt;br /&gt;(that's with a 2gb card)&lt;br /&gt;&lt;br /&gt;And the lens I recommend:&lt;br /&gt;&lt;a href="http://www.bhphotovideo.com/c/product/324190-USA/Nikon_2149_18_70mm_f_3_5_4_5_G_AFS_ED_IF.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.bhphotovideo.com/c&lt;/a&gt;&lt;/wbr&gt;&lt;a href="http://www.bhphotovideo.com/c/product/324190-USA/Nikon_2149_18_70mm_f_3_5_4_5_G_AFS_ED_IF.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;wbr&gt;/product/324190-USA/Nikon_2149&lt;/wbr&gt;&lt;wbr&gt;_18_70mm_f_3_5_4_5_G_AFS_ED_IF&lt;/wbr&gt;&lt;wbr&gt;.html &lt;/wbr&gt;&lt;/a&gt;&lt;wbr&gt;&lt;br /&gt;&lt;br /&gt;If you're thinking of getting some of the older lenses, or the prime lenses, this might not be the right camera.&lt;br /&gt;&lt;br /&gt;Almost all of the pictures I take that make people drool, like this one:&lt;br /&gt;&lt;a href="http://www.markmroden.com/gallery/3165979#174004648" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt; http://www.markmroden.com&lt;/a&gt;&lt;/wbr&gt;&lt;a href="http://www.markmroden.com/gallery/3165979#174004648" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;wbr&gt;/gallery/3165979#174004648&lt;/wbr&gt;&lt;/a&gt;&lt;wbr&gt;&lt;br /&gt;are done with a prime lens.&lt;br /&gt;&lt;br /&gt;Why is that image worth noting?  From a technical perspective (whether or not you think the subject matter is emotionally grabbing or not, just the technical), note a few things:&lt;br /&gt;1) action is frozen&lt;br /&gt;2) he is in sharp focus, the grass behind him is blurred nicely, and blurs more the further things are to the lens&lt;br /&gt;&lt;br /&gt;Both of those feats are accomplished by what's known as a large aperture.  In this case, the lens was an 85mm 1.8 lens, which can be had for ~$350 or so, and was set to f/2.0.  By comparison, most non-professional zooms are between 3.5 and 5.6 (the one I've recommended is 3.5-4.5), which means that there is much less subject isolation from background (ie, more stuff is in focus), and the camera needs more time to gather light for a decent exposure, so you may not be able to freeze action as well.&lt;br /&gt;&lt;br /&gt;If you think that you may want to explore this direction, not just with zooms, but also primes, then you may want to consider a d80.  It costs more:&lt;script&gt;&lt;!-- D(["mb","\u003cbr\&gt;\u003ca href\u003d\"http://www.bhphotovideo.com/c/product/449061-REG/Nikon_25412_D80_SLR_Digital_Camera.html\" target\u003d\"_blank\" onclick\u003d\"return top.js.OpenExtLink(window,event,this)\"\&gt;\nhttp://www.bhphotovideo.com/c\u003cWBR\&gt;/product/449061-REG/Nikon\u003cWBR\&gt;_25412_D80_SLR_Digital_Camera\u003cWBR\&gt;.html\u003c/a\&gt;\u003cbr\&gt;but you can pair it with this lens:\u003cbr\&gt;\u003ca href\u003d\"http://www.bhphotovideo.com/c/product/247091-USA/Nikon_2137_Normal_AF_Nikkor_50mm.html\" target\u003d\"_blank\" onclick\u003d\"return top.js.OpenExtLink(window,event,this)\"\&gt;\nhttp://www.bhphotovideo.com/c\u003cWBR\&gt;/product/247091-USA/Nikon_2137\u003cWBR\&gt;_Normal_AF_Nikkor_50mm.html\u003c/a\&gt;\u003cbr\&gt;which is perhaps the best lens in the nikon lineup, for the price.\u003cbr\&gt;\u003cbr\&gt;If you can stretch it, I really recommend the d80 over the d40, if only because you can then expand into lenses made before the last 7 years.  If you really see yourself needing a zoom and not too concerned with subject isolation, then the d40 is probably fine, but as of this moment, lacks much in the way of expansion to those older lenses.\n\u003cbr\&gt;\u003cbr\&gt;Having said all of that, though, here&amp;#39;s some reviews.  \u003cbr\&gt;\u003ca href\u003d\"http://www.bythom.com/d40review.htm\" target\u003d\"_blank\" onclick\u003d\"return top.js.OpenExtLink(window,event,this)\"\&gt;http://www.bythom.com/d40review\u003cWBR\&gt;.htm\u003c/a\&gt;\u003cbr\&gt;\u003ca href\u003d\"http://www.bythom.com/1870lens.htm\" target\u003d\"_blank\" onclick\u003d\"return top.js.OpenExtLink(window,event,this)\"\&gt;http://www.bythom.com/1870lens\u003cWBR\&gt;.htm\n\u003c/a\&gt;\u003cbr\&gt;\u003ca href\u003d\"http://www.bythom.com/d80review.htm\" target\u003d\"_blank\" onclick\u003d\"return top.js.OpenExtLink(window,event,this)\"\&gt;http://www.bythom.com/d80review\u003cWBR\&gt;.htm\u003c/a\&gt;\u003cbr\&gt;\u003ca href\u003d\"http://www.naturfotograf.com/lens_norm.html\" target\u003d\"_blank\" onclick\u003d\"return top.js.OpenExtLink(window,event,this)\"\&gt;http://www.naturfotograf.com\u003cWBR\&gt;/lens_norm.html\u003c/a\&gt; (and look for the 50mm \n1.8 review)\u003cbr\&gt;\u003ca href\u003d\"http://www.naturfotograf.com/lens_zoom_01.html#AFS18-70G\" target\u003d\"_blank\" onclick\u003d\"return top.js.OpenExtLink(window,event,this)\"\&gt;http://www.naturfotograf.com\u003cWBR\&gt;/lens_zoom_01.html#AFS18-70G\u003c/a\&gt;\u003cbr\&gt;\u003cbr\&gt;I hope that helps.\u003cbr\&gt;\u003cbr\&gt;Here&amp;#39;s some museum shots that were also taken with the 85 mm:\n",1] );  //--&gt;&lt;/script&gt;&lt;br /&gt;&lt;a href="http://www.bhphotovideo.com/c/product/449061-REG/Nikon_25412_D80_SLR_Digital_Camera.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt; http://www.bhphotovideo.com/c&lt;/a&gt;&lt;/wbr&gt;&lt;a href="http://www.bhphotovideo.com/c/product/449061-REG/Nikon_25412_D80_SLR_Digital_Camera.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;wbr&gt;/product/449061-REG/Nikon&lt;/wbr&gt;&lt;wbr&gt;_25412_D80_SLR_Digital_Camera&lt;/wbr&gt;&lt;wbr&gt;.html&lt;/wbr&gt;&lt;/a&gt;&lt;wbr&gt;&lt;br /&gt;but you can pair it with this lens:&lt;br /&gt;&lt;a href="http://www.bhphotovideo.com/c/product/247091-USA/Nikon_2137_Normal_AF_Nikkor_50mm.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt; http://www.bhphotovideo.com/c&lt;/a&gt;&lt;/wbr&gt;&lt;a href="http://www.bhphotovideo.com/c/product/247091-USA/Nikon_2137_Normal_AF_Nikkor_50mm.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;wbr&gt;/product/247091-USA/Nikon_2137&lt;/wbr&gt;&lt;wbr&gt;_Normal_AF_Nikkor_50mm.html&lt;/wbr&gt;&lt;/a&gt;&lt;wbr&gt;&lt;br /&gt;which is perhaps the best lens in the nikon lineup, for the price.&lt;br /&gt;&lt;br /&gt;If you can stretch it, I really recommend the d80 over the d40, if only because you can then expand into lenses made before the last 7 years.  If you really see yourself needing a zoom and not too concerned with subject isolation, then the d40 is probably fine, but as of this moment, lacks much in the way of expansion to those older lenses.&lt;br /&gt;&lt;br /&gt;Having said all of that, though, here's some reviews.&lt;br /&gt;&lt;a href="http://www.bythom.com/d40review.htm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.bythom.com/d40review&lt;/a&gt;&lt;/wbr&gt;&lt;a href="http://www.bythom.com/d40review.htm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;wbr&gt;.htm&lt;/wbr&gt;&lt;/a&gt;&lt;wbr&gt;&lt;br /&gt;&lt;a href="http://www.bythom.com/1870lens.htm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.bythom.com/1870lens&lt;/a&gt;&lt;/wbr&gt;&lt;a href="http://www.bythom.com/1870lens.htm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;wbr&gt;.htm &lt;/wbr&gt;&lt;/a&gt;&lt;wbr&gt;&lt;br /&gt;&lt;a href="http://www.bythom.com/d80review.htm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.bythom.com/d80review&lt;/a&gt;&lt;/wbr&gt;&lt;a href="http://www.bythom.com/d80review.htm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;wbr&gt;.htm&lt;/wbr&gt;&lt;/a&gt;&lt;wbr&gt;&lt;br /&gt;&lt;a href="http://www.naturfotograf.com/lens_norm.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.naturfotograf.com&lt;/a&gt;&lt;/wbr&gt;&lt;a href="http://www.naturfotograf.com/lens_norm.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;wbr&gt;/lens_norm.html&lt;/wbr&gt;&lt;/a&gt;&lt;wbr&gt; (and look for the 50mm  1.8 review)&lt;br /&gt;&lt;a href="http://www.naturfotograf.com/lens_zoom_01.html#AFS18-70G" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.naturfotograf.com&lt;/a&gt;&lt;/wbr&gt;&lt;a href="http://www.naturfotograf.com/lens_zoom_01.html#AFS18-70G" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;wbr&gt;/lens_zoom_01.html#AFS18-70G&lt;/wbr&gt;&lt;/a&gt;&lt;wbr&gt;&lt;br /&gt;&lt;br /&gt;I hope that helps.&lt;br /&gt;&lt;br /&gt;Here's some museum shots that were also taken with the 85 mm: &lt;script&gt;&lt;!-- D(["mb","\u003cbr\&gt;\u003ca href\u003d\"http://www.markmroden.com/gallery/3166046\" target\u003d\"_blank\" onclick\u003d\"return top.js.OpenExtLink(window,event,this)\"\&gt;http://www.markmroden.com\u003cWBR\&gt;/gallery/3166046\u003c/a\&gt;\u003cbr\&gt;\u003cbr\&gt;Note that, by the second reviewer&amp;#39;s scale, the 85mm 1.8 that I use is a 4, same score as the 18-70.\u003cbr\&gt;",1] ); D(["mb","\u003cspan class\u003dsg\&gt;\u003cbr\&gt;Mark\n\u003c/span\&gt;",0] ); D(["ce"]);  //--&gt;&lt;/script&gt;&lt;br /&gt;&lt;a href="http://www.markmroden.com/gallery/3166046" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.markmroden.com&lt;/a&gt;&lt;/wbr&gt;&lt;a href="http://www.markmroden.com/gallery/3166046" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;wbr&gt;/gallery/3166046&lt;/wbr&gt;&lt;/a&gt;&lt;wbr&gt;&lt;br /&gt;&lt;br /&gt;Note that, by the second reviewer's scale, the 85mm 1.8 that I use is a 4, same score as the 18-70.&lt;/wbr&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-7797438386626314614?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/7797438386626314614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=7797438386626314614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7797438386626314614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7797438386626314614'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/07/nikon-d40x-or-d80-and-which-lens.html' title='Nikon: d40x, or d80?  And which lens?'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_DmFt2Yspa1U/RqkjnGH4alI/AAAAAAAAAAM/q2Dfm7dDGl0/s72-c/38095644.img_4801.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-1428990660945042313</id><published>2007-07-25T13:10:00.001-07:00</published><updated>2007-07-26T16:03:55.807-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Random numbers'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Random numbers in C#</title><content type='html'>I've learned, over the last few days, a very disturbing thing.&lt;br /&gt;&lt;br /&gt;Say you want to make a random number.  Or pseudorandom, since most of us don't have radiation sources and the readers necessary to record such noise. &lt;br /&gt;&lt;br /&gt;Now, say you're using C#.&lt;br /&gt;&lt;br /&gt;Yay!  They've made a Random class.  You can just do:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Random r = new Random();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;int theRandomNumber = r.Next();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;int anotherRandomNumber = r.Next();&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yay!  Problem solved!&lt;br /&gt;&lt;br /&gt;But wait.&lt;br /&gt;&lt;br /&gt;Suppose you've put this code in, say, a constructor, one that gets called a few times.  Now you have a problem; it turns out, the constructor will make the exact same random number generator, with the exact same seed value!  How do I know this?  Because I just lost three days and a huge number of hair follicles to this problem.&lt;br /&gt;&lt;br /&gt;Here's the deal:&lt;br /&gt;1) MainObject makes, say, an array of ContainedObjects.&lt;br /&gt;2) ContainedObjects all call the random number generator as above during startup.&lt;br /&gt;3) Each random number generator has the same seed. &lt;br /&gt;4) So, the 'random' sequence is mimicked in each of the ContainedObjects.&lt;br /&gt;&lt;br /&gt;Technically, I suppose it's still random, much like &lt;a href="http://www.xkcd.com/221/"&gt;a random number generator that always returns 4&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;How do you fix this problem?&lt;br /&gt;&lt;br /&gt;1) Seed with the tick count.  Apparently, this is a bad idea, because it doesn't work consistently.  After testing on three different machines with three different clock speeds, using DateTime.Now.Milliseconds may or may not return the exact same milliseconds.  Not sufficiently random, not a solution.&lt;br /&gt;2) Uptime of the computer.  I have no idea how to get this.&lt;br /&gt;3) Have the MainObject hold the random number generator.  However, it now needs to be a member; how many times do you initialize an array of ContainedObjects?  If it's more than once, but the random number generator is initialized the same way again, then you're back to the same problem.  Heaven forfend that you need multiple random numbers throughout the place; you'll need to make your random number generator global!  Global variables make my skin crawl.&lt;br /&gt;4) I don't know.  I'm currently doing option number 3, and it hurts my head, but at least it's just a member in MainObject.&lt;br /&gt;&lt;br /&gt;What's the lesson in all of this?&lt;br /&gt;&lt;br /&gt;Be careful of random number generators you don't write yourself.  One of &lt;a href="http://www.amazon.com/Art-Computer-Programming-Seminumerical-Algorithms/dp/0201896842/ref=pd_bxgy_b_text_b/105-0165674-9839615"&gt;Knuth's exercises &lt;/a&gt;is to check the random number generators in programs in the nearest computer lab; apparently, the C# guys didn't check out what he had to say.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-1428990660945042313?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/1428990660945042313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=1428990660945042313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/1428990660945042313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/1428990660945042313'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/07/random-numbers-in-c.html' title='Random numbers in C#'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-4110694244168088943</id><published>2007-07-25T07:55:00.000-07:00</published><updated>2007-07-26T17:27:40.826-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='16-bit'/><category scheme='http://www.blogger.com/atom/ns#' term='images'/><category scheme='http://www.blogger.com/atom/ns#' term='16bit images'/><category scheme='http://www.blogger.com/atom/ns#' term='16 bit bitmap'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='bitmap'/><title type='text'>So you want to save and load 16 bit images in C#.</title><content type='html'>Say, for instance, that you're working for a medical device company, and you need to write in C#.&lt;br /&gt;&lt;br /&gt;How do you load in the images from the device?&lt;br /&gt;&lt;br /&gt;For those of you who don't know, images from medical devices are usually 16 bit grayscale images, maybe sometimes 15.  That's ushort, or UInt16, and making it a short or SInt16 can sometimes have dire consequences.  Dire, as in, people die, because this is a medical device we're making.  That's the first thing-- our images are 16 bit graqyscale, from now until 18 bit or 20 bit imagers are made.  For those of you who are curious, I'll end this post with a small discussion about what bit depth really means, but for now, let's just say you want to display the damn thing.&lt;br /&gt;&lt;br /&gt;The C# (or .NET) environment has a 16 bit grayscale bitmap class.  If it worked, it would be ideal for us, because we could display it right after loading it.  Alas, it is not to be; the 16 bit class doesn't work.  &lt;a href="http://msdn2.microsoft.com/en-us/library/system.drawing.image.pixelformat.aspx"&gt;Microsoft's documentation on the subject of PixelFormats&lt;/a&gt; is woefully inadequate; even after that, though, just try using a 16 bit grayscale.  Watch it fail with no real error code.&lt;br /&gt;&lt;br /&gt;Microsoft, as a side note, really has no idea what goes into this kind of application, &lt;a href="http://msdn.microsoft.com/msdnmag/issues/03/07/CuttingEdge/default.aspx"&gt;as they demonstrate here&lt;/a&gt;.  I'm not sure they really should, either; it's not their purview to mess with medical devices, but it is annoying that they seem to think they know anything about the subject.&lt;br /&gt;&lt;br /&gt;So, we need an outside library to load our images.&lt;br /&gt;&lt;br /&gt;If you're in the medical imaging field, then you are using DICOM.  DICOM is a standard format for storing and retrieving medical image data, either locally or from a central server, that should be entirely independent of vendor.  Really, this is the agreed-upon format for medical images, and if you're making a serious medical imaging app, you need this format, period.&lt;br /&gt;&lt;br /&gt;To use it, I use &lt;a href="http://www.geocities.com/pawanpshroff/dcmtk.htm"&gt;dcmtk&lt;/a&gt;.  I don't claim to be an expert; luckily, one of my coworkers knows a lot about DICOM, and wrote me a little reader code snippet for our appplication.  I could show it to you, but the problem is, each application is different, and uses their own DICOM tags.  Plus, there may be IP issues; if I get to post my code in its entirety, then I can show you the DICOM load function.&lt;br /&gt;&lt;br /&gt;For me, I really don't care what format the data comes in, just so long as I can get my hands on numbers.  I just want the data, the width, and the height.  Depth is good for 3D images as well.  Everything else can be figured out.  So, my internal representation of an image is quite simple, and you can see it here:&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.comment { color: #999999; font-style: italic; }&lt;br /&gt;.pre { color: #000099; }&lt;br /&gt;.string { color: #009900; }&lt;br /&gt;.char { color: #009900; }&lt;br /&gt;.float { color: #996600; }&lt;br /&gt;.int { color: #999900; }&lt;br /&gt;.bool { color: #000000; font-weight: bold; }&lt;br /&gt;.type { color: #FF6633; }&lt;br /&gt;.flow { color: #FF0000; }&lt;br /&gt;.keyword { color: #990000; }&lt;br /&gt;.operator { color: #663300; font-weight: bold; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="keyword"&gt;&lt;br /&gt;namespace&lt;/span&gt; YourNamespaceHere&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;    public class&lt;/span&gt; ImageContainer&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;        private&lt;/span&gt;&lt;span class="type"&gt; bool&lt;/span&gt; mNulled&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;        public&lt;/span&gt;&lt;span class="type"&gt; bool&lt;/span&gt; Nulled&lt;span class="operator"&gt; {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            get&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="flow"&gt; return&lt;/span&gt; mNulled&lt;span class="operator"&gt;; }&lt;br /&gt;        }&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;        private&lt;/span&gt; ushort&lt;span class="operator"&gt;[]&lt;/span&gt; mData&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;        public&lt;/span&gt; ushort&lt;span class="operator"&gt;[]&lt;/span&gt; Data&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="comment"&gt;//note that this returns a reference, not a copy&lt;br /&gt;&lt;/span&gt;            get&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="flow"&gt; return&lt;/span&gt; mData&lt;span class="operator"&gt;; }&lt;br /&gt;        }&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;        private&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; mXSize&lt;span class="operator"&gt;,&lt;/span&gt; mYSize&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;        public&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; XSize&lt;span class="operator"&gt; {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            get&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="flow"&gt; return&lt;/span&gt; mXSize&lt;span class="operator"&gt;; }&lt;br /&gt;        }&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;        public&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; YSize&lt;span class="operator"&gt; {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            get&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="flow"&gt; return&lt;/span&gt; mYSize&lt;span class="operator"&gt;; }&lt;br /&gt;        }&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;        private&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; mAssessmentID&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;        public&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; AssessmentID&lt;span class="operator"&gt; {&lt;/span&gt;&lt;br /&gt;            get&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="flow"&gt; return&lt;/span&gt; mAssessmentID&lt;span class="operator"&gt;; }&lt;br /&gt;        }&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;        private&lt;/span&gt; String mName&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;        public&lt;/span&gt; String Name&lt;span class="operator"&gt; {&lt;/span&gt;&lt;br /&gt;            get&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;&lt;br /&gt;                if&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;mAssessmentID&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt;) {&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;                    if&lt;/span&gt;&lt;span class="operator"&gt; (&lt;/span&gt;mkVp&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt; &amp;amp;&amp;amp;&lt;/span&gt; mmAs&lt;span class="operator"&gt; &amp;lt;&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt;) {&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;&lt;br /&gt;                        return&lt;/span&gt; mName&lt;span class="operator"&gt;;&lt;br /&gt;                    }&lt;/span&gt;&lt;span class="flow"&gt; else&lt;/span&gt;&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;                        return&lt;/span&gt; mName&lt;span class="operator"&gt; +&lt;/span&gt;&lt;span class="string"&gt; " "&lt;/span&gt;&lt;span class="operator"&gt; +&lt;/span&gt; mkVp&lt;span class="operator"&gt;.&lt;/span&gt;ToString&lt;span class="operator"&gt;() +&lt;/span&gt;&lt;span class="string"&gt; " "&lt;/span&gt;&lt;span class="operator"&gt; +&lt;/span&gt; mmAs&lt;span class="operator"&gt;.&lt;/span&gt;ToString&lt;span class="operator"&gt;();&lt;br /&gt;                    }&lt;br /&gt;                }&lt;/span&gt;&lt;span class="flow"&gt; else&lt;/span&gt;&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;&lt;br /&gt;                    return&lt;/span&gt;&lt;span class="string"&gt; "Assessment Image "&lt;/span&gt;&lt;span class="operator"&gt; +&lt;/span&gt; mAssessmentID&lt;span class="operator"&gt;;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;        private&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; mkVp&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;        public&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; kVp&lt;span class="operator"&gt; {&lt;/span&gt;&lt;br /&gt;            get&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="flow"&gt; return&lt;/span&gt; mkVp&lt;span class="operator"&gt;; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            set&lt;span class="operator"&gt; {&lt;/span&gt; mkVp&lt;span class="operator"&gt; =&lt;/span&gt; value&lt;span class="operator"&gt;; }&lt;br /&gt;        }&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;        private&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; mmAs&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;        public&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; mAs&lt;span class="operator"&gt;{&lt;/span&gt;&lt;br /&gt;            get&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="flow"&gt; return&lt;/span&gt; mmAs&lt;span class="operator"&gt;; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            set&lt;span class="operator"&gt; {&lt;/span&gt; mmAs&lt;span class="operator"&gt; =&lt;/span&gt; value&lt;span class="operator"&gt;; }&lt;br /&gt;        }&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;           &lt;br /&gt;        //private DicomHeader&lt;br /&gt;        //private Annotations&lt;br /&gt;        //private string openedas, so that save can use the default type&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;        public&lt;/span&gt; ImageContainer&lt;span class="operator"&gt;(&lt;/span&gt;String inNullString&lt;span class="operator"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            System&lt;span class="operator"&gt;.&lt;/span&gt;Console&lt;span class="operator"&gt;.&lt;/span&gt;WriteLine&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="string"&gt;"Null image constructor used."&lt;/span&gt;&lt;span class="operator"&gt;);&lt;/span&gt;&lt;br /&gt;            mData&lt;span class="operator"&gt; =&lt;/span&gt; null&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            mXSize&lt;span class="operator"&gt; = -&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;            mYSize&lt;span class="operator"&gt; = -&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;            mName&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="string"&gt; "Null Image"&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            mkVp&lt;span class="operator"&gt; = -&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;            mmAs&lt;span class="operator"&gt; = -&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;            mAssessmentID&lt;span class="operator"&gt; = -&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            mNulled&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="bool"&gt; true&lt;/span&gt;&lt;span class="operator"&gt;;&lt;br /&gt;        }&lt;/span&gt;&lt;span class="comment"&gt;&lt;br /&gt;&lt;br /&gt;        //generic constructor&lt;br /&gt;        //should get an 'opened as' tag as well, plus perhaps dicom header info if present.&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;        public&lt;/span&gt; ImageContainer&lt;span class="operator"&gt;(&lt;/span&gt;ushort&lt;span class="operator"&gt;[]&lt;/span&gt; inData&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; inXSize&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; inYSize&lt;span class="operator"&gt;,&lt;/span&gt; String inName&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; inAssessmentID&lt;span class="operator"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            mData&lt;span class="operator"&gt; =&lt;/span&gt; inData&lt;span class="operator"&gt;;&lt;/span&gt;&lt;span class="comment"&gt;//note that this line means that this structure is responsible&lt;br /&gt;            //for the memory that's passed to it!&lt;br /&gt;&lt;/span&gt;            mXSize&lt;span class="operator"&gt; =&lt;/span&gt; inXSize&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;            mYSize&lt;span class="operator"&gt; =&lt;/span&gt; inYSize&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            mName&lt;span class="operator"&gt; =&lt;/span&gt; inName&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;            mkVp&lt;span class="operator"&gt; = -&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;            mmAs&lt;span class="operator"&gt; = -&lt;/span&gt;&lt;span class="int"&gt;1&lt;/span&gt;&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            mAssessmentID&lt;span class="operator"&gt; =&lt;/span&gt; inAssessmentID&lt;span class="operator"&gt;;&lt;/span&gt;&lt;br /&gt;            mNulled&lt;span class="operator"&gt; =&lt;/span&gt;&lt;span class="bool"&gt; false&lt;/span&gt;&lt;span class="operator"&gt;;&lt;br /&gt;        }&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;        public&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; GetPixelAt&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="type"&gt;int&lt;/span&gt; inX&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="type"&gt; int&lt;/span&gt; inY&lt;span class="operator"&gt;) {&lt;/span&gt;&lt;span class="flow"&gt;&lt;br /&gt;&lt;br /&gt;            return&lt;/span&gt; mData&lt;span class="operator"&gt;[&lt;/span&gt;inY&lt;span class="operator"&gt; *&lt;/span&gt; mXSize&lt;span class="operator"&gt; +&lt;/span&gt; inX&lt;span class="operator"&gt;];&lt;br /&gt;        }&lt;/span&gt;&lt;span class="keyword"&gt;&lt;br /&gt;&lt;br /&gt;        public&lt;/span&gt; Rectangle ImageRect&lt;span class="operator"&gt; {&lt;/span&gt;&lt;br /&gt;            get&lt;span class="operator"&gt; {&lt;/span&gt;&lt;span class="flow"&gt; return&lt;/span&gt;&lt;span class="keyword"&gt; new&lt;/span&gt; Rectangle&lt;span class="operator"&gt;(&lt;/span&gt;&lt;span class="int"&gt;0&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt;&lt;span class="int"&gt; 0&lt;/span&gt;&lt;span class="operator"&gt;,&lt;/span&gt; XSize&lt;span class="operator"&gt;,&lt;/span&gt; YSize&lt;span class="operator"&gt;); }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I'm sorry the formatting blows, but I guess that's just Blogger for you.  If anyone knows other tools, please let me know.&lt;br /&gt;&lt;br /&gt;Note a few things:&lt;br /&gt;1) I'm not allowing for _any_ data processing methods.  Those go elsewhere.&lt;br /&gt;2) I'm not allowing for _any_ display methods.  Those also go elsewhere.&lt;br /&gt;3) Essentially, this is just a name, width, height, and data.  That's it, that's all I need.&lt;br /&gt;4) I'm using get/set methods here for data access.  That's the way it's done in C#.  I'm not entirely sure why, but I'm told that it makes the compiler happier.&lt;br /&gt;5) I will only use the getPixel(x, y) method very infrequently, and NEVER to march through the image.  It's just way too slow; the overhead for calling a function in C# is ridiculous.&lt;br /&gt;&lt;br /&gt;So, we have to fill that with data.  For that, I will use the &lt;a href="http://freeimage.sourceforge.net/"&gt;Free Image API&lt;/a&gt;, with their handily provided C# wrapper.  You may have some issues compiling the C# wrapper; if so, you may need to change some classes to structs to make the compiler work.  Don't worry, we're not even going to touch the methods that it complains about.&lt;br /&gt;&lt;br /&gt;To Load, we will need to make sure:&lt;br /&gt;1) We call the methods from the FreeImageAPI properly, ie:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;UInt32 theBitmap = FreeImage.Load(FreeImage.GetFileType(theCompleteName, 0), theCompleteName, 0);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2) We go into unsafe code in order to read from the pointers.  Email me if you want this code; blogger's formatting for code makes it entirely unreadable.  There's sample code in the FreeImageAPI about transferring data from their bitmap into our image.  It should be fairly straightforward, I'd think, but the casting may cause you some headaches.&lt;br /&gt;3) Make SURE you unload whatever you load, ie:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;FreeImage.Unload(theBitmap);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Otherwise, you will leak a block of memory the size of the bitmap (which can be quite substantial).&lt;br /&gt;4)  Call GC.Collect() and GC.WaitForPendingNotifiers() in order to clean up any blocks lying around.  If you're loading significantly large images and then making copies or running FFT's on them or anything else that could be memory intensive, waiting for the GC to collect memory can sometimes be a bad idea, because it will cause you to thrash.  So, clean up after yourself, and call the GC.  (It's a pet peeve of mine that C# seems to encourage laziness with the way the GC works, but then doesn't always clean up allocated memory).&lt;br /&gt;&lt;br /&gt;How about saving?&lt;br /&gt;&lt;br /&gt;Pretty much the same thing, create a bitmap, move your data into it, and then make sure you unload the bitmap.  The incantation for saving is:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;FreeImageAPI.FreeImage.Save(FreeImageAPI.FREE_IMAGE_FORMAT.FIF_TIFF,&lt;/span&gt;&lt;span style="font-family: courier new;"&gt; theBitmap, inDirectory + "\\" + inName, 0);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This code is if you're saving to TIFF format, and theBitmap is the FreeImage image you've made and put your data into.&lt;br /&gt;&lt;br /&gt;Next time:  Display!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bit depth, you say?  What about it?  Here's the deal:  Medical devices, whether they have truly 16 bits or not, often claim that they do, and use ushorts as their type.  Sometimes, you'll get cross mixing with 15bit data, and have to make sure that you're displaying the image properly.  As to whether or not your device is using all 16 bits of dynamic range, I think you'll have to answer that yourself (and it's not an easy thing to answer).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-4110694244168088943?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/4110694244168088943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=4110694244168088943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/4110694244168088943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/4110694244168088943'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/07/so-you-want-to-save-and-load-16-bit.html' title='So you want to save and load 16 bit images in C#.'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-6831482934316735508</id><published>2007-07-25T07:45:00.000-07:00</published><updated>2007-07-26T16:06:35.831-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='image processing'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>First things first:  why?</title><content type='html'>So, with all of that having been said, why am I writing an image processing application in C#?  Because my advisor/boss told me to, in order to match with existing code.   The story goes like this:&lt;br /&gt;&lt;br /&gt;Once upon a time, there was a lone coder who worked at a company that made x-ray devices.  This coder was constantly having the patch the system to account for all kinds of strange bugs, and he would find the patches in various Microsoft libraries.  So, in order to keep himself current on all the new technologies and to fix these bugs, whenever Microsoft released a new library, he would add it into the application.  He then left the company, his code a Jenga-tower filled with holes and teetering to collapse, a fine structure that only he could understand.&lt;br /&gt;&lt;br /&gt;The code, when synced from source control, weighed in a hefty 2 gb.  It may be one of the few times I've seen source code larger than the executable (150mb).&lt;br /&gt;&lt;br /&gt;Into this I came, bright-eyed and pink-cheeked, to write some image processing code for my PhD thesis in Biomedical Engineering.  By working directly for this company, I get direct access to the bits.  I can plug an oscilloscope up to the x-ray machine if I wanted to (or if it would help, which it wouldn't) to be able to get real numbers.  Just try doing that with a Fuji or Kodak CR machine-- just try.  They lock that stuff down so hard, and you have no idea where those numbers came from or what processing has been done on them before.  This way, I can know exactly what's been going on to the numbers before they form an image on my screen.&lt;br /&gt;&lt;br /&gt;The downside, of course, is that I have to mesh with this Jenga code.&lt;br /&gt;&lt;br /&gt;So, I've been learning C# in order to write an image processing application.  And currently, once I've learned a bit about it, it's not that bad a language to write for.  It really isn't.   It's got some real annoyances, and until I &lt;a href="http://www.amazon.com/Effective-Specific-Improve-Software-Development/dp/0321245660/ref=pd_bbs_sr_1/002-2703073-8547233?ie=UTF8&amp;s=books&amp;amp;qid=1185375153&amp;sr=8-1"&gt;read a book on it&lt;/a&gt;, my code was as weak as a newborn kitten (but not as cute).  It does have some serious drawbacks, though, and these are the things I've learned to get around in order to make this application work.&lt;br /&gt;&lt;br /&gt;Who knows-- maybe someday, I'll get to post that application.  We'll see if the boss lets me; I know that more eyes will make it suck way less than it does now.&lt;br /&gt;&lt;br /&gt;mmr&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-6831482934316735508?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/6831482934316735508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=6831482934316735508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6831482934316735508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/6831482934316735508'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/07/first-things-first-why.html' title='First things first:  why?'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-851933833498682629.post-7456524364247599976</id><published>2007-07-25T07:35:00.000-07:00</published><updated>2007-07-26T16:06:57.967-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='image processing'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>C# image processing?  Ha-ha!</title><content type='html'>So you want to write an image processing program in C#, do you?  Why on earth would you want to do that?  I can only think of a few reasons why that would be a good idea:&lt;br /&gt;&lt;br /&gt;1) The existing codebase is in C#, and the idea of mixing languages with something more appropriate makes your head ache.&lt;br /&gt;2) You're starting from scratch, and C# is new and shiny and everyone must love it.&lt;br /&gt;3) Your boss told you to.&lt;br /&gt;4) The voices in your head told you to.&lt;br /&gt;&lt;br /&gt;Some of these reasons are valid, and some are not.  Let's assume, for the sake of argument, that they are valid, and for whatever reason, you're forced to use C#.  Some things you should know:&lt;br /&gt;&lt;br /&gt;1) C# is slow.  Yes, yes, there are claims (&lt;a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=341958"&gt;such as these&lt;/a&gt;) that C# is as fast, or faster.  I must tell you, that for the purposes of running image processing applications, C# is slower than C# by a good long margin.  In a later post, I'll talk about how much slower, but were talking 200ms for C++ vs 350 ms for C# for a particular algorithm on a 100x100 image.  Scale that to a 9 megapixel 16 bit image, and you're looking at a very significant speed difference.&lt;br /&gt;&lt;br /&gt;2) C# can be sped up, but usually through unsafe code.  Unsafe code means that you lose a lot of what is good about the environment, like run-time checking of almost every error, and really nice debugging tools.  C++ used to be unsafe, and we could edit that code on the fly while debugging, but you can no longer edit unsafe code on the fly in Visual Studio 2005.  A shame, really, as it will reduce you to stopping and recompiling each time you make a change.&lt;br /&gt;&lt;br /&gt;3) C# has a very different object model than C/C++/Java.  C and C++ have C# &lt;span style="font-style: italic;"&gt;struct &lt;/span&gt;type objects, Java has C# &lt;span style="font-style: italic;"&gt;reference &lt;/span&gt;type objects, and if you don't know the difference, you could get burned really badly.&lt;br /&gt;&lt;br /&gt;4) C# does have automatic garbage collection.  However, that automatic garbage collection can be really slow when you're making multiple copies of a 9 megapixel 16 bit image, or if you're converting the image to floats or (god forbid) doubles for some interesting math (FFTW, anyone?).  Get used to calling GC.Collect() and GC.WaitForPendingNotifiers() a lot.&lt;br /&gt;&lt;br /&gt;There's plenty of other things that I've learned while making an image processing application in C#, and these are just the beginning.  As I go through the things I've learned, I'll post them here, so that other people won't have to suffer (as much) as I did, or at least, that's the hope.&lt;br /&gt;&lt;br /&gt;mmr&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/851933833498682629-7456524364247599976?l=imagingphd.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imagingphd.blogspot.com/feeds/7456524364247599976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=851933833498682629&amp;postID=7456524364247599976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7456524364247599976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/851933833498682629/posts/default/7456524364247599976'/><link rel='alternate' type='text/html' href='http://imagingphd.blogspot.com/2007/07/c-image-processing-ha-ha.html' title='C# image processing?  Ha-ha!'/><author><name>mmr</name><uri>http://www.blogger.com/profile/06202240739257657394</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.markmroden.com/photos/161827182-S.jpg'/></author><thr:total>0</thr:total></entry></feed>
