Brief Description
Growing up in wild Florida, and visiting the backcountry somewhat regularly via state parks mainly biking and fishing around Guana State Park near the house where I grew up, as well as fishing trips all over the state- from the estuaries of north Florida to the rim ditch of Lake Okechobee to Shark River in the Everglades to the Key- I developed a love for the outdoors. I wasn’t out there enough to get tired of it, though, it was always special time for me, which is probably why I think so highly of it, even though I do have my fair share of mosquito stories. This all leads to Clyde Butcher, a black and white photographer in south Florida. There was something about his photos that I bonded with, and after seeing an exhibition or two, I thought- how does he make these huge billboard sized prints? From his lectures, I learned a few of his secrets- starting with a large negative, scanning it, photoshoping it, then printing a new negative and enlarging that. But having no large format camera nor even a medium format camera, no money to spend, and only the resources at hand- a mortal Nikon digital camera and access to university resources (plotters, software, a location near the image processing folks), well, that just left the alternatives.
The idea is to take a photo from a “mortal” digital camera, and enlarge it to 5 feet by 7 feet. At the heart, this is an interpolation problem. The numerical analysis approach would start with some kind of linear or polynomial approximation. I know that this is available in photoshop (bicubic), and that it only gives you a little bit of magnification (maybe OK to 3′x4′ from a viewing distance of 5′). That means something non-linear. Being a statistician, I have an immediate lean towards the closest tangentially related idea in statistics- Markov random fields- which I know practically nothing about other than that they exist, they are Markovian, and work with spatial data. I’m sure there are better tools out there, but this is my turf- the extent of my mathematical vision, so that’s the direction I start until something better comes along.
Specific Objective
I want to put a 5 foot by 7 foot print of a lower resolution photo (say 2000 x 3000 pixel raw image) on my wall.
Product/Results
Other than having a huge digital image at the end of the day, it would be nice to collect some code into a publicly available LGPL library that could be adopted by somebody and improved upon.
Status
Not In Progress: I talked through the idea with some friends and sketched out some ballpark infrastructure needs, but didn’t have the combination of time/energy to go on. I did make a few collages of black and white photos in adobe illustrator which I printed on the plotter to be 4′ wide, but that plotter is expensive- even on the cheap paper.
Current Research
Here are excepts from some emails I sent to some friends…
The goal: use some image processing techniques to enlarge some digital
photos up to 5′x7′ and print them on the plotter here…
Alright. The limitation of image size is about 40Gb (memory on the
printer, really 40Gb of swap). I just talked with a guy from the
image processing group. Sadly, it looks like 16bit RGB at 1200
pixel/inch is going to put us just over 40Gb. 600 will give us about
10 Gb, and 300 about 2.5
In 16 bit, B&W
300: 865 Mb
600: 3.4 Gb
1200: 13.5 Gb
I’m still not 100% sure how the pixel/inches translate into printer
dpi though. The plotters are 1200×1200 dpi in color I think,
2400×1200 in B&W?
I think the 300 pixels/in is OK as long as you’re more than 2′ or 3′ away…
I talked to my groupmate. I think the term for what you want to do is “superresolution.” I did a quick search, and it looks like a lot of superresolution work uses several images that are each basically views of the same scene. By doing some registration/interpolation sort of stuff, you can take those low-res images and produce one high-res image. That’s not exactly what you want to do, but it might be interesting if you get a chance to take several pictures of the same scene, but maybe with slight adjustments to the camera position. Sort of the spatial version of bracketing. Here are a couple of papers (one PDF the other PostScript) that talk about that:
http://www.springerlink.com/content/j054570721156682/
http://www-sccm.stanford.edu/pub/sccm/theses/Nhat_Nguyen.ps.gz
Here’s one where I think the guy is just using a single frame. That’s maybe more relevant for the images you’ve already captured:
http://ieeexplore.ieee.org/iel5/11024/34758/01660414.pdf?tp=&arnumber=1660414&isnumber=34758
I don’t know if these are the top techniques or anything, but hopefully they’ll get you started. A lot of image processing stuff gets published through IEEE, so you could also search that (ieeexplore.ieee.org) and google scholar.
You also mentioned that you’re converting your images to B&W. I’m pretty sure you can get some extra resolution when you do that. Camera sensors basically have a grid of pixels, but each pixel only senses one color. So if you have 6 million color pixels, then I think you actually have many more physical sensors. I think with cameras, each single “composite pixel” is made up of 4 pixels in an arrangement kind of like this:
RED GREEN
GREEN BLUE
The camera then combines those measurements into one RGB-valued pixel. When you convert to B&W, you’re probably just converting that RGB-triplet into one luminance (brightness) value. But you might be able to split up the colors, back into the original configuration, and then convert to B&W from there.
I’m not sure if I explained that very well, and I don’t know all the details of camera sensors and what processing they do before writing out the “RAW” image. But I bet someone out there has played around with this.
I hope that was helpful. Keep me updated.
—prashant.
PS I had mentioned that you can scan 35mm film at very high resolution. That’s true, but you might start to see the grain structure of the film. If you ever experiment with that, you could probably get some very slow speed, very fine-grained film, or you could try using medium-format film. You might not be able to scan that with the scanners on campus, but I think medium format film captures much higher resolution than standard digital cameras. They do have digital cameras that compete in that range, but those are the ones that are priced more like cars.
Of course, if you’re really into film, you build one of these:
http://www.cameratruck.es/
So there are two approaches to make big prints, one is superresolution, combining lots of shots to get a very large composite megapixel image. And the other is using an interpolation algorithm like I described before. I have various shots in the 6-20 megapixel range (6ish from my d70 and friend’s 30d, some 12ish from a d2x and a 5d, and some 20ish from scans of 5×7 large format negatives).
It’s not HDR, but rather an interpolation algorithm which takes an image that is, say 6 megapixel and enlarges it to 12 or 18 or 24 megapixel. There is a bicubic function in photoshop to do this, but I’ve heard it’s not the best. I have a lot of experience working with matrices, so it was more for my own fun that I was going to mess with the image processing in matlab. From what I understand so far, depending on the image, matlab reads in the image as an array of 3 matrices (one each for RGB), whose entries are in the bit range of the image (eg integers in either 1-8,16 or 24). Thus an image which is 2000×3000 translates directly into 3 matrices of size 2000×3000. Interpolation is just a function f, where
and
so there are loads of ways of taking into account global and local information to guess what the features look like “between” the pixels. Also, I’m interested in going to B&W in some of the images, and it is important to note that the individual pixels in the sensor are measuring one color channel, in my camera, I think the pattern is (one final pixel (RGB) is sensed with 4 pixels):
red green
green blue
So if I want to go to B&W, I actually get some enlargement “for free”.
Something to keep in mind is the “average viewing distance” of the final image. It’s easy to blow up an image to 5′x7′ if you’re only going to be looking at it from more than 10-15′ away. Honestly, I don’t really know what I’m going for, I’m more interested in messing around and seeing if I can do something that can touch what’s out there. I know that there are some multiscale approaches (think 2-D wavelets) out there. A friend in my dept did her thesis on this kind of thing, so I’m going to see if I can somehow adapt her stuff. The underlying assumption of this approach would be that the properties at the sub-pixel level have the same properties as the pixel and pixel blocks (eg 16 pixels square around area, 81 pixel square around area, etc). eg if the image has lots of variation at the larger levels (think granite slabs in the engineering quad) then the interpolation at the lower scale should also have this variation, and if the local region is “smooth”, then the lower scale (sub pixel level) should also have these properties. But that’s all theory and means very little without decent results.
Examples of ~20 interpolation algorithms:
http://www.general-cathexis.com/interpolation.html
Here’s a discussion of some of the commercial options (alienskin (available as a plugin for photoshop, demo available)), genuine fractal and some other products) with an example or two:
http://www.stevesforums.com/forums/view_topic.php?id=104937&forum_id=70



