¿Cómo contar grupos de células iguales en una matriz 2d?

Aquí está el ejemplo (contando los negros):

entrada:

salida:

5 4 // 5 groups (4 squares each)
1 1 // 1 group containing 1 square

Por ahora, no puedo pensar en nada mejor que un doloroso para la iteración. ¿Sería posible obtener estos grupos de manera recursiva? Gracias