A friend recently sent me some test pictures from his new Canon PowerShot SX710. He was comparing the quality settings and sending me the results. Curiosity got the best of me and I decided to dig in myself.
These are the originals scaled down for viewing on the web. We will use some 100% crops of these for comparison. Since we’re only dealing with two images, I manually found the crop coordinates by visually matching features in Photoshop.
These were all shot at the same aperture, ISO setting, and exposure length and there’s not too much difference between the shots. The higher-quality and higher-resolution image does appear to have more grainy noise in it. That graininess compared to the smoothness of the smaller image is probably what accounts for the 80% larger file size – high frequency data takes a lot to store.
More megapixels lets us do neat math on the image. For example, by binning the pixels in a 2×2 manner, we cuts the noise in the image by half.
At this point I couldn’t tell a difference between the two images, but the binned JPEG version is about 13% larger than the medium-quality and 13% smaller than the large quality. I assume that if we ran some quality test we would find that indeed the binned version lies somewhere between the two originals, or in other words, for the same resolution, the binned version of the higher quality original will contain more useful information than the medium quality version.
We could also apply a median filter to limit noise from the high quality source. At work here in comparison to binning is that we are using a median-type operation instead of an averaging one.
The 5×5 median clearly has less noise than the original medium-quality source, but it has lost detail and we have already lost spatial resolution in comparison – it was mainly thrown in here just for fun. The 3×3 is a more practical comparison and we can tell that it did a good job of removing noise. Even compared to the medium-quality source it appears to have smoothed some noise while decently preserving detail.
Since the fence is out of focus for all versions, let’s take a look at an object in the foreground. The noise is much more evident around the blades and leaves. I created the following two crops differently, by opening up the images in OSX’s preview app and taking a screenshot. You can see that the magnification is high enough to see the original pixels in the first image but more detail exists in the second.
In this more extreme example the binning seems to preserve more of the detail from the high quality source while mitigating some of the noise. It’s not great though.
Apparently it doesn’t make much of a difference in these conditions which quality setting the camera uses to store its JPEG image. Granted, according to
exiftool these images were captured at around ISO 800, which if pushing it for a camera with a sensor this small. I’d be interested in redoing this test with the camera on a tripod and set to ISO 100 where the noise component would be minimized. The higher quality settings are intended to preserve high-frequency data, so if you have a noisy source, you won’t be doing much more than preserving that noise.
For most casual photography, you won’t be able to tell much of a difference between the M and L settings, even after comparing for resolution. So don’t feel guilty for getting more out of your memory card and working in the lower resolution.
Let’s get a well-lit, ISO 100, on-a-tripod comparison shot of something with lots of edges, lots of grids, lots of fine detail all in focus, something around f/7 and compare that next!
The Makefile for building these images
IM=$(shell which convert) M_CROP="492x610+1783+793" L_CROP="700x850+2500+1000" CROP_SIZE="700x850" default: original_crops binned_crop median median: L.jpg $(IM) L.jpg -median 3x3 -crop $(L_CROP) -resize $(CROP_SIZE) -filter box L_Median.jpg $(IM) L.jpg -median 5x5 -crop $(L_CROP) -resize $(CROP_SIZE) -filter box L_Median5.jpg binned_crop: L.jpg $(IM) L.jpg -resize 50% -filter box -resize 200% -filter box -crop $(L_CROP) -resize $(CROP_SIZE) -filter box L_Binned.jpg original_crops: M.jpg L.jpg $(IM) M.jpg -crop $(M_CROP) -resize $(CROP_SIZE) -filter box M_Crop.jpg $(IM) L.jpg -crop $(L_CROP) -resize $(CROP_SIZE) -filter box L_Crop.jpg clean: @rm -f *Crop* @rm -f *Bin* @rm -f *Median*