sexta-feira, 19 de junho de 2009

7º Congresso Brasileiro de Agroinformática - Submissão de Artigo

Semana passada meu ex-orientador e parceiro de projetos de visão computacional, Dr. Leandro Luís Galdino, e eu submetemos um artigo sobre o nosso Sistema de Classificação Automática de Grãos de Arroz (já postado aqui) no 7º Congresso Brasileiro de Agroinformática. Os trabalhos poderão ser apresentados no evento na forma oral ou pôster. Os melhores trabalhos serão premiados, além de receberem certificados.
O Congresso Brasileiro de Agroinformática é um importante evento promovido pela Associação Brasileira de Agroinformática (SBIAgro), realizado a cada dois anos. Em sua sétima edição, o SBIAgro é promovido pela Universidade Federal de Viçosa (UFV), em parceria com a Associação TI Viçosa, é será realizado entre os dias 21 e 25 de setembro de 2009, no Campus da UFV, em Viçosa (MG).
Agora é aguardar uma possivel aceitação rrs..

Site oficial do Congresso: http://www.sbiagro2009.ufv.br/

Abaixo nosso artigo:

___________________________________________________________

quinta-feira, 18 de junho de 2009

Redes Neurais Artificiais - Livro



Essa semana chegou o livro Fundamentos das Redes Neurais - Exemplos em Java do escritor Mêuser Jorge Valença, Doutor em Inteligência Computacional. Fiz o pedido via email dele: meuserv@yahoo.com.br. Ocorreu tudo ok!
O livro visa introduzir os conceitos básicos necessários sobre Redes Neurais Artificiais usados para resolução de aplicações práticas e para implementação de algoritmos de aprendizagem supervisionada da rede Perceptron, da rede ADALIDE, das redes MLP e da aprendizagem não-supervisionada (rede de Kohonen).
Pois é, assim inicio então meus estudos em Redes Neurais Artificiais, buscando desenvolver o entendimento do funcionamento desta poderosa ferramenta de Inteligência Artificial que tenho como intuito maior aplicá-la nos projetos de Visão Computacional.

segunda-feira, 15 de junho de 2009

Imagem Digital - Teoria

Uma imagem digital é considerada como uma matriz no qual os índices de linhas e colunas identificam um ponto na imagem, sendo que o respectivo valor do elemento dessa matriz identifica a intensidade (brilho) da imagem naquele ponto. A esses elementos de uma matriz digital dar-se o nome de "pixels". Na imagem abaixo vemos um exemplo de uma imagem digital:

Figura 1. Imagem Digital

Em PDI trabalhamos basicamente com 3 tipos de imagens: Imagem Colorida(3 bandas), Imagem em Escala de Cinza(1 banda) e Imagem Binária(Preto e Branca).
No caso, da imagem em escala de cinza, a intensidade dos pontos da imagem, ou seja o valor do pixel, varia numa escala entre 0 e 255, onde o 0(zero) indica a cor preta e o 255 a cor branca, tendo nesse intervalo o intensidade do cinza, como mostra a figura abaixo:

Figura 2. Níveis de intensidade de Cinza

Há outro padrão de se trabalhar a intensidade do pixel, que é o intervalo entre 0 - 1, por exemplo: 0.1, 0.43, onde o 0(zero) pode ser considerado como branco e o 1(um) preto. É o chamado padrão com valores continuos(fracionários), e no caso do intervalo 0-255 valores discretos (inteiros). A imagem a seguir demonstra como seria a representação de uma imagem monocromática e os valores de seus respectivos pixels:

Figura 3 . Imagem Monocromática e seus pixels

Já para imagens coloridas, ou seja, que possuem mais de uma banda de freqüências, cada banda possui sua própria função de intensidade de brilho. O caso do padrão RGB, apesar haverem outros como o HSI (hue, saturation, intensity), a imagem possui três bandas que compõem as três cores primárias, Vermelho (RED), Verde (GREEN) e Azul (BLUE).
Figura 4. Niveis de Intensidade das Bandas R,G e B.

Pode-se considerar, portanto, que uma imagem colorida é a composição de três imagens monocromáticas, denominadas, respectivamente, de banda vermelha (ou banda R), banda verde (ou banda G), e banda azul (ou banda B) e que a sobreposição destas três imagens, que individualmente são monocromáticas, compõe uma imagem colorida. E com a sobreposição/mistura de cada uma dessas cores e suas respectivas intensidades obtêm-se a formação de outras cores. Pode-se ver como esses valores trabalham na formação de novas cores acessando a opção editar cores no menu cores do paint do windows, na opção de edição personalizada.

Figura5. Imagens das Bandas R , G , B e RGB. (Orla de São Desiderio-BA)


Já no caso das imagens binárias, as opções de intensidade do pixel são apenas o preto ou branco, onde dependendo da imagem e do problema o preto pode representar o fundo da imagem e o branco os objetos ou vice-versa

Figura 6. Imagem Binaria (Orla de São Desiderio-BA)


Concluindo: Para uma imagem digital de tamanho 400x600: o pixel na posição (100,200) na "versão" em tons de cinza desta imagem tem um valor inteiro que varia de 0 a 255. Na versão binária desta imagem o mesmo pixel possui um único valor inteiro que pode ser 0 ou 255(ou 1). E na versão colorida RGB, o mesmo pixel possui 3 valores inteiros (X,Y,Z) onde cada uma das variáveis( x,y,z) possui valor entre 0 e 255, por exemplo, de tem como valor (100,230,90)=(X, Y, Z)=(R, G, B).

____________________________________________________________________

segunda-feira, 8 de junho de 2009

"As Ferramentas"

Bem, para o desenvolvimento de trabalhos em visão computacional tenho utilizado há certa de 4 anos a linguagem java juntamente com a JAI(Java Advanced Imaging) uma API voltada para tratamento avançado de imagens em Java, sendo desenvolvida a partir da API básica Java 2D. Porém, há alguns meses tenho estudado o desenvolvimento em linguagem C/C++ através da biblioteca OpenCV(Open Source Computer Vision Library) que consiste numa coleção de funções C e algumas classes C++ que implementam alguns algoritmos bastante conhecidos, relativos ao processamento de imagem. Outra Linguagem/biblioteca/ferramenta muito utilizada é o MatLab (MATrix LABoratory), um software interativo de alta performance voltado inicialmente para o calculo numérico e a fazer cálculos com matrizes, mas que possui uma toolbox (extensão) para o processamento de imagens.

Não vou entrar em discussão de qual API ou Linguagem é a melhor, mesmo porque tenho tido ainda pouco contato com a OpenCV, e tão pouco com MatLAb, e por entender que, cada uma dessas "ferramentas" apresentam suas vantagens de acordo com a necessidade de cada projeto e problema. O meu intuito aqui, é tentar repassar um pouco do conhecimento já adquirido e do aprendizado continuo. O que farei então? Ao longo de alguns posts, por exemplo, estarei postando alguns conceitos básicos de Processamento Digital de Imagens e Visão Computacional e na parte pratica, tentarei mostrar exemplos implementados em JAVA/JAI e CC++/OpenCV, e quem sabe em MatLab também. É isso....


Requerimentos:

Java:
JDK 1.5 (ou superior) e jai-1_1_3-lib-i586-jdk ( Para compilar os fontes)
JRE 1.5(ou superior) e jai-1_1_3-lib-i586-jre (Para executar os programas)
https://jai.dev.java.net/binary-builds.html

C/C++:
DevC++(IDE/Compilador) e OpenCV_1.1

Guia de Instalação da OpenCV no DevC++ :
http://opencv.willowgarage.com/wiki/DevCpp

____________________________________________________________________


sexta-feira, 5 de junho de 2009

Projetos Desenvolvidos

Abaixo está relacionado alguns projetos que participei envolvendo
o processamento de imagens:

Sistema para Análise de Anticorpos antinucleares
presentes em células HEp-2:

















Descrição:
Exame para pesquisa de anticorpos antinúcleo (ANA) pela técnica de imunofluorescência indireta (IFI), também conhecido como fator antinúcleo (FAN), hoje denominado “pesquisa de anticorpos contra antígenos celulares” (PAAC) em soro de pacientes com suspeita de doença autoimune.

Após a captura das imagens das Celulas a análise para um possível diagnostico é atualmente realizada com a análise ócular dessas imagens feita pelos médicos especialistas, que receberam treinamento para tal. Nesse procedimento laboratorial exige-se a captura de várias imagens. Com esse Sistema é necessaria apenas a captura de uma imagem para que um diagnóstico pré-liminar seja dado automaticamente pelo ssistema.


Sistema para Classificação Automatica de Grãos de Arroz:

















Descrição:

Um dos problemas que a Embrapa tem enfrentado é na questão das medições físicas dos grãos de arroz. Este trabalho visou mostrar uma solução para essa problemática, um software que utiliza técnicas de processamento de imagens digitais desenvolvido com o intuito de gerar essa medição através de um processo automático onde o programa irá identificar cada grão através de imagens digitais, determinando no fim o respectivo comprimento e largura de cada grão. Para desenvolvimento do software de identificação do grão do arroz foi utilizada a linguagem de programação JAVA e a API JAI(Java Advanced Image) para trabalhar com imagens digitais

_____________________________________________________________________

O que é visão computacional?

Visão por computador (Visão Computacional) é a área da ciência que se dedica a desenvolver teorias e métodos voltados à extração automática de informações úteis contidas em imagens. Tais imagens são capturadas por dispositivos imageadores, como câmera de vídeo, scanner, etc.

Por este motivo, a recente evolução tecnológica dos computadores e dispositivos imageadores, a preços acessíveis, tem possibilitado a crescente aplicação de visão computacional nas mais diversas áreas. Como ilustrações em visão computacional podemos citar: medição computadorizada do dimensional de peças, rastreio de alvos para detecção de intrusos, análise morfológica de células, reconhecimento e sintetização de faces humanas, entre outras.

fonte: http://www.din.uem.br/~ia/a_multid/visao/oque.htm