Algoritmo para contagem de objetos em imagem

Para "abobrinhas" use o " Boteco"

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor barboza » 17 Out 2008 22:54

O "Veja bem" na apresentação foi ótimo!

Só não entendi porque esta endereçando a memoria usando contadores. Isso não te limita em velocidade e acesso linear sem possibilidade de acesso randômico? Porque não usa o barramento de acesso a memoria externa?

No mais é um belo desafio e trabalho.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor styg » 18 Out 2008 11:20

haahah
putz, tava la cara?? pq nao falo comigo pow e disse q era o barboza do forum.

poseh, veja bem, é que o cara me pegou de surpresa fazendo uma pergunta daquelas.. ainda bem que eu tinha estudado a respeito dessa parte biologica, e acho que me sai bem com as perguntas.

entao cara, quanto ao endereçamento de memoria, o lpc214x nao tem acesso a memoria externa.
em velocidade nao ta limitando nao, ja que eu incremento o endereço com um pulso de clock.
ja a questao do acesso linear é que é o problema.

como eu tentei resolver 'em partes' esse problema:
- o contador na verdade só endereça de A0-17 (262144 bytes, suficiente pra armazenar uma imagem)
- de A18-20 quem controla é o proprio mcu

assim se eu quiser acessar os dados da 3 imagem (pra calculo de media) eu nao preciso correr por todos os endereços até chgar. o mcu bota a19 = 1 e ja estou na terceira imagem.
agora o acesso dos bytes de cada imagem, esses infelizmente, só linearmente.
no caso do histograma, equalizacao e binarizaçao isso nao vai influenciar, porque posso acessar sequecalmente mesmo.
só a contagem, que vou ter que otimizar o algoritmos tendo em vista essa limitaçao.

outra opção seria usar um shift register, assim ganho com randomicidade(?ta certo) mas perco um pouco em velocidade.
esta opçao era pra ser usada em conjunto com o contador, mas como ainda é um projeto academico, e isso tomaria mais tempo (que ta curto) resolvi retirar.

é isso ai ;)
Lucas
Avatar do usuário
styg
Word
 
Mensagens: 799
Registrado em: 16 Out 2006 08:24
Localização: Floripa abaixo de zero.

Mensagempor guest2003 » 18 Out 2008 12:12

Vixi,

Porque não usa um AMR7 com barramento externo ?! ele tem controlador de RAM...

LPC2212 ou 14 por exemplo... ele tem flash e ram interna que voce usaria pro seu codigo e programa normal via Jtag como vc deve estar acostumado com os LPC214x da vida... e o mais interessante, custa quase a mesma coisa !

Não sei da sua necessidade por outros perifericos (USB por exemplo) mas vale a pena dar uma olhada hein !

Ja vai faltar processamento pacas !!! e se voce ficar controlando a memoria externa via software complica mais ainda...

[]'s
http://www.sethi.com.br (Institucional)
http://www.sethi3d.com.br (Impressoras 3d)
http://www.sethi.com.br/blog (Blog Impressoras 3d)
Avatar do usuário
guest2003
Word
 
Mensagens: 746
Registrado em: 13 Out 2006 11:48
Localização: Campinas - SP

Mensagempor barboza » 18 Out 2008 14:23

Eu ia conversar com você no final, mas estava falando com o seu professor e amigos e como estava com pressa não quis interromper.

Mas nos cumprimentamos quando desceu do palco no qual estava muito nervoso. Te cuida que no TCC de verdade é pior.

Mas o trabalho esta bem encaminhado, na questão do hardware, pensaria melhor na opção de troca da CPU como o guest disse.

Como esta usando protoboard, tenho um header desse com o LPC2214 que posso lhe emprestar por um tempo, se for preciso.



Imagem
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor styg » 18 Out 2008 19:16

Entao, guest, a escolha do lpc214x foi por estar disponivel mesmo, sei que não é a melhor escolha pra tornar esse projeto num produto por exemplo, mas para projeto academico, vai ser suficiente, mesmo porque, a aplicaçao nao eh realtime entao, se demorar sei la, 10s entre o cara apertar o botao e o resultado ser apresentado, nao tem problema, pq o pessoal vai analisar o resultado.

E ainda tem a questao de tempo neh, que sempre aperta, eu to a 40 dias da entrega da monografia e ainda falta toda a parte de algoritmos, toda a construcao do prototipo, e 80% da monografia.

Sem contar que eu ja desenhei a placa para o projeto, e vou mandar produzir essa semana, ja que ela vai servir tb como kit de desenvolvimento pra materia de arm la do curso.
Sendo assim, valeu mesmo barboza, mas nao vou precisar do adaptador.

Esse LPC2214 realmente é mais interessante, por ter barramento externo, mas ja tive pesquisando um mcu mais poderoso (suficiente o bastante para viabilizar comercialmente) e o mais indicado que achei foi o AT91SAM9260 (arm9, 180MHz, interface sensor, suporte a sdram, qfp).
creio que esse va cair como uma luva.

O que voces acham desse? seria minha primeira aventura com arm9..


PS. Barboza, voce que é da Intelbras ??

PS2. Cara, eu nem tava tao nervoso assim. Eu tive é um pouco de azar, o cabo do microfone com mal contato, a falta de pratica com microfone (virava a cabeca e a mao com o mic nao), tava suando por causa da quela maldita lampada amarela em cima de mim, e o pior de tudo, o coraçao a mil, pq 5 min antes de comecar a apresentacao, me lembrei que tinha vencido o meu cartao da zona azul... dai tive que sair correndo debaixo de chuva, ir ateh o bb (nao tinha um puto na carteira) sacar, comprar outro cartao, e voltar correndo... se contar ngm acredita!!
Lucas
Avatar do usuário
styg
Word
 
Mensagens: 799
Registrado em: 16 Out 2006 08:24
Localização: Floripa abaixo de zero.

Mensagempor andre_luis » 20 Nov 2008 20:46

Sem querer interromper, hehe...

( mas é que eu tava procurando exemplos pelo título do tópico )

Um método comumente utilizado para isso é o algorítmo de correlação, que compara um padrão menor ( template ) com um maior; gerando pontos de máximos na imagem. A posição desses pontos na imagem maior, representa a localização onde foram detectados os templates na imagem maior.

Eu tava tentando achar alguma implementação usando multiplicação no domínio da DFT, mas tá difícil achar.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor Wagner de Queiroz » 20 Nov 2008 23:42

Este forum tava meio sem graças estes dias, mas agora que vi este tópico, fiquei muito contente com a qualidadee do assunto.

Jorge_Francisco escreveu:A imagem estava em escala de cinza, mas não 100%, por isso tem que GARANTIR passando para a escala GRAY. Binarizar significa colocar em dois tons, no caso preto e branco. Segmentar significa separar, no caso, separar objetos.

Aí um programinha que fiz processado na sua imagem.


Jorge, seria pedir muito compartilhar seu codigo delphi/Pascal, estou começando com este negocio de processamento de imagens, na verdade vou usar uma webcam que vai ler o numero de uma metade de peça de dominó numa esteira.

eu ainda vou brigar com o delphi para poder fazer a imagem da webcam aparecer no meu form mas acho que estudando seu código vou poder entender melhor esses tópicos de detecao de bordas, etc. etc etc.
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor andre_luis » 21 Nov 2008 08:22

Wagner,

Pelo que tenho observado na prática, o método de detecção por histograma de cores exige a apresentação de um padrão muito bem comportado ( iluminação constante, quantidade de templates na mesma proporção ) e não é capaz de detectar formas e tampouco posição.

Seria, por assim dizer uma abordagem mais estatística do que determinística, mas cada caso é um caso.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor Jorge_Francisco » 21 Nov 2008 10:30

andre_teprom escreveu:Wagner,

Pelo que tenho observado na prática, o método de detecção por histograma de cores exige a apresentação de um padrão muito bem comportado ( iluminação constante, quantidade de templates na mesma proporção ) e não é capaz de detectar formas e tampouco posição.

Seria, por assim dizer uma abordagem mais estatística do que determinística, mas cada caso é um caso.

+++


O histograma não é de cores, ele revela a distribuição ou frequência dos níveis de cinza da imagem. Quanto a iluminação, realmente influencia e muito, mas muito das vezes aplica-se um filtro que ajusta o contraste.


Wagner, vou dar uma olhadinha onde que está o código, provavelmente está no meu notebook, numa das inumeras pastas,uhauhauh. Não implementei tudo, e nem coloquei o melhor filtro de borda, foi APENAS para testar mesmo, a unica diferença é que este código está otimizado, em relação ao método PIXEL, o meu tem um velocidade 180x maior com scanline.

Dominó é fácil neh, é só um retangulo com alguns circulos, mamão com açucar. Para capturar a WebCam já tem biblioteca pronta. Qualquer coisa grita aí.

Abraço
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Wagner de Queiroz » 21 Nov 2008 11:07

Jorge_Francisco escreveu:
andre_teprom escreveu:Wagner,
Dominó é fácil neh, é só um retangulo com alguns circulos, mamão com açucar. Para capturar a WebCam já tem biblioteca pronta. Qualquer coisa grita aí.



Eu nao achei biblioteca pronta, eu usei as APIs do Windows para usar a webcam, mas apesar de funcionar, em vez de ter a imagem da webcam, eu tenho um quadro preto, embora a captura de video funcione, se tiver algum exemplo pronto eu agradeço, pq ainda apanho muito do delphi neste aspecto.


este é um exemplo do que vou capturar.

Imagem

aqui está o link para a imagem:
http://www.flickr.com/photos/wagnerdequeiroz/3048217662/
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor styg » 21 Nov 2008 12:55

bom, no meu caso, ja estou nos testes finais.

to fazendo assim,
captura->mascara->histograma->+contraste->binarização->contagem

a parte da mascara é para retirar as bordas do recipiente onde esta a amostra, para nao influenciar no resultado.

a iluminaçao realmente influencia muito, bem como o threshold na hora de binarizar.
os algoritmos que to usando, foram todos feitos na unha, olhando exemplos e teoria em livros.

andre_teprom, pra contagem to usando um algoirtmo baseado na contagem de componentes conectados (connected component labelling), que funciona belezinha.
esse algoritmo que eu fiz fornece o numero de objetos na imagem, bem como a area (em pixels) de cada um deles.

wagner, nesse teu caso, acho que voce gerando o histograma, apenas do canal RED, voce ja teria o numero de pontos, ai eh soh contar.
de repente precise aplicar uma mascara antes... mas parece tranquilo
Lucas
Avatar do usuário
styg
Word
 
Mensagens: 799
Registrado em: 16 Out 2006 08:24
Localização: Floripa abaixo de zero.

Mensagempor cmte » 21 Nov 2008 13:33

Dá uma pesquisa aqui http://www.cs.cmu.edu/~cil/v-source.html

que parece ter bastante informação útil. Eu estou procurando uma página que é bem didática, que traz passo-a-passo o que você quer (pelo que me lembro). Assim que eu achá-la posto aqui.

Abs!
cmte
Byte
 
Mensagens: 141
Registrado em: 29 Nov 2006 12:53

Anterior

Voltar para Assuntos Gerais

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x