Rendering of Punch Cards

Punch Cards have been a popular medium of data storage in the good old days of computer technology. I still have a bunch of these items at home. And once upon a day I wondered if it would still be possible, not only to write these cards, but also to read them, back into our memory ;-) This has lead to my software version of an IBM PunchCard Reader: IBM Punch Card definitions are included as 'ibmkaart.txt' (must be present):
Non ASCII: a
Non Fortran: f
Card Punch: O

    f         a f            f   f          a ffff           ff  f
    &ABCDEFGHI .<(+-JKLMNOPQR!$*);0/STUVWXYZ ,%_>^ 123456789:#@'="
   -----------------------------------------------------------------
2 | OOOOOOOOOOOOOOO                                                 | 2
1 |                OOOOOOOOOOOOOOO                                  | 1
0 |                               OOOOOOOOOOOOOOOO                  | 0
1 |  O              O              O               O                | 1
2 |   O       O      O       O      O       O       O       O       | 2
3 |    O       O      O       O      O       O       O       O      | 3
4 |     O       O      O       O      O       O       O       O     | 4
5 |      O       O      O       O      O       O       O       O    | 5
6 |       O       O      O       O      O       O       O       O   | 6
7 |        O              O              O       O       O       O  | 7
8 |         O OOOOO        O OOOOO        O OOOOOO        O OOOOOO  | 8
9 |          O              O              O               O        | 9
   -----------------------------------------------------------------
    &ABCDEFGHI .<(+-JKLMNOPQR!$*);0/STUVWXYZ ,%_>^ 123456789:#@'=?
Precautions and Limitations:
  1. Use a conventional flatbed (A4) scanner to scan the punchcards
  2. I think it's important to callibrate the scanner properly, before trying to read in any pictures (because the program employs the resolution)
  3. The background color of the (white) cards should be Black. This can be accomplished by covering them with black paper before scanning begins
  4. Cards must be scanned with their backside down as the surface which contains the data. The human-readable side should be for your eyes only ;-)
  5. More than one card can be processed simultaneously. However, punchcards should Not be mutually overlapping.
  6. All cards must be scanned in Black and White, resulting in monochrome BMP files to be processed
  7. The examples were all scanned are at 100 DPI. Therefore I am not quite certain what behaviour of the program is to be expected at other resolutions.
  8. Due to the kind of algorithm implemented, the program behaves best if there are as "many" data on the punchcard as possible. Degenerate cases - such as almost empty cards - have not been tested to a sufficient extent.