segunda-feira, 1 de dezembro de 2008

Sistemas Fuzzy

Para quebrar um pouco o jejum de posts (principalmente posts sobre coisas que não sejam relacionadas a opinião pessoal) vou falar um pouco sobre sistemas Fuzzy.

Sistemas Fuzzy são baseados em lógica fuzzy (lógico) e são constituidos de 3 partes:
  1. Fuzzyficador;
  2. Regras e inferência;
  3. Desfuzzyficador.

Descrição dos elementos do sistema fuzzy.

  • O Fuzzyficador consiste na interface entre as variáveis de entrada (valores numéricos) do fenômeno avaliado e o sistema fuzzy (conjuntos fuzzy).

  • As regras e inferência implementam a lógica entre a entrada e a saída, gerando um conjunto fuzzy de saída.

  • O Desfuzzyficador transforma o conjunto fuzzy de saída em um valor numérico.

Para dar um exemplo, vamos supor que nós precisamos controlar o nível de água em um tanque, porém este tanque tem uma entrada de água e uma saída de água.

Vamos criar os conjuntos fuzzy das variáveis de entrada do sistema (nível do tanque e volume de água que está saindo do tanque) e da variável de saída (volume de água que está entrando no tanque).
Obs.: A variável de saída é também chamada variável de controle.

Vamos criar algumas regras fuzzy para o sistema:

  1. Se o nível do tanque estiver baixo então tem que entrar muita água no tanque.
  2. Se estiver saindo pouca água do tanque e o nível estiver alto então tem que entrar pouca água no tanque.
  3. Se o nível da água estiver médio e estiver saindo muita água do tanque então tem que entrar muita água no tanque.
  4. Se o nível da água estiver alto e estiver saindo muita água do tanque então tem que entrar uma quantidade média de água no tanque.
Para cada variável (tanto faz ser de entrada ou saída) é interessante criar ao menos 3 conjuntos fuzzy (baixo, médio e alto, por exemplo).

O mais interessante na elaboração das regras é combinar todos os conjuntos de entrada, por exemplo (sendo x1 e x2 as variáveis de entrada e y a variável de saída):

  1. Se x1 é baixo e x2 é baixo então y é xxx.
  2. Se x1 é médio e x2 é baixo então y é xxx.
  3. Se x1 é alto e x2 é baixo então y é xxx.
  4. Se x1 é baixo e x2 é médio então y é xxx.
  5. Se x1 é médio e x2 é médio então y é xxx.
  6. Se x1 é alto e x2 é médio então y é xxx.
  7. Se x1 é baixo e x2 é alto então y é xxx.
  8. Se x1 é médio e x2 é alto então y é xxx.
  9. Se x1 é alto e x2 é alto então y é xxx.

Após a elaboração das regras, o sistema está pronto para ser implementado.

Para cada valor das variáveis de entrada, o grau de pertinência é computado e é feita uma inferência dos conjuntos fuzzy de entrada com os de saída, de modo a obter-se um conjunto fuzzy relativo a variável de saída.

Por fim, é usado algum método de desfuzzyficação para converter o conjunto fuzzy de saída em um valor numérico, como por exemplo o centro de massa do conjunto fuzzy.

Se alguém quiser, posso fazer novos posts mais detalhados.


Só para adiantar, o Scilab tem uma toolbox de lógica fuzzy (aqui).

terça-feira, 25 de novembro de 2008

Dinheiro ao Lixo no RN

Edital de prestação de contas do Cefet-RN aqui.

Um breve resumo do edital aqui.

Só para constar:
  • 800 licenças - Microsoft Office;
  • 1.000 liceças - Antivírus para Windows.
Se cada licença do M$ OFFice for R$ 125,00 temos 800 * R$ 125,00 = R$ 100.000,00.

Se cada licença de antivírus for R$ 100,00 temos 1000 * R$ 100,00 = R$ 100.000,00.

Os valores que coloquei são apenas para imaginarmos quanto dinheiro público, que deveria ser revertido em benefícios para a população, é mandado para fora do país de uma forma tão estúpida.

Se fossem compradas CPUs com este dinheiro, supondo computadores de R$ 2.000,00 (muito razoáveis por sinal) era possível comprar 100 computadores.

Só com este dinheiro, seria possível construir um bloco para qualquer fim, como didático, laboratórios, administrativo, etc... (tantas vezes vi na UFC que não construiram e/ou equiparam blocos, laboratórios, escritórios, gabinetes, etc... porque acabaram os recursos financeiros).

Mas no nosso país é assim mesmo, mais vale usar o que vem de fora do que usar algo nacional, mesmo sendo de qualidade superior e custo inferior.

quinta-feira, 20 de novembro de 2008

Empresas na Europa, Ásia e América do Norte

Vi aqui que a crise mundial está favorecendo o software livre, como muitos já sabem, pois todas as empresas estão buscando cortar gastos desnecessários (e o que seria mais inútil que pagar pelas coisas da M$??).

Enfim, o que eu gostaria de levantar é a questão: e depois da crise? Pois com a crise atual, todos estão buscando cortar gastos (aparece com o Brasil na época do apagão em 2001 ou 2002) e depois da crise, quem vai aceitar gastar mais, apesar do dinheiro voltar a entrar normalmente? (Assim como aconteceu na época do apagão, pois muitos passaram a criar novos hábitos.)

Eu acho que os efeitos da crise no sentido de colaborar com o software livre só vão aumentar, mesmo quando a crise passar.

Eu já vi em alguns lugares, tipo a Paraíba, iniciativas do tipo: migrar todos os M$ OFFice para Open Office (ou similares) nas instituições públicas (acho que eram só as federais, mas depois as outras aprendem também).

Provavelmente, a crise ainda vai durar mais um tempinho e as suas consequências vão ficar na sociedade mundial por muito tempo e além disso, muito será feito para evitar novas crises.

Quem sabe novas crises não virão por causa da pirataria de software?

sábado, 15 de novembro de 2008

Técnicas clássicas de segmentação de pele humana

Enfim algum tempo livre... Vou aproveitar e fazer um post sobre uma das etapas do meu mestrado a segmentação da pele.

Vou apenas apresentar 3 formas de segmentação de pele e alguns resultados obtidos.

A imagem de teste é apresentada a seguir.



Espaço de cores RGB:

Um pixel pertence a pele se satisfizer as condições abaixo:

R > 95
G > 40
B > 20
max {R, G, B} − min {R, G, B} > 15
|R − G| > 15
R>G
R>B

Resultado da segmentação:



Espaço de cores YCbCr:

Um pixel pertence a pele se satisfizer as condições abaixo:

77 ≤ Cb ≤ 127
133 ≤ Cr ≤ 173

Resultado da segmentação:



Espaço de cores HSV:

Um pixel pertence a pele se satisfizer as condições abaixo:

0° ≤ H ≤ 50°
0, 23 ≤ S ≤ 0, 68

Resultado da segmentação:


Antes que alguém saia por aí dizendo que um método é melhor que outro, eu digo que depende da imagem a ser segmentada.

Os algoritmos apresentados são muito dependentes da iluminação do ambiente.

Para fechar, seguem os códigos do Scilab para segmentar imagens conforme apresentado.

/////////////////////////////////////////////////////////////////////////////////////////
// Algoritmos de segmentacao de pele em imagens baseados em limiarizacao
// Universidade Federal do Ceara
// Eng. Alex
//*//*//*//*//*//*//*//*//*//*//*//*//*//*//*//*//*//*//*//*//*//*//

//// parametros das imagens

Y = 2;
Cb = 1;
Cr = 3;

H = 1;
S = 2;
V = 3;

nL = 480; // numero de linhas da imagem
nC = 640; // numero de colunas da imagem


img = im2double(imread("imagem.jpg"));

////////////////////////////////////////
//parametros em RGB //
//////////////////////////////////////

img_s = zeros(nL, nC);

for l = 1:nL,
for c = 1:nC,
p = img(l,c,:);

ps = (p(1)>95/255).*(p(2)>40/255).*(p(3)>20/255).*(max(p) - min(p)>15/255).*(abs(p(1) - p(2))>15/255).*(p(1)==max(p));
img_s(l,c) = ps;
end;
end;

imwrite(img_s, "rgb-imagem.jpg");

///////////////////////////////////
//limiares em CbCr //
/////////////////////////////////

imgYCbCr = rgb2ycbcr(img);

img_s = double(((imgYCbCr(:,:,Cb)>76/255) .* (imgYCbCr(:,:,Cb)<128/255)).*((imgycbcr(:,:,cr)>132/255) .* (imgYCbCr(:,:,Cr)<174/255)));

imwrite(img_s, "cbcr-imagem.jpg");

///////////////////////////////
//limiares em HS //
/////////////////////////////

imgHSV = rgb2hsv(img);

img_s = double((imgHSV(:,:,H)<50/360).*((imghsv(:,:,s)>0.23) .* (imgHSV(:,:,S)<0.68)));

imwrite(img_s, "hs-imagem.jpg");

terça-feira, 11 de novembro de 2008

Chegando na reta final da qualificação

Aos leitores do MultiSign que percebem minha ausência nos posts, informo que a previsão é que na próxima semana eu volte a atualizar o blog com mais frequência.

Se bem que poucas pessoas interagem com comentários e a enquete.

Vejo no mapa um monte de pontos enormes sobre o Brasil (o que indica centenas de leitores), mas poucos são os que comentam (não tenho nenhum post nem com 5 comentários) e eu vejo blogs por aí que todos os posts têm dezenas de comentários.

Mas enfim, não deixarei de fazer os posts porque meus leitores não comentam, porém se comentassem, ajudaria bastante.

E só para adiantar, os resultados que estou tendo nos testes preliminares são motivadores.

Esperem e verão.

sábado, 8 de novembro de 2008

Fuzzy Logic

The fuzzy logic is a generalization of classic sets theory.

In the classic sets theory, a element is in a set or not.

For example, the fruit's universe, the orange is in set of citric fruits, and the apple is not in that set.

But, if we analyze the people's universe and make 2 sets: rich people and poor people. If anyone has more than US$ 500,000.00, that's rich, if anyone has less than US$ 500,000.00, that's poor.

Thus, someone has US$10,000.00; US$30,000.00; US$50,000.00; US$70,000.00; US$100,000.00; US$120,000.00; US$180,000.00; US$210,000.00; US$220,000.00; US$300,000.00; US$450,000.00; US$480,000.00; US$492,000.00; US$497,000.00; US$499,800.00; US$499,930.00; US$499,981.00; US$499,996.00; US$499,999.20; US$499,999.98; that's a poor people. And other someone has US$1,000,000.00; US$980,000.00; US$840,000.00; US$770,000.00; US$680,000.00; US$610,000.00; US$590,000.00; US$540,000.00; US$510,000.00; US$508,000.00; US$502,000.00; US$501,000.00; US$500,100.00; US$500,010.00; US$500,001.00; US$500,000.10; that's a rich people.

But, let's think: if anyone has US$499,999.97 and other one has US$500,000.01 they have the same money, because US$0.04 is almost no money, but they aren't in same set.

The fuzzy logic add the pertinence concept for each element. So, all elements are in all sets, but each element has a specific pertinence in each set.

We can use fuzzy logic in any situation, solving it as a linguistic problem. If you need classify the cars in big or small, is possible do 2 fuzzy sets, if you need classify the cars in big, small and median, is possible do 3 fuzzy sets, and successively.

I did the following video of a application that I developed for A.I. class.



Any question, you can comment the post.

quinta-feira, 6 de novembro de 2008

Lógica Fuzzy

Lógica Fuzzy é uma generalização da teoria dos conjuntos clássica.

Na teoria dos conjuntos clássica, se eu tiver um determinado elemento, este elemento pode pertencer ou não a um determinado conjunto.

Por exemplo, tomando o universo das frutas, a tangerina pertence ao conjunto das frutas cítricas. A maçã não pertence ao conjunto das frutas cítricas.

Mas se tomarmos o universo das pessoas, vamos classificar as pessoas em ricas e pobres. Como critério vamos tomar o patrimônio de cada pessoa e determinar que pessoas com patrimônio acima de R$500.000,00 sejam ricas e abaixo sejam pobres, então pessoas com patrimônios de R$10.000,00; R$30.000,00; R$50.000,00; R$70.000,00; R$100.000,00; R$120.000,00; R$180.000,00; R$210.000,00; R$220.000,00; R$300.000,00; R$450.000,00; R$480.000,00; R$492.000,00; R$497.000,00; R$499.800,00; R$499.930,00; R$499.981,00; R$499.996,00; R$499.999,20; R$499.999,98 seriam pobres e pessoas com patrimônios de R$1.000.000,00; R$980.000,00; R$840.000,00; R$770.000,00; R$680.000,00; R$610.000,00; R$590.000,00; R$540.000,00; R$510.000,00; R$508.000,00; R$502.000,00; R$501.000,00; R$500.100,00; R$500.010,00; R$500.001,00; R$500.000,10 seriam ricas. Mas qual a diferença de padrimônio entre R$500.000,02 e R$499.999,97? Isto não vale nem um pirulito que vendem nas paradas de ônibus, algumas vezes nem dão o troco menor que R$0,10.

Então, para resolver o problema, a lógica fuzzy incorpora o conceito de pertinência. De modo que todos os elementos pertencem a todos os conjuntos, porém pertencem mais ou menos a um determinado conjunto.

Uma aplicação interessante da lógica fuzzy e que é presente em nosso cotidiano são os aparelhos de ar-condicionado, que têm algoritmos de lógica fuzzy embarcados para o controle da temperatura, assim evitando que a chave fique disparando toda hora, e considerando que o disparo da chave é o que gasta mais energia no aparelho de ar-condicionado, isto implica em uma economia muito considerável, por isto também que estes são os aparelhos com selo de economia de energia.

Segue um vídeo que mostra uma aplicação que fiz usando lógica fuzzy para controlar um foguete.

segunda-feira, 3 de novembro de 2008

Crianças com futuro

Olhem aqui e pensem.

Espero que tenham olhado e, principalmente, pensado.

Se crianças de 8 anos de idade têm consiência que usar Linux é melhor sem, provavelmente, nem saber a respeito de filosofia open-source e tudo o que implica o software livre.

As crianças apenas experimentaram ambos e disseram: "prefiro este!", lógico que eles pensaram em qual dos sistemas tinha mais aplicativos interessantes (tipo jogos), qual era mais fácil de usar (interface mais amigável), e demais coisas do tipo.

Eu espero que nossos adultos aprendam com estas crianças e que as crianças tornem-se adultos coerentes.

domingo, 2 de novembro de 2008

Vowels in Sign Language

I recorded some videos more to my mastering qualify (the alphabet in Libras - Brazilian Sign Language).

I'm having problems with the Scilab (it doesn't read the videos), thus I used the mplayer to extract the frames. For extract frames from a video, I use the command:

>> mplayer -vo jpeg name_of_the_file.avi

Now, I'm doing tests about skin segmentation. I tried threshold and clustering algorithms, but nothing works with all pictures that I have.
If anyone can helps me, I will be very grateful.

These are some pictures that I have:

Letter 'A':

Letter 'E':

Letter 'I':

Letter 'O':

Letter 'U':

Vogais em Libras

Eu fiz mais uns vídeos para a minha qualificação de mestrado.

Como eu estou com problemas com o Scilab (que decidiu não abrir mais arquivos de vídeo) eu extrai os frames de cada vídeo (com o mplayer), basta dar o comando:

>> mplayer -vo jpeg nome_do_arquivo.avi

Atualmente, estou avaliando algoritmos de segmentação da pele, testei alguns de limiarização e outros baseados em clustering. Nenhum deles funciona bem em todas as imagens que tenho, caso alguém se disponha a ajudar, ficarei muito grato.

Seguem algumas imagens que gerei.

Letra 'A'


Letra 'E'

Letra 'I'

Letra 'O'

Letra 'U'