I'm now running 2 different bit reading algorithms on the TMS chips. The first looks for differences in brightness over a tall, skinny rectangle centered on each bit. It's good at finding the bits in a TMS ROM since one bits are outlined in black, there's nothing there for zero bits, and there's a gap between each row. It rarely has false negatives, but dirt specks can cause false positives.

The 2nd method looks for the red channel's maximum value in a square centered on each bit. It rarely has false positives, but has a few false negatives. I manually check the differences between the two results and select the correct bits, then visually double-check the entire array. When I manually check, I've found that drawing small white squares for the one bits works best for me. And the bigger bits help me.