I have a program that needs to take in a photo taken by an iphone (or any kind of decent camera) of a 7×10 grid with a thick black boarder around the edges. This image can be received rotated to the right or to the left (there’s no need to worry about skew). I have an image of the grid in its original state already, but I need to get the picture that I’m taking in and rotate it to its “perfect/original” state.
Idea 1: Performance Hog/Bad Results
Threshold the picture that I receive and the perfect grid Image I already have. Compare each pixel for 0 rotation, get a total score, and save it. Do do this rotating the image of increments by 1 to 359. The lowest score is the rotation we need to get the picture back to its original state.
Idea 2: Still Unsure How To Go About Doing This
Threshold the picture that I receive and the perfect grid Image I already have. Draw a a line through the center of the picture vertically and horizontally. Find the rotation based on the black pixel count that the vertical and horizontal line passed through. This would require some sort of Trigonometry that I’m not to great with understanding.
Does anyone have any other ideas for getting this working?
Any help for pointing me in the right direction would be greatly appreciated!
Thanks!
Instead of drawing one horizontal and one vertical line, draw instead two horizontal lines (say, each at a third of the picture). Only look at the left halves of these lines and calculate how many black pixels there are on the path of each (
a1anda2). You also have to keep track of the distance between the two red lines, so the number of pixelsd.Using this notation in the figure above, your desired angle is:
alpha=atan2((a2-a1),d)and a counterclockwise rotation by
alphawill bring the white portion of the picture into proper alignment.