Você e seu grupo foram contratados pela empresa GenericStuff para trabalhar em um sistema de inspeção de objetos. Este sistema captura imagens contendo objetos de duas categorias: objetos com furos, e objetos sem furos. O seu trabalho é implementar um algoritmo que informe, para cada imagem capturada pelo sistema, o total de objetos na imagem, e quantos objetos com furos e sem furos a imagem contém.
Dois pixels pertencem a um mesmo objeto se forem vizinhos na vizinhança 8. Dois pixels pertencem a um mesmo buraco se forem vizinhos na vizinhança 4.
Assumam que os objetos passam sobre uma esteira rolante e uma câmera captura imagens binárias, como a ilustrada abaixo. Os objetos não se tocam nem estão sobrepostos, mas podem estar próximos uns dos outros 2.
Os objetos e furos podem ter qualquer forma ou tamanho. Caso o grupo julgue necessário, poderá fazer asserções sobre o tamanho ou forma dos objetos e dos furos.
A entrada do seu algoritmo será uma imagem capturada pelo sistema descrito acima, representada como uma imagem binária no formato PBM ASCII (PGM tipo P1). Nesta imagem, os pixels que correspondem ao fundo (aparecem como brancos na Figura 1) terão valor 0 e os pixels que correspondem aos objetos (pixels pretos da Figura 1) terão valor 1. Essa é uma forma de encarar a imagem como uma máscara, que informa 1 caso um pixel pertença ao objeto de interesse (o que seria equivalente ao booleano true) ou 0 caso contrário (aqui, seria equivalente ao false).
Como saída, seu programa retornará o total de objetos na imagem, e quantos objetos com furos e sem furos a imagem contém. O sistema deve funcionar no modo console, recebendo a imagem como entrada na linha de comando e imprimindo os dados obtidos no console. Cada grupo deve enviar no mínimo 3 imagens PBM de teste.