This article describes how under-resolved images of bar codes may be read by suitable processing. A two-dimensional image of a bar code with insufficient resolution to be able to resolve the individual bars is processed to give a high-resolution image. For this to work, the bar code (or camera) must be slightly rotated to give a fraction of a pixel offset between rows. Since the bars are straight, the offset relative to the first complete row of the bar code increases linearly with vertical position in the image. This offset between rows results in a shift in phase that is proportional to both offset and frequency. A phase image is created by Fourier transforming each row in the image, and retaining the phases. By subtracting the first row from subsequent rows of the phase image, a surface is fitted to give the offset between rows. A high-resolution image is then formed by interleaving the pixel values from rows where the offset is nearest to the new pixel spacing. This image appears blurred because of the area sampling caused by the sensor, combined with the low pass response of the camera electronics. By modeling the image capture system, the point spread function may be estimated and then removed by using inverse filtering in the frequency domain. The offset between the rows is then removed by using a linear phase filter. This allows the rows within the resultant image to be averaged to reduce noise.