terça-feira, 30 de setembro de 2008

Neural Segmentation of Hands

I developed an algorithm for segmentation of objects in digital images.

I maked this algorithm because I will need do segmentation of hand in my mastering project.

This a video whose I do for show the result.



The algorithm consists in build 2 clusters, the first for mapping the object and the second for mapping the ground.

I used Self-Organizing Maps for build the clusters.

I wrote the code in Scilab, using the SIVP toolbox.

segunda-feira, 29 de setembro de 2008

PageRank - Google

O PageRank (ou aqui) de um site é um número (inteiro) de 0 a 10 que corresponde a relevância do site em toda a internet, de modo que quanto mais acessado e referenciado um site, maior seu PageRank.

Para @s leitor@s do MultiSign, eu informo que o nosso PageRank é 3, tendo em torno de 20 visitas por dia (segundo esta fonte).

Uma forma rápida, simples, fácil e prática de descobrir o PageRank de um site (ou blog) é acessar este endereço e colocar o endereço do referido site (ou blog) na caixa de texto, então depois é só clicar em "PageRank".

Seguem abaixo o PageRank de alguns sites:
  • www.orkut.com - 8
  • www.yahoo.com.br - 8
  • multisign.blogspot.com - 3
  • hypercast.info - 3
  • www.vivaolinux.com.br - 4
  • www.linux.org - 5
  • www.redhat.com - 8
  • www.microsoft.com - 9 (argh!!)
  • www.mozilla.org - 9 (yeah!!!)
  • www.google.com.br - 9
  • www.google.com - 10
Observando que o PageRank é para cada página, e não necessariamente para o domínio. Em alguns casos, vi que um determinado post de um blog tinha um PageRank maior que o do próprio blog.

Para finalizar, peço que @s leitor@s comentem os posts e referenciem o MultiSign em outros sites para aumentarmos nosso PageRank.

Lembrando que o PageRank foi desenvolvido pelo Google, não que isto influencie algo mas é só uma informação adicional.

sexta-feira, 26 de setembro de 2008

Mathematical morphology

One of most important areas in digital image processing is mathematical morphology.

It consists in max and min filters on the input image, changing the structural element (filter's mask).

Some applications of mathematical morphology are:
  • Filtering of binary images;
  • Objects resize;
  • Enhancement of specific areas.
The next images are showing the results of mathematical morphology:
Image 1: original image.

Image 2: result of original image's dilatation (max filter).

Image 3: result of original image's erosion (min filter).

The GIMP (GNU Image Manipulation Program) does these mathematical morphology operations, as showed.

Before all, I want explain the structural element. It's a sub-set from input image and its form may change depeding on the application.

For example, given a image F(x,y) and a structural element which is a squad with 3 columns and 3 rows. The cited sub-set is Struc{F(x,y)} = {F(x-1,y-1), F(x-1,y), F(x-1,y+1), F(x,y-1), F(x,y), F(x,y+1), F(x+1,y-1), F(x+1,y), F(x+1,y+1)}. The structural element defines the neighborhood for each point (x,y) on the image.

The most common forms are:
  • Squad;
  • Circle;
  • Cross;
  • Dash (diagonal, vertical or horizontal);
  • Diamond.
The max and min filters are used in dilation and erosion, respectively. But they may be used in sequence with equals or diferents structural elements, proving the opening and closing operations.

quinta-feira, 25 de setembro de 2008

Momentos centrados

Este é o primeiro post que faço sobre minhas pesquisas acerca do meu mestrado.

Para refrescar a memória dos que já sabem do que se trata o meu mestrado e para informar os leitores que vieram depois que parei de escrever sobre estas pesquisas:

Meu projeto de mestrado consiste em desenvolver um sistema de reconhecimento automático da Libras (Língua de Sinais Brasileira).

Este projeto tem as seguintes etapas:
  1. Aquisição da(s) imagem(ns) por uma webcam;
  2. Segmentação do objeto de interesse (mão);
  3. Extração de atributos da imagem;
  4. Classificação da imagem de acordo com os atributos.
Pois bem, como já coloquei em posts anteriores, a parte da segmentação está funcionando bem e eu já tenho os classificadores implementados (fiz-os na disciplina de reconhecimento de padrões).

Agora faltava apenas a parte de extração de atributos, mas eu estava estudando o livro de reconhecimento de padrões adotado na disciplina (quem quiser saber qual é o livro, pode pedir em comentário(s)) e vi algo sobre momentos centrados, e vi também que estes momentos são atributos extraídos dos objetos presentes em imagens para classificá-los.

Por fim, achei que seria interessante falar sobre os momentos centrados.

Os momentos centrados são provenientes da mecância clássica, pois consistem em momentos baseados no centro de massa dos corpos (objetos).

A equação abaixo mostra como são calculados os momentos centrados:
Em que f(x,y) é a imagem. Os termos p e q são ordens do momento, como fazemos em estatística nos momentos de 1ª (média), 2ª (variância), 3ª (curtosis), 4ª, etc.... ordem; podemos observar que estes momentos podem ser escritos até como termos de esperança matemática (olhe aqui).

Os centros de massa dos objetos (corpos) são dados pela equação abaixo:
Estes momentos centrados são descritores muito úteis, pois são invariantes a translação dos objetos, porém, observa-se que estes momentos são dependentes à rotação.

Para tornar obter descritores indendentes tanto a translação e a rotação, um pesquisador chamado M. Hu propôs as seguintes combinações dos momentos, gerando novas grandezas:


Com isto fecho o que espero ser pelo menos o material para minha qualificação de mestrado.

terça-feira, 23 de setembro de 2008

apt-get

De tanto ver tutoriais (on-line) e dicas e eu mesmo tanto falo no apt-get que resolvi fazer um post sobre este software maravilhoso.

O apt-get, da forma que me refiro, consiste em um pacote de vários aplicativos:
  • apt-cache
  • apt-extracttemplates
  • apt-key
  • apt-cdrom
  • apt-ftparchive
  • apt-mark
  • apt-config
  • apt-get
  • apt-sortpkgs
Mas de todos estes, acho que só o apt-cache e o apt-get são realmente necessários (talvez o apt-config também, mas eu nunca o usei) corriqueiramente.

Cada aplicativo por sua vez tem seus parâmetros específicos.

Parâmetros do apt-cache:
  • add
  • dump
  • madison
  • rdepends
  • showpkg
  • unmet
  • depends
  • dumpavail
  • pkgnames
  • search
  • showsrc
  • xvcg
  • dotty
  • gencaches
  • policy
  • show
  • stats
Pelos nomes é possível deduzir o que cada um (não necessariamente todos) faz, mas eu costumo usar apenas o search.

Então agora temos o comando apt-cache search *****************, em que a sequência de asteriscos (*****************) representa o que você está procurando, por exemplo vamos procurar algum programa relacionado a P2P:
Observa-se que existem vários programas disponíveis envolvendo P2P.

O apt-cache mostra tanto o nome do programa como uma pequena descrição do mesmo.

Agora para instalar o programa nós usamos o apt-get.

Os possíveis parâmetros do apt-get:
  • autoclean
  • check
  • dselect-upgrade
  • remove
  • upgrade
  • autoremove
  • clean
  • install
  • source
  • build-dep
  • dist-upgrade
  • purge
  • update
Neste caso, eu costumo usar os comandos remove, upgrade, updade e install.

O remove vai desinstalar o software indicado.

O upgrade vai atualizar o software indicado.

O update vai atualizar a lista de softwares disponível.

O install vai instalar o software indicado.

O apt-get também suporta manipular vários softwares al mesmo tempo.

O comando update é feito da seguinte forma:
Observando que o apt-get precisa da permissão de super-user (sudo, su, root) para ser executado (é só colocar "sudo apt-get update" no terminal).

Estes endereços que aparecem são os repositórios de software, no caso, do Ubuntu.

E para trabalhar com um aplicativo, seja para instalar, atualizar ou remover, é só digitar "sudo apt-get {parâmetro} {nome do software}" no terminal.

No caso, a gente (usuários do apt-get) costuma sudo apt-get update para atualizar a lista de softwares, depois usamos o apt-cache search {palavra relacionada ao software desejado} para identificar o que buscamos (a busca também é feita na descrição do software) em seguida usamos o sudo apt-get install {software desejado} para instalarmos o software nosso de cada dia.

segunda-feira, 22 de setembro de 2008

Auto-image

I saw this video today.




The elephant makes a fantastic picture by itself.

Comment about your opinion.

Auto-imagem

Hoje vi este vídeo e não poderia deixar de postá-lo:




Trata-se de um elefante que faz uma pintura fantástica.

O vídeo é longo mas vale a pena assistir até o final.

sábado, 20 de setembro de 2008

De onde vem o resto da energia?

Assista o vídeo abaixo:



Agora pensemos:

O inventor diz que com 400Watts consegue gerar 1600Watts, de onde vem os outros 1200Watts?

Com as conversões de energia, sempre existem perdas então qualquer forma de converter a energia elétrica em outra natureza (energia mecânica ou térmica) e depois voltar para energia elétrica iria ter 2 vezes perdas.

Uma solução poderia ser usar buffers de corrente, aí poderia-se manter a tensão (220V ~ 60Hz, por exemplo) e aumentar a capacidade de corrente, pois a potência é o produto da tensão pela corrente, mas neste caso não fica claro o que poderia ser o buffer de corrente.

Em eletrônica (circuitos de baixa potência, como celulares e computadores) os buffers de correntes são apenas transistores operando em regiões de saturação.

Enfim, caso o inventor venha a ler este post, eu ficaria muito feliz se ele entrasse em contato para explicar como funciona o multiplicador de energia.

sexta-feira, 19 de setembro de 2008

OPP - Isto é engenharia social!

Hoje vi este site e tomei conhecimento do OPP (Open Prosthetics Project) que é um projeto de desenvolvimento tecnológico open-source.

O foco deste projeto é desenvolver prótestes artificiais (braços e pernas, por exemplo) em um modelo aberto e colaborativo, como já existe com o software livre.

A idéia é cada um colaborar com o que puder, seja doações financeiras ou conhecimentos e/ou recursos em engenharia, medicina, computação, marketing, etc....

Como o modelo de desenvolvimento é aberto, toda a informação desenvolvida está (e estará) disponível para qualquer pessoa no planeta a distância de um clique do mouse.

Como o modelo de desenvolvimento é colaborativo, as pessoas envolvidas poderão trocar experiências e enriquecer cada vez mais as próteses, tornando-as mais eficazes e eficientes (caso alguém queira saber a diferença entre eficácia e eficiência, é só fazer um comentário perguntando), além de baratear o custo para o usuário final.

O próprio fundador do OPP perdeu sua mão na Guerra do Iraque e foi isto que o motivou a criar o projeto.

Por fim, convido a todos os leitores do MultiSign que ao menos conheçam o trabalho que está sendo desenvolvido, é só clicar aqui.

Situação destes dias

Aos leitores do MultiSign que acompanharam o blog estes dias, devem ter percebido que deste quarta-feira eu não postei nada, pois bem, eu estava com uns problemas de saúde (comecei a sentir-me mal na terça (16/09) a tarde) mas agora está tudo bem, deve ter sido algo que comi, fui conversar com um médico e ele confirmou que deve ter sido isto mesmo.

Fiquei feliz em ver que mesmo sem as postagens a frequência de visitas não teve grandes alterações, ontem mesmo teve mais de 20 visitas (foram 21).

Mudando de assunto: sobre os posts que tratei de GPIB, eu os fiz como parte de um estudo que estou fazendo para um professor aqui na UFC.

Enfim, é só isto mesmo. Em breve espero poder voltar a ativa como antes e fazer posts interessantes. Para isto, peço também a colaboração dos leitores com comentários e votos nas enquetes.

terça-feira, 16 de setembro de 2008

GPIB - General Purpose Interface Bus

GPIB (General Purpose Interface Bus) is a communication interface between diferents devices, as USB, serial port, parallel port, etc....

The National Instrument$ and Angilent ($$$) support this interface (developing drivers and aplications), this is the first and problably the last post that I do about anything that use proprietary software, I want only show that is possible use free software in this type of situation.

So, the GPIB was developed by cientists, for your devices, and they earn rates about 5MB/s (yes, 5 Mega Bytes). Few time later the IEEE maked the standard IEEE-488.

This standard is very commom is devices of materials analysis, radio-frequency, etc.... those are used in "down engeneering".

But the Scilab has a toolbox for GPIB systems (here) and it works on GNU/Linux (if the toolbox doesn't work on GNU/Linux I don't make this post)!

About the GPIB:
  • Supports until 32 devices simultaneously;
  • In a GPIB network exists 3 types of elements: talkers, listeners and controllers;
  • Each device can be acessed and controlled individually.
For GNU/Linux developers, exists free libraries for GPIB developing to C/C++ and Python languages.

I'm having sucess with Scilab and GPIB.

Finishing: we don't need use MetLab or LambVIEW or any proprietary software (they smell badly!).

domingo, 14 de setembro de 2008

Thanks

I'm doing this post because I want really thanks the MultiSign's readers.

By this source, the MultiSign reached 791 visits until yesterday (Aug 13, finishing one month since the starting of count), then the average of visits is 25.516129032258064 per day (remember that August has 31 days).

I would ask that the readers comment the posts, because I do each post for you.

Agradecimento

Venho por meio deste post fazer um sincero agradecimento aos leitores do blog.

Segundo esta fonte, o MultiSign alcançou 791 visitas até ontem (fechando 1 mês desde o começo da contagem), obtendo assim uma média de 25,516129032258064 visitas por dia (lembrando que agosto tem 31 dias).

Sinto que neste período houveram pouquíssimos comentários, então peço (novamente) que os leitores comentem os posts para enriquecermos o MultiSign.

quinta-feira, 11 de setembro de 2008

GPIB - Interface de Uso Geral

GPIB (General Purpose Interface Bus) é uma interface de comunicação entre dispositivos, como a USB, paralela, serial, PS2, etc....

Esta interface é suportada (tem como suporte) pela National Instrument$ e a Agilent ($$$), este é o primeiro e se possível último post que faço de algo que usa software proprietário aqui no MultiSign, minha intenção é apenas mostrar que é possível resolver os problemas, por mais complexos que sejam, com o software livre.

Pois bem, a GPIB foi desenvolvida por um pesquisador e como ele conseguia taxas de transmissão muito altas (da ordem de 5MB/s - é byte mesmo) em pouco tempo o IEEE adotou como um dos padrões de comunicação entre dispositivos.

Atualmente esta interface é muito usada para dispositivos de análise de materiais, rádio-frequência, etc... que são usados por "engenharia de base".

Algo que me deixou muito motivado a fazer este post foi a existência de uma toolbox de comunicação GPIB para o Scilab (aqui) e esta mostrou-se muito funcional, e ainda existe uma versão para GNU/Linux (se não existisse eu não estaria fazendo este post).

Falando um pouco do padrão GPIB:
  • este é capaz de suportar até 32 dispositivos ao mesmo tempo;
  • existem 3 tipos de elementos em uma rede GPIB: controladores (controllers), ouvintes (listeners) e emissores (talkers);
  • cada dispositivo pode ser acessado e controlado independentemente.

É isso mesmo, agora aos usuários da interface GPIB: existem soluções livres para usar a interface, existem até bibliotecas de C/C++ e Python para GNU/Linux destinadas a fazer o uso e controle de dispositivos GPIB.

Resumindo: não precisamos mais de LambVIEW nem MetLab nem qualquer um destes softwares proprietários que não valem nada!


quarta-feira, 10 de setembro de 2008

Agora é oficial! ODF é padrão para documentos públicos oficiais

Conforme esta informação, o Governo Brasileiro assinou protocolo para uso do padrão ODF (Open Document Format) nos documentos públicos oficiais.

Aos que não sabem, o padrão ODF é aberto, usado pelos ambientes OpenOffice e BrOffice, por exemplo.

Segundo a fonte da informação, muitas entidades esperavam que o governo adotasse o padrão OXML (desenvolvido pela Mico$oft).

Esta vitória para o padrão aberto, portanto também para o software livre, mostra que o nosso país está dando seus passos em direção a independência tecnológica e intelectual. Com a adoção de padrões abertos, o nosso país passa a não depender de tecnologia de fora.

Decisões como esta, que repercutem em mudanças no hábito das pessoas, são sempre mal vistas, porém esta adoção pelo padrão aberto fará com que as pessoas acostumem-se em usar este modelo e os aplicativos (provavelmente livres) que irão manipular os arquivos, como o OpenOffice e o BrOffice.


terça-feira, 9 de setembro de 2008

Denúncia! - É isso mesmo!

Ontem fiquei muito feliz em ver este site.

Deixem-me dizer do que se trata, caso ainda não tenha clicado sobre o link. Este site é um serviço de denúncia anônima de uso de softwares piratas, ou seja qualquer pessoa (um de nós) pode denunciar uma empresa, pessoa ou site que esteja usando e/ou promovendo o uso de software pirata.

Pelo que entendi, a denúncia chega a um grupo de advogados e eu acredito que eles irão investigar a entidade denunciada.

A denúncia deve ser bem detalhada, constando várias informações sobre a empresa, porém não é necessário que o denunciante se identifique (lógico, a denúncia é anônima).

Este serviço atende apenas a América Latina:
  • Argentina
  • Bolívia
  • Brasil
  • Chile
  • Colombia
  • Costa Rica
  • El Salvador Equador
  • Guatemala
  • México
  • Panamá
  • Paraguai
  • Peru
  • Porto Rico
  • República Dominicana
  • Uruguai
  • Venezuela
Espero que este site faça o seu trabalho, pois a pirataria de software, no mundo inteiro, impede o crescimento local, já que pirataria implica em continuar usando os mesmos sistemas e impedir o desenvolvimento do mercado de software local.

Se cada região, geográfica mesmo, tivesse seu próprio pólo de desenvolvimento de software, e todo este software desenvolvido fosse livre não existiria pirataria, milhares de empregos seriam gerados e os produtos e serviços que usam estes softwares seriam muito mais acessíveis, pois não haveria custo excessivo na aquisição dos softwares.

sábado, 6 de setembro de 2008

Universidades e Software Livre

Hoje vi este artigo e achei muito interessante.

O autor, conhecido como Mad Dog, faz críticas as universidades que dependem intensionalmente de software proprietário. Também acho ridículo que as universidades ensinem os futuros profissionais (alunos) a usar algum software específico ao invés de estimulá-los a pensar e estimular seus espíritos criativos, pois limitando o ensino a um determinado aplicativo, ainda mais quando este é proprietário, o aluno limita-se aos recursos deste aplicativo, porém quando o software livre é estimulado, naturalmente o aluno desenvolve o espírio de pesquisar e tomar iniciativa de criar, pois esta é a filosofia do software livre.

Aqui na UFC é comum vermos professores e alunos alienados aos mais diversos sistemas a começar pelo M$ Ruindow$, passando pelos famosos MatLab, LabView, AutoCad, Excel (e todo o pacote M$ OFFice), M$ Vi$ual $tudio, etc..... até chegar aos aplicativos específicos como Code Compo$er $tudio, Proteu$, Allegro, etc.... e isso só se tratando das engenharias, agora pensemos nas áreas de ciências exatas e da terra (matemática, computação, física, química, biologia, geologia, etc....) e as ciências humanas e jurídicas, que normalmente são pessoas que não têm estímulo a explorar a informática (sem querer desmerecer ninguém).

Enfim, mas atualmente existem muitas instituições em que cursos inteiros são lencionados sem prender nenhum aluno a nenhum software proprietário, cito como exemplo a Computação da UFPR que é a prova que é possível ter um curso completo e de alto nível apenas com software livre.

sexta-feira, 5 de setembro de 2008

Conversa sobre redes neurais

Tenho um professor aqui na UFC que lenciona a disciplina de ICA (Inteligência Computacional Aplicada), dentre outras.

Este professor é especialista em redes neurais e sempre procura transmitir o possível de sua experiência aos alunos.

Aqui, neste post, pretendo fazer o mesmo: compartilhar um pouco das minhas experiências com redes neurais, em especial a MLP (Multi-Layer Perceptron).

Começando, digo que redes neurais são aproximadores de funções de um espaço n-dimensional em um espaço m-dimensional.

O espaço n-dimensional (domínio da função) é o espaço de entrada da rede e o m-dimensional (contra-domínio da função) é a saída da rede.

Por exemplo, para a identificação de um sistema elétrico, vamos supor que a entrada da rede seja tensão, corrente e impedância e a saída é uma de 3 classes de sistemas (predominantemente resistivo, capacitivo ou indutivo). Neste caso para cada elemento (V, I, Z) de entrada temos uma saída (S1, S2, S3) associada. A saída pode ser discreta ou contínua, no exemplo apresentado a saída pode ser a que classe pertence o sistema ou o grau de presença de cada tipo de elemento.

Uma aplicação interessante é a previsão de séries temporais, em que a rede neural "prevê o futuro" com base no passado. Neste caso, a entrada da rede podem ser n valores assumidos pela função no passado e a saída os m valores futuros. Para se prever o próximo elemento de uma função, pode-se por exemplo tomar 10 elementos anteriores e extimar o próximo a partir deles.

Limitando-nos as redes supervisionadas, dentre as quais está a MLP, a questão de aplicar a rede neural é o seguinte:
  1. Definir o problema e seus parâmetros (entrada(s) e saída(s));
  2. Projetar a arquitetura da rede neural, no caso da MLP consiste em definir os parâmetros da rede (taxa de aprendizagem), quantidade de camadas e número de neurônios por camada;
  3. Tomar dados conhecidos do problema, ou seja montar um conjunto de dados conhecido para o treinamento da rede neural, com as entradas e saídas respectivas;
  4. Realizar o treinamento da rede, em que para cada entrada é apresentada a saída desejada e assim a rede vai se adaptando ao problema;
  5. Tomar novos dados para testar (validar) a rede neural, os dados de treinamento não podem estar presentes na validação da rede neural.
Algumas dicas para o treinamento da rede neural:
  • Usar funções de ativação suaves;
  • Gerar valores de erro grandes, isto acelera a aprendizagem;
  • Usar taxas de aprendizagem baixas (da ordem de 0,001) para que a rede neural possa ajustar-se com maior precisão à função que está sendo mapeada;
  • Explorar a solução das redes neurais mais simples, começando sem camada oculta, depois com 1 camada oculta e por fim 2 camadas ocultas.

Acho que isto é tudo por enquanto. Depois faço novas postagens sobre redes neurais, se possível mais técnicas

E para fechar, o Scilab tem toolboxes de várias ferramentas que podem ser de grande ajuda no projeto de redes neurais.

quarta-feira, 3 de setembro de 2008

Chrome - Google Web Browser

Vi hoje o Chrome, que é um web browser desenvolvido pelo Google.

Pelos comentários que vi (aqui) achei que seria interessante testar.

Depois de instalar, senti umas diferenças. Abaixo segue a tela inicial do Chrome.

Adiantando aos que se interessarem em instalar o Chrome, ele reconhece todos os dados do Mozilla Firefox tipo senhas e histórico.

Vou ficar usando o Chrome e qualquer novidade aviso aqui.

segunda-feira, 1 de setembro de 2008

GNOME Develop Enviroment

I installed the Ubuntu 8.04 on my laptop in last week and they (the laptop and the Ubuntu) are working very well together. I'm having only a problem: sound in headphones, but it's other thing.

I was searching for a IDE to GNOME, I want return to develop in C/C++ (when my teachers permit), and I found the Anjuta.

I'm not using it yet, but I found it simple and interesting. This is the start screen:

Selecting the option: New -> Project:

(The screen are in portuguese because I'm in Brazil)

See the 4 tabs: C, C++, Java and Python (providentially my favorite languages).

I liked the options of make GNOME, SDL and GTK applications, in C. I Would like develop some applications using OpenCV and OpenGL, together if possible.

Finishing, I want to present the Anjuta. I knew the KDevelop (of the KDE), but I'm working with GNOME now.