Fatiar e reconhecer o título e o autor do livro a partir da imagem da estante


12

Estou tentando, para meus próprios objetivos de aprendizado, desenvolver uma implementação de um algoritmo que listaria livros, dada a imagem de uma estante de livros como a seguinte:

insira a descrição da imagem aqui

O primeiro passo é dividir a imagem em livros individuais.

Meu algoritmo, no Mathematica , é:

    img = ColorConvert[Import["http://i.stack.imgur.com/IaLQk.jpg"], "GrayScale"]
  • faça uma detecção básica de borda e
  • remova o texto e tente manter as linhas longas

    edge = DeleteSmallComponents[EdgeDetect[img, 3],Last[ImageDimensions[img]]/5]
    
  • remova linhas horizontais indesejadas

    lines = Sort[ImageLines[img5] /. {{0., _}, {_, _}} -> Sequence[]]
    Show[img, Graphics[{Thick, Orange, Line /@ lines}]]
    

Os resultados, porém, são menos que ótimos:

insira a descrição da imagem aqui

Minhas perguntas são:

  1. Como posso melhorar isso para obter melhores resultados?
  2. Existe uma maneira mais inteligente de fazer isso?
  3. quanto mais devo processar as imagens para aumentar a precisão na fase (mais tarde) do OCR?
  4. Como usar as informações de cores para melhorar a segmentação?

1
@OrenPinsky Não vejo o problema da segmentação: o número de "áreas de livros falsos" não é alto (posso ver apenas uma na amostra que você forneceu) e se você planeja fazer algum tipo de reconhecimento de texto como o próximo passo, que deve ser suficiente para discriminar entre livros (área tem texto) e não-books (nenhum texto)
penelope

3
@OrenPinsky, eu diria que seus resultados são ótimos. :)
Dima

Respostas:



4

Qual método você está usando para detectar as linhas? Você já experimentou o LSD ?

Aqui estão os resultados de um teste rápido que fiz usando LSD:

0,1heEughtpic1

A segunda imagem são os resultados com a mesma restrição de ângulo, mas desconsiderando os comprimentos dos segmentos: pic2

Você pode tentar brincar um pouco com isso, descobrir como escolher os melhores segmentos de linha, estendê-los para linhas e talvez obter resultados um pouco melhores do que os que você postou.


6
"Você já tentou experimentar o LSD?" Boa tentativa, FBI;)
Lorem Ipsum

O ImageLine do Mathematica é baseado na transformação Hough, e agora estou convencido (pelo feedback aqui, principalmente) de que funciona muito bem. Incomoda-me, no entanto, estar perdendo dados relevantes quando me transformar em escala de cinza, e que, neste aplicativo, os dados de cores possam (intuitivamente) ajudar um detector de borda robusto. Experimente o LSD e veja como ele funciona! (funcionou surpreendentemente bem para Steve Jobs ;-)!
Oren Pinsky

Eu vi um amigo usar LSD para detecção de porta, acho que ele ficou satisfeito com os resultados no final. Eu diria que vale a pena tentar: D
penelope

1

Você pode tentar fazer a detecção de bordas em domínios de cores individuais e depois mesclá-los, usando seu método de escolha para a detecção de bordas.

Comparado à detecção de bordas diretamente na imagem colorida, ela pode produzir melhores resultados.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.