I have a 2d-array (28 x 28) that has boolean values.
array([[False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, True, True,
True, False, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, True, True, True,
True, True, False, False, False, False, False, False, False,
False],
[False, False, False, False, False, False, False, False, False,
False, False, False, False, False, True, True, True, True,
True, True, False, False, False, False, False, False, False,
False],
...
This represents an image of a digit. In order to stretch this image so that the horizontal and vertical range of ink pixels runs the full horizontal/vertical range of the box.
Below are the steps that I am trying to take:
1. Find the leftmost (x_min) and the rightmost (x_max) pixels that have ink (after thresholding).
2. Find the topmost (y_min) and bottom-most (y_max) pixels similarly.
3. Find the centerpoint (x,y) by taking the mean of x_min and x_max and y_min and y_max respectively.
4. Now, the 20x20 bounding is defined as img[y_center-10 : y_center + 10, x_center-10:x_center+10]
I tried to do Step 1
in a naive way, just iterating all pixels, but I know that is not the best way. What is the best way to find the left and rightmost pixel that is True
?