All data is topologically a matrix of bits, so it might be an idea to
pack 'b', your matrices into simple integer arrays and
map ^= onto the resulting integers to do the cleaning. The splitting could then be reduced to a question of mapping or grepping == onto the integers and you could leave the
unpack to the very end of the algorithm to return it back in matrix form.