Red -convertendo imagens para tons de cinza

Resolvi fazer um programa em Red (lembrando que ainda está em desenvolvimento e na versão 0.6) para converter uma imagem colorida em preto e branco (tonalidades de cinza). Basta que as cores R, G e B possuam o mesmo valor para que a imagem seja mostrada com tonalidades de cinza. Basicamente temos seis formas de conversão, cada qual apresentando resultados característicos.

Claridade

O nível do cinza será calculado como
Claridade = (max(R, G, B) + min(R, G, B)) / 2

Luminosidade

O nível do cinza será calculado como
Luminosidade = 0.21 × R + 0.72 × G + 0.07 × B

Brilho Médio

O nível do cinza será calculado como
Brilho médio = (R + G + B) / 3

Canais

Escolhemos um dos canais (R, G, B) e replicamos e seu valor nos outros dois canais. Esta técnica simula uma foto feita com um filme preto e branco com a utilização de um filtro com uma das cores dos canais. O resultado é que as cores complementares serão bloqueadas deixando passar apenas a cor do filtro. Utilizando um filtro vermelho em uma foto onde aparece o céu azul e com nuvens brancas, o céu ficará bem mais escuro entregando uma maior dramaticidade para a foto.

O efeito obtido por cada uma das técnicas pode ser visto nas imagens abaixo.
Como a parte gráfica para Mac e Linux ainda estão em desenvolvimento (a do Windows também mas está mais próxima do resultado final), o programa só roda no Windows. Futuramente deverá rodar no Mac, Linux, etc..

Casualmente o programa ficou com 100 linhas como pode ser visto abaixo.

Resultado das diferentes conversões para visualizar a diferença entre elas:

O programa ainda sofrerá alterações mas, por enquanto, era isto.

O Emacs é um ótimo SO. Só precisa de …

a. ( ) um usuário inteligente;
b. ( ) um usuário muito inteligente;
c. ( ) um usuário simpático e inteligente;
d. ( ) um usuário simpático e mega inteligente;
e. ( ) todas as alternativas anteriores.

O que o John Kitchin fez beira o surreal para quem não conhece o Emacs. Todo o curso, de cabo a rabo e com a participação dos alunos, está no Emacs + org-mode + Python + git.

Talvez fique mais fácil entender o motivo de algumas pessoas utilizarem o Emacs apenas pelo org-mode ou  trocarem de editor pelo módulo, mesmo trabalhando em áreas diversas.

Existem alternativas para deseja instalar o Emacs e acha que seria difícil configurar. Note que o Emacs30 está em fase de desenvolvimento.

Vídeo de como funciona o esquema.

Eliminando a sujeira do sensor nas fotos com o GIMP

Apesar de ser um termo comum, convém salientar que a sujeira não fica diretamente sobre o sensor e sim sobre o filtro que encontra-se em frente ao mesmo. É mais comum em câmeras reflex (que trocam as objetivas) mas também é possível verificar casos em câmeras compactas. No casos das câmeras reflex, o mais indicado é realizar uma limpeza. Se a sujeira não foi detectada  antes e saiu nas fotos, vejamos alguns métodos para retirá-las utilizando o GIMP.

Exemplo de uma imagem com manchas da sujeira que depositou-se no interior da câmera:

gimp01.jpg

Os círculos indicam claramente a identificação de alguns pontos de sujeira na imagem. Uma outra observação: O meu GIMP está em inglês apenas por facilidade, já que a grande maioria dos tutoriais na internet também estão em inglês. Facilita muito na hora de localizar as instruções informadas e não ter que depender das traduções e posição dos comandos no menu.

1º : Healing Tool



gimp02.jpg

Escolhe-se a ferramenta, o pincel (Brush) adequado, seleciona-se uma área de origem (limpa) semelhante a que encontra-se a sujeira pressionado Ctrl e clicando sobre a mesma. Após, clique sobre o ponto de sujeira e ele desaparecerá.

gimp03.jpg

O método funciona bem na maioria dos casos apesar da necessidade de selecionar-se novas áreas compatíveis para a eliminação de pontos em outras áreas da imagem.

2º: Resynthesizer

Uma das finalidades do resynthesizer é a remoção de objetos em imagens recriando a parte excluída baseado nas áreas ao redor. Como uso Linux, baixei do github, compilei e instalei. Deve ter versões prontas para Windows e diversas distribuições do Linux. As versões novas possuem plugins em  Python que facilitam algumas operações (a versão antiga vinha com alguns script-fus em Scheme e não necessitavam de linguagens adicionais).

gimp04.jpg

A vantagem é que podemos selecionar diversas áreas da imagem e eliminar as imperfeições de todas simultaneamente. Também é possível especificar como o filtro irá atuar. Podemos informar se o filtro irá verificar todo o entorno, apenas as partes superior e inferior ou aindas laterais. (para cenas com objetos verticais/horizontais).

gimp05.jpg

3º: DustCleaner

DustCleaner é uma ferramenta mais especifica para o trabalho. Acredito que não exista versão para o Windows. Baixei e instalei os fontes, mas existe uma versão compilada (32 bits) para Linux.

Podemos selecionar uma área ou deixar para ele procurar possíveis pontos de sujeira em toda a imagem. Pode ser que ele encontre o que não é ou o contrário. Um ajuste mais fino nas opções para detectar permite corrigir possíveis problemas nos pontos encontrados e um ajuste na recuperação vemos como ficará o resultado final diretamente na janela do plugin, antes de aplicarmos na imagem final. Também permite apenas marcar os pontos encontrados.

gimp07.jpg

Conclusão

Os métodos não encerram por aqui mas acredito que sejam os mais simples e eficientes. Pode ser que uma imagem necessite de mais de um método para ficar boa ou aceitável (o melhor mesmo é manter o sensor limpo). Se você detectar que existe pontos de sujeira na imagem, pode ser interessante fazer uma foto desfocada com um fundo uniforme (parede branca, céu) utilizando uma abertura bem pequena (F22 ou próxima) para facilitar a localização dos pontos posteriormente.