As with most new breakthroughs, there are skeptics. In this post, we provide an analysis to show that SnappyCam full-sensor capture at 8 Mpx on the iPhone 5 is very real and of high quality.
Correction 07 August, 2013: We’ve updated this post to correct an error in the section titled “A visual sanity check”. The original post had linked to an incorrect image file that was 1.5 Mpx instead of 8 Mpx. In this correction, we’ve included both 1.5 and 8 Mpx images so the reader can compare.
We use the GSM iPhone 5 and the ISO 12233 test chart replica created by Stephen H. Westin from Cornell University. The chart is printed at 100% size, or 400x240mm.
SnappyCam and the bundled iOS Camera app are used to take photos for comparison. The bundled iOS Camera app takes shots at 8 Mpx by default on the iPhone 5.
We use Adobe Photoshop for image resampling where specified.
Because I am traveling at the moment (can you guess where?), I also used a bunch of magazines for comparison shots that I forgot to take earlier.
The original image (video) can be viewed by clicking on any thumbnail below. Most browsers will “scale to fit” large images, so make sure to view them pixel-for-pixel by unscaling after clicking, quite often by clicking the large image on load.
The iPhone 5 has an awesome 8 Mpx camera sensor. We first verify that a photograph taken by SnappyCam has the same full-sensor field of view (FOV) as the bundled iOS Camera app.
The Camera Lens setting for SnappyCam in this shot was of course “Full FOV”.
Aside from a slight movement of the camera position, it is easy to verify by eye that both photos share the same FOV. That is, both apps capture the same amount of “area” in the scene and both apps utilize the full camera sensor area.
One false assertion is that SnappyCam is simply taking a 1080p video feed and upsampling to 8 Mpx to “fake” a full-sensor capture. We compare a shot taken with SnappyCam at 1440x1080px (1.5 Mpx, “Large FOV”) and 3264x2448px (8 Mpx, “Full FOV”).
Both of these shots are against the ISO 12233 test pattern so we can more easily compare the FoV.
Observe that each photo has a very different FOV. The shot taken at 1440x1080px has a tighter (smaller) FOV than the other. The smaller resolution photo is just a crop of the 8 Mpx sensor.
A crop is the right thing to do here: it both preserves each pixel from the camera sensor without distortion, and is really fast on the image signal processing side. Resizing (upsampling) operations are expensive, and would lead to both a degradation in image quality and a significant slow-down in image processing. More on that below.
Let’s now compare an 8 Mpx photo taken with the bundled iOS Camera app with a 1080p video taken by the same app.
It might be confusing at first to compare a 4:3 photo with a 16:9 video because of the aspect ratio mismatch. When we concentrate on the top and bottom of the video (right image above), comparing that to the full 8 Mpx image (left), it becomes clear that the video taken at 1920x1080px is a crop of the full 8 Mpx camera sensor.
Again, a crop makes sense here for the same reasons outlined above: no visual quality degradation, and speed of (video) signal processing.
Does this mean that SnappyCam is taking some kind of low quality video and extracting frames to create photos at the “Large FOV” (8 Mpx) setting? The answer is no: SnappyCam is capturing full-quality full dynamic range images from the camera sensor, cropped to 1440x1080px (1.5 Mpx) resolution, without resampling or other distortion.
But how can we be sure the 8 Mpx image above isn’t an upsampled version of the 1.5 Mpx image? Two reasons:
The 1.5 Mpx image is a crop of the 8 Mpx full-sensor. We’ve just established that. We can’t “add extra image” around the edges if we’re truly capturing at 1440x1080px, or even 1920x1080px, in order to make up for the difference in FOV, and to “fake” a full-sensor capture at 8 Mpx. We’d have to somehow “create” the missing top/bottom area of the full FOV image out of thin air!
We will see that upsampling the lower-resolution 1.5 Mpx image to “fake” an 8 Mpx image introduces distortions that are clearly not visible in the full-sensor 8 Mpx image we have captured above.
Let’s now focus on item #2 above. In this experiment, we take an ISO 12233 pattern shot at 1440x1080px (1.5 Mpx) and upsample it to 3264x2448 (8 Mpx), then compare to a similar photo shot at the full-sensor 8 Mpx resolution, in a game of “spot the fake”.
We don’t really need to perform this experiment, because the cropping issue observed above is sufficient to disprove the skeptic. But we’ll do it anyway…
We start with Photoshop’s highest quality upsampler: the Bicubic Smoother. After performing the upsampling operation, the resulting JPEG file is saved at 100% JPEG quality, to minimize compression artifacts in a visual comparison.
Above: Original 1.5 Mpx, zoomed (left), Upsampled 8 Mpx image, zoomed (middle), Original 8 Mpx (right)
Close inspection of the upsampled 8 Mpx image (by clicking the thumbnails below) shows smoothing around edges and smearing of closely spaced lines. That is unsurprising because of the bicubic smoothing resampling filter we have selected.
The biggest difference between the upsampled image and the original 8 Mpx image is the smearing of edges and closely spaced lines.
Let’s try and address this by now trying Photoshop’s bicubic sharper resizing sampler instead.
The resampled image appears to be sharper, but there is noticable ringing around edges, and closely spaced lines are still smeared as compared to the original 8 Mpx image that was captured by Snappycam. This is clearly seen by clicking on the thumbnails above.
Even if we completely ignore the difference in FOV outlined above, from this experiment we can conclude that SnappyCam cannot be using upsampling.
Let’s now look again at a “real life” natural image, linked below. Both shots were taken by SnappyCam. On the left we have a 1.5 Mpx photo, on the right we have an 8 Mpx photo. Both were shot with SnappyCam, using the “Large FOV” and “Full FOV” Camera Lens settings, respectively.
Clicking on each thumbnail will reveal the original JPEG image. Please make sure to view it at one-for-one pixel resolution: by default, many browsers will scale and “fit” to the window.
Verification that these photo were shot by SnappyCam can be made by looking at the Exif metadata embedded within the full-sized JPEG images linked below.
Above: 1.5 Mpx image at "Large FOV" (left), 8 Mpx image at "Full FOV" (right). Both shot with SnappyCam.
We notice several features in these photos that can’t be faked by a video frame, or a low-resolution upsample “fake”:
The clarity in both photos is equally amazing: that’s because the lower resolution 1.5 Mpx image is just a crop of the full 8 Mpx sensor. The differing field-of-view in each photo is the giveaway (subject to my shaky hands). Any resampling of the image would degrade it terribly and that’s why SnappyCam avoids resampling at all cost.
We have shown that SnappyCam undeniably shoots at full-sensor 8 Mpx resolution when the “Full FOV” setting is selected on the iPhone 5.
We saw no differences in the FOV between SnappyCam and the bundled iOS Camera app, indicating that SnappyCam is using the full sensor area and indeed shooting at 8 Mpx.
We concluded that one cannot possibly “fake” a full-FOV capture at 8 Mpx by utilizing upsampling from some kind of traditional video feed. That was verified by observing that video or photo resolutions of 1920x1080px (16:9) or 1440x1080px (4:3) are performed with a sensor-crop by the device. That sensor crop leads to a much smaller FOV than the full-sensor FOV at which SnappyCam shoots 8 Mpx shots.
Separately, we debunked the false claim that SnappyCam “fakes” a full-sensor 8 Mpx photo using a lower-resolution one though upsampling: noticeable smearing of close lines and ringing around edges was observed when trying out that technique, for both smoothing and sharpening upsampling variants. Comparing these upsampled “known fakes” to an actual 8 Mpx capture taken by SnappyCam, we saw that the fakes fell short on visual clarity.
Finally, we looked at a natural photo taken by SnappyCam at 8 Mpx, showing the incredible detail and color reproduction that only a full-sensor capture can produce.
In a future post, investigate the claim that SnappyCam shoots at a significantly lower rate than the advertised 20 pictures/sec at full-sensor resolution on the iPhone 5.
Look out for it in late August, once I’ve returned from a long-planned and long-overdue hiking vacation.