As crianças são muito boas em classificar objetos e contá-los. Os computadores parecem ter mais problemas. Esta é uma versão simplificada deste problema. Você pode escrever um pequeno programa que possa classificar e contar objetos em uma imagem?
O problema: dada uma imagem contendo um ou mais círculos e retângulos, retorne 2 números inteiros com a contagem de círculos e a contagem de retângulos.
Regras
- A imagem de entrada será em preto sobre fundo branco, em qualquer formato de bitmap que você escolher.
- A largura e a altura da imagem estarão entre 100 e 1000 pixels.
- As figuras estarão totalmente contidas na imagem.
- Os números terão uma largura de linha de 1 pixel.
- As imagens não usarão anti-aliasing. Eles serão pretos apenas no branco.
- As figuras podem tocar, se cruzar ou estar dentro de outra figura.
- As figuras que se cruzam terão no máximo 4 pixels comuns.
- Os círculos terão um diâmetro de 20 pixels ou mais.
- Os lados do retângulo terão 10 ou mais pixels de comprimento.
- Você não pode usar nenhum built-in ou bibliotecas que reconheçam formas ou qualquer outra função que torne esse desafio trivial.
- Retorne ou imprima 2 números inteiros com as contagens de círculos e retângulos.
Exemplo 1
Resposta: 3 4
Exemplo 2:
Resposta: 4 13
Este é um desafio de código de golfe, portanto o programa ou função mais curto em cada idioma vencerá.
code-golf
image-processing
counting
Cavaleiro Lógico
fonte
fonte
Respostas:
PHP - 355 bytes
A contagem de bytes não inclui
'<image-url>'
.Nos dois casos de teste, os URLs que usei são
http://i.stack.imgur.com/qnIFk.png
ehttp://i.stack.imgur.com/HV9k3.png
.Conta as linhas horizontais e divide por dois para obter o número de formas. Baseia-se na observação de que os círculos têm segmentos horizontais mais curtos e os retângulos têm segmentos horizontais mais longos.
Hack admitido, não garantido que funcione para outra coisa senão os casos de teste!
Tentei girar as imagens em ± 45 ° e detectar linhas horizontais. Isso seria equivalente à verificação de linhas diagonais e melhoraria os círculos, mas não consegui encontrar um algoritmo de interpolação que deixasse as bordas limpas o suficiente para trabalhar. Por exemplo, eles podem borrar uma linha em duas linhas de pixels e atrapalhar a contagem.
fonte