Como última novidade, estou colocando o RSS do PPGETI (Programa de Pós-Graduação em Engenharia de Teleinformática da UFC).
Vou aproveitar o post para dar um over-view sobre RSS (lembrando que este é um texto "informal"):
RSS (em que enquadramos feed's) são as atualizações de um site, como no caso de blogs, cada nova postagem é uma atualização.
Cada atualização no RSS é como um tópico, contendo título (e informações como data e autor) e o texto propriamente dito.
Existem recursos em leitores de e-mail, softwares especializados (Akegrator, por exemplo) e sistemas web (como os disponíveis em blog's, tipo este).
O acesso a um RSS, para inserí-lo em um leitor de RSS, consiste no acréscimo da página em que encontra-se o RSS desejado.
Este blog tem por finalidade apresentar meus trabalhos e alguns aspectos de minha vida pessoal. Eu (editor do blog) sou engenheiro e mestre em engenharia de teleinformática, sou usuário e entusiasta de software livre, sou católico praticante e espero que o meu blog possa te ajudar.
sábado, 29 de março de 2008
sexta-feira, 28 de março de 2008
Manda mais!
Hoje vi um recado no orkut que achei interessante.
O recado falava de um serviço de armazenamento de dados gratuito, em que os arquivos não são deletados nunca e cada arquivo pode ter até 1GB.
Confiram: http://www.mandamais.com.br/
Eu estou com o RSS dele no fim da página.
O recado falava de um serviço de armazenamento de dados gratuito, em que os arquivos não são deletados nunca e cada arquivo pode ter até 1GB.
Confiram: http://www.mandamais.com.br/
Eu estou com o RSS dele no fim da página.
terça-feira, 25 de março de 2008
FISL 9.0: Estaremos lá
Assim como no ano passado, este ano terei a oportunidade de ir ao FISL em Porto Alegre - RS.
Este ano irei tentar desenvolver umas aplicações para apresentar (informalmente) no evento.
As aplicações funcionais:
Este ano irei tentar desenvolver umas aplicações para apresentar (informalmente) no evento.
As aplicações funcionais:
- Localizador de placas de veículos;
- Previsor de séries temporais;
- Canhão capaz de acertar o alvo automaticamente;
- Foguete capaz de chegar ao destino automaticamente;
- Interpolador neural de funções.
- Jogo de pedra-papel-tesoura;
- Jogo de par-ou-ímpar.
Vídeos sobre engenharia
{Momento irônico}
Segue o vídeo de uma das maiores invenções da engenharia.
Agora descubramos como identificar o "jeito" antes do hospedeiro ser totalmente dominado.
Segue o vídeo de uma das maiores invenções da engenharia.
Agora descubramos como identificar o "jeito" antes do hospedeiro ser totalmente dominado.
sábado, 22 de março de 2008
Testando vídeo do Youtube
Hoje encontrei umas formas de postar vídeos do YouTube. Vamos aos testes:
Colocar youtube entre colchetes, código do vídeo (letras e símbolos após "v=") e /youtube entre colchetes.
[ youtube ]EYKuBmaJoZM[ /youtube ]
Copiar e colar o conteúdo da caixa de texto embed no vídeo do youtube desejado.
Colocar YouTube:código do vídeo entre colchetes
[YouTube:EYKuBmaJoZM]
Colocar youtube entre colchetes, código do vídeo (letras e símbolos após "v=") e /youtube entre colchetes.
[ youtube ]EYKuBmaJoZM[ /youtube ]
Copiar e colar o conteúdo da caixa de texto embed no vídeo do youtube desejado.
Colocar YouTube:código do vídeo entre colchetes
[YouTube:EYKuBmaJoZM]
sexta-feira, 21 de março de 2008
Função Delta de Dirac
Tomando um sistema (analógico) qualquer conforme a figura abaixo.
Supondo que a entrada x(t) seja um impulso (Função Delta de Dirac) delta(t).
A função impulso é definida nula para t diferente de 0 e de valor infinito para t em 0. De modo que a área sob a curva seja unitária.
Fazendo a Transformada de Fourier da entrada:
observa-se que esta compreende todas as frequências do expectro. Pelo princípio da superposição, a saída será equivalente a somar a saída para cada frequência, de modo que quando a entrada do sistema é um impulso, a saída do sistema contêm informação sobre todas as possíveis entradas. Esta saída é chamada de resposta ao impulso do sistema h(t).
Como apresentado, a saída h(t) apresenta a sobreposição de todas as saídas possíveis.
Supondo que a entrada x(t) seja um impulso (Função Delta de Dirac) delta(t).
A função impulso é definida nula para t diferente de 0 e de valor infinito para t em 0. De modo que a área sob a curva seja unitária.
Fazendo a Transformada de Fourier da entrada:
observa-se que esta compreende todas as frequências do expectro. Pelo princípio da superposição, a saída será equivalente a somar a saída para cada frequência, de modo que quando a entrada do sistema é um impulso, a saída do sistema contêm informação sobre todas as possíveis entradas. Esta saída é chamada de resposta ao impulso do sistema h(t).
Como apresentado, a saída h(t) apresenta a sobreposição de todas as saídas possíveis.
quinta-feira, 20 de março de 2008
Informações sobre o blog
Hoje inseri o campo de vídeos do YouTube. Estes vídeos são de minha autoria.
Quando eu participar de algum evento, onde fizer filmagens, irei colocar os vídeos no YouTube e, por consequência, estes estarão sendo disponibilzados aqui no MultiSign.
Os interessados em acompanhar o blog mas não podem olhar frequentemente, existe a opção de assinar o blog (no final da página: {Assinar: Postagens (Atom)}, acima da logo do blogger). Quem quiser inserir ou referenciar informações deste blog, também podem ficar a vontade para fazê-lo.
Hoje também passei a assinar o RSS de uns sites que são relacionados aos temas tratados no MultiSign (tecnologia, informática, GNU/Linux, etc....).
Irei colocar os RSS's no final da página para não "poluir" o cabeçalho e o espaço central com muita informação.
Quando eu participar de algum evento, onde fizer filmagens, irei colocar os vídeos no YouTube e, por consequência, estes estarão sendo disponibilzados aqui no MultiSign.
Os interessados em acompanhar o blog mas não podem olhar frequentemente, existe a opção de assinar o blog (no final da página: {Assinar: Postagens (Atom)}, acima da logo do blogger). Quem quiser inserir ou referenciar informações deste blog, também podem ficar a vontade para fazê-lo.
Hoje também passei a assinar o RSS de uns sites que são relacionados aos temas tratados no MultiSign (tecnologia, informática, GNU/Linux, etc....).
Irei colocar os RSS's no final da página para não "poluir" o cabeçalho e o espaço central com muita informação.
quarta-feira, 19 de março de 2008
Morfologia matemática
Vou apresentar uma técnica em processamento digital de imagens que está "na moda" aqui na UFC: a Morfologia Matemática.
A morfologia tem várias aplicações, por exemplo:
Antes de explicar como a morfologia é implementada, faz-se necessário definir o que é o elemento estruturante.
Elemento estruturante: sub-domínio sobre a imagem cuja forma é definida de acordo com a necessidade e possibilidade do problema.
Para exemplificar, tomemos uma imagem Img, então definimos um elemento estruturante quadrado de lado igual a 3 pixels.
Então o sub-domínio define os seguintes pontos em torno de um ponto genérico (x,y): Strc(Img(x,y)) = {Img(x-1,y-1), Img(x-1,y), Img(x-1,y+1), Img(x,y-1), Img(x,y), Img(x,y+1), Img(x+1,y-1), Img(x+1,y), Img(x+1,y+1)}.
Os elementos estruturantes podem tomar qualquer forma, sendo as mais usadas:
A dilatação consiste na aplicação de um filtro de máximo sobre a imagem.
A erosão consiste na aplicação de um filtro de mínimo sobre a imagem.
A morfologia tem várias aplicações, por exemplo:
- Filtragem em imagens binarizadas;
- Redimensionamento de objetos;
- Evidenciamento de regiões.
Figura 1: Imagem original.Figura 2: Imagem após ser convertida para níveis de cinza e, em seguida, dilatada.Figura 3: Imagem após ser convertida para níveis de cinza e, em seguida, erodida.
[As imagens foram processadas pelo GIMP - GNU Image Manipulation Program.]Antes de explicar como a morfologia é implementada, faz-se necessário definir o que é o elemento estruturante.
Elemento estruturante: sub-domínio sobre a imagem cuja forma é definida de acordo com a necessidade e possibilidade do problema.
Para exemplificar, tomemos uma imagem Img, então definimos um elemento estruturante quadrado de lado igual a 3 pixels.
Então o sub-domínio define os seguintes pontos em torno de um ponto genérico (x,y): Strc(Img(x,y)) = {Img(x-1,y-1), Img(x-1,y), Img(x-1,y+1), Img(x,y-1), Img(x,y), Img(x,y+1), Img(x+1,y-1), Img(x+1,y), Img(x+1,y+1)}.
Os elementos estruturantes podem tomar qualquer forma, sendo as mais usadas:
- Quadrado;
- Círculo;
- Cruz;
- Traço (diagonal, vertical ou horizontal);
- Losango.
A dilatação consiste na aplicação de um filtro de máximo sobre a imagem.
Img(x,y) = max{Strc(Img(x,y))}
A erosão consiste na aplicação de um filtro de mínimo sobre a imagem.
Img(x,y) = min{Strc(Img(x,y))}
A combinação de erosões e dilatações seguidas e/ou alternadas gera as operações de abertura e fechamento, estas por sua vez podem ser simétricas (usando o mesmo elemento estruturante tanto na erosão quanto na dilatação) ou assimétricas (caso contrário).
A combinação de erosões e dilatações seguidas e/ou alternadas gera as operações de abertura e fechamento, estas por sua vez podem ser simétricas (usando o mesmo elemento estruturante tanto na erosão quanto na dilatação) ou assimétricas (caso contrário).
quinta-feira, 13 de março de 2008
Visão computacional no Scilab
Como vou entrar numa etapa de pesquisa, gostaria de compartilhar de alguns conhecimentos sobre Scilab e SIVP.
Para os usuários do Ubuntu (e afins), o Scilab pode ser baixado e instalado automaticamente pelo gerenciador de pacotes (apt-get, synaptic, adept, etc....), não esquecer de selecionar o scilab-doc, e o SIVP pode ser baixado pelo site: http://sivp.sourceforge.net/
Para instalar o SIVP, basta descompactá-lo e fazer a seguência de comandos no prompt (talvez seja necessário logar-se como root ou colocar o comando sudo antes dos 3 últimos comandos).:
cd{diretorio onde encontra-se o SIVP}
./configure
make
make install
Após este procedimento, o Scilab estará instalado e pronto para realizar aplicações de visão computacional.
Vale lembrar que o SIVP usa a biblioteca Open CV, a qual também pode ser baixada pelo gerenciador de pacotes.
Antes de qualquer coisa, instale o camorama (também pelo gerenciador de pacotes) e teste sua webcam.
A tela inicial do Scilab é a seguinte, onde o botão de toolboxes está em destaque:
Então é só clicar no botão de toolboxes e selecionar a SIVP.
O código a seguir é uma sugestão de primeira aplicação (envolvendo a webcam).
// Codigo para visualizacao de imagens provenientes da webcam
Cam = camopen(); // abre a webcam
nFrames = 1000; // determina quantos frames serao capturados
for n = 1:nFrames, // laco principal
im = avireadframe(Cam); // leitura do frame pela webcam e armazenamento da imagem na variavel im (como uma matriz de vetores RGB)
imshow(im); // apresentacao da imagem no screen
end;
A partir deste exemplo é possível qualquer aplicação com a webcam.
Para os usuários do Ubuntu (e afins), o Scilab pode ser baixado e instalado automaticamente pelo gerenciador de pacotes (apt-get, synaptic, adept, etc....), não esquecer de selecionar o scilab-doc, e o SIVP pode ser baixado pelo site: http://sivp.sourceforge.net/
Para instalar o SIVP, basta descompactá-lo e fazer a seguência de comandos no prompt (talvez seja necessário logar-se como root ou colocar o comando sudo antes dos 3 últimos comandos).:
cd
./configure
make
make install
Antes de qualquer coisa, instale o camorama (também pelo gerenciador de pacotes) e teste sua webcam.
A tela inicial do Scilab é a seguinte, onde o botão de toolboxes está em destaque:
Então é só clicar no botão de toolboxes e selecionar a SIVP.
O código a seguir é uma sugestão de primeira aplicação (envolvendo a webcam).
// Codigo para visualizacao de imagens provenientes da webcam
Cam = camopen(); // abre a webcam
nFrames = 1000; // determina quantos frames serao capturados
for n = 1:nFrames, // laco principal
im = avireadframe(Cam); // leitura do frame pela webcam e armazenamento da imagem na variavel im (como uma matriz de vetores RGB)
imshow(im); // apresentacao da imagem no screen
end;
A partir deste exemplo é possível qualquer aplicação com a webcam.
Inserção de novas técnicas
Como a segmentação das mãos por limiarização não estava fornecendo resultados satisfatórios em casos suficientes, decidi por usar outras técnicas conjuntamente a limiarização.
A idéia que surgiu foi usar contornos ativos (snakes) para segmentar as mãos.
Neste caso surge alguns problemas:
Segundo o que sei a respeito, Snakes é semelhante aos mapas de Kohonen (que eu tenho uma experiência considerável) em que os dados (neste caso, a imagem) guia a organização da estrutura, como na figura abaixo (fonte: http://www.uib.no/med/avd/miapr/arvid/MOD3_2002/Konturdeteksjon/)
Enfim, este fim de semana devo iniciar os estudos sobre os contornos ativos.
A idéia que surgiu foi usar contornos ativos (snakes) para segmentar as mãos.
Neste caso surge alguns problemas:
- determinar um ponto que pertença a mão para inicializar o algoritmo;
- descobrir se existe alguma toolbox (ou similar) para o Scilab que faça a implementação do algoritmo;
- o tempo de estudo, pois não conheço a fundo o algoritmo.
Segundo o que sei a respeito, Snakes é semelhante aos mapas de Kohonen (que eu tenho uma experiência considerável) em que os dados (neste caso, a imagem) guia a organização da estrutura, como na figura abaixo (fonte: http://www.uib.no/med/avd/miapr/arvid/MOD3_2002/Konturdeteksjon/)
Enfim, este fim de semana devo iniciar os estudos sobre os contornos ativos.
quinta-feira, 6 de março de 2008
Resultados da segmentação de pele
Como os resultados obtidos não estavam satisfatórios, decidi por fazer uma análise das imagens que tenho. O resultado a seguir foi muito promissor.
Porém a maioria dos resultados não foi como o esperado, como o exemplo abaixo.
Neste caso, o fundo está no mesmo padrão da pele e existem pontos na pele que não estão incorporados.
Os valores de limiar obtidos:
limCbMax = 165;
limCbMin = 120;
limCrMax = 145;
limCrMin = 115;
Porém a maioria dos resultados não foi como o esperado, como o exemplo abaixo.
Neste caso, o fundo está no mesmo padrão da pele e existem pontos na pele que não estão incorporados.
Os valores de limiar obtidos:
limCbMax = 165;
limCbMin = 120;
limCrMax = 145;
limCrMin = 115;
terça-feira, 4 de março de 2008
Segmentação das mãos
Estou trabalhando agora na segmentação das mãos, e os resultados e as idéias estão començando a aparecer.
Minha atividade no momento consiste em encontrar pontos que pertençam a região das mãos. A figura abaixo ilustra um resultado interessante.
Na imagem superior, encontra-se o frame capturado pela câmera e na imagem inferior o frame sofreu uma equalização do histograma, em que cada valor de intensidade no canal YCbCr foi normalizado de modo que o histograma resultante apresentasse o menor valor em 0 e o maior valor em 255.
Os valores usados na limiarização são: 77 < Cb < 127 e 133 < Cr < 173.
Minha atividade no momento consiste em encontrar pontos que pertençam a região das mãos. A figura abaixo ilustra um resultado interessante.
Na imagem superior, encontra-se o frame capturado pela câmera e na imagem inferior o frame sofreu uma equalização do histograma, em que cada valor de intensidade no canal YCbCr foi normalizado de modo que o histograma resultante apresentasse o menor valor em 0 e o maior valor em 255.
Os valores usados na limiarização são: 77 < Cb < 127 e 133 < Cr < 173.
Assinar:
Postagens (Atom)