I'll assume that your matrix is indeed full of booleans, like in your picture.
Each block is perfectly square, and thus can be defined by its starting coordinates and its side-length. Note also that the starting coordinates will always lie along the diagonal of the matrix, so the row and column are equal.
If you look at the picture, it is plain to see that at the start of every block, the cell immediately above (or to the left) is False. Thus we can create a list of blocks, [(coordinate,length),...], as follows:
# Find the coordinates where each block starts
starts = []
for i in range(len(myMatrix)):
if i==0:
starts.append(i)
elif not myMatrix[i,i-1]: # i.e., if the cell to the left is False
starts.append(i)
# Get the length of each block
blocks = []
for i in range(len(starts)):
thisStart = starts[i]
if i == len(starts)-1:
nextStart = len(myMatrix)
else:
nextStart = starts[i+1]
length = nextStart - thisStart
blocks.append((thisStart, length))