Utilizando J em imagens (parte 2 de n)

Duas coisinhas para começar: Não sei quantos artigos farei, só espero que este não seja o último. Quem não leu o anterior, acho que é melhor começar por lá.

Pressuponho que você já baixou e instalou o J no seu sistema operacional, deu uma olhadinha no Studio/Labs, executou os exemplos e leu um pouquinho da documentação. Se não fez nada disso, deverá instalar o J e poderá deixar o resto para depois. Já existe biblioteca pronta para trabalhar com imagens e diversas outras atividades portanto, é mais fácil utilizar algo pronto do que reinventar a roda. Como as bibliotecas adicionais não foram instaladas juntamente com o programa é necessário que você baixe e instale elas. É fácil instalar e manter as bibliotecas diretamente com alguns comandos mas, para não assustar, bastam alguns cliques que estará tudo feito. Acesse o menu Run e a opção Package Manager..

Deverá ser aberta uma janela pareceda com a que segue:

No meu caso, todos os pacotes já estão instalados e atualizados. Precisaremos do media/image3. Clicando nos pacotes, temos uma descrição do que ele possibilita. Marque os que você deseja instalar (ou todos) e instale. Após a instalação, outras seções estarão disponíveis no Studio/Labs, e você poderá estudar um pouco o funcionamento das bibliotecas.

Antes de continuar, um pequeno aviso. Você deverá copiar linha a linha do código e pressionar enter para que ela seja executada. Se você copiar um bloco de linhas e colar, o resultado não será o desejado. É claro que existe a opção de copiar e colar um programa inteiro e executá-lo, mas fica para a próxima.

A primeira coisa a fazer e carregar os pacotes desejados. Para tanto, digite as linhas abaixo no seu ambiente (ou copie, cole e execute pressionando enter cada uma delas)

load 'media/image3'
load 'media/image3/view_m'

Vamos criar uma matriz quadrada contendo as cores vermelho, verde, azul e amarelo em cada uma das quatro posições. Uma matriz 2x2x3. Uma linha como a que segue será o suficiente

im=.2 2 3 $ 255 0 0 0 255 0 0 0 255 255 255 0

Já poderíamos visualizar a imagem mas, como a imagem teria apenas 2×2 pixels, preciisamos aumentar um pouco para facilitar a visualização. Uma imagem de 80 pixels de cada lado ficará bem melhor. Vamos criar a imagem 2 com essas dimensões. Se a atribuição dos valores seria algo simples em diversas linguagens de programação, algo como im=[[[255, 0, 0], [0, 255, 0]], [[0, 0, 255], [255, 255, 0]]] (mais feio para uns e mais bonito para outros), você pode testar qual a complexidade de elevar de 2×2 para 80×80.

im2=.80 80 resize_image im

Ok, já poderemos visualizar a imagem. Para tanto, a linha abaixo é o suficiente.

view_image im2

O resultado deverá ser o seguinte:

Como é uma linguagem orientada a matrizes, nada mais normal do que facilitar o trabalho com elas. Para mostrar a imagem com cores inversas, devemos subtrair 255 de cada pixel. É uma operação trivial. uma linha como 2 + 1 2 3 4 resultará em 3 4 5 6. Para subtrair 255 da matrix, basta 255-matrix.

view_image 255-im2

Resultará em:

Apesar de não ser difícil, em outras linguagens de programação precisariamos de algo como:

for i=1 to 80: for j=1 to 80: for c=1 to 3: m[i,j,c]=255-m[i,j,c]

É possível rotacionar a matriz facilmente. Podemos rotacionar 12 posições para a esquerda (cada posição irá corresponder a um pixel) e 24 posições para cima, por exemplo. Se temos a matriz 1 2 3 4, rotacionar 1 posição para a esquerda (1|.) resultará em 2 3 4 1. Veja que o primeiro elemento foi para a última posição. Já pensou em utilizar a sua linguagem preferida para efetuar esta operação em uma matrix de 80x80x3? É bem provável que envolva um pouco a mais de trabalho. Então, vamos ver como fica:

view_image 24 12|.im2

e o resultado será:

Para finalizar o artigo, poderiamos efetuar a rotação e, em vez de de utilizar o valor do elemento que cai fora da matriz no seu final, poderemos preencher com outro valor. Você também pode testar para ver como ficaria o procedimento em outra linguagem.

view_image 24 _12|.!.0 im2

e temos:

Ok, ficamos por aqui. Não pretendo me prender muito nos verbos e advérbios utilizados pela linguagem. No help você encontrará uma farta documentação. Só para complementar, é possível ler diretamente uma imagem utilizando im=:read_image <caminho>, onde <caminho> é o caminho completo para a sua imagem. Teste algo como im=:read_image ‘/home/user/images/teste.png’ ou im=:read_image ‘c:\imagens\teste.jpg’ com os comandos deste artigo para ver se funcionam bem e a rapidez com que eles são executados (lembrando que J é uma linguagem interpretada). Veja o que view_image |.im faz.

T+

=-=-=-=-=
Powered by Blogilo

2 comentários sobre “Utilizando J em imagens (parte 2 de n)

  1. […] J é distribuído sob a licença GPL3 (parece que começou nesse ano). Você pode baixar o ambiente do site JSoftware. Pode ser melhor a versão J602 (eu estou com a versão 701). Baixe instale e divirta-se. É interessante olhar a página onde faço uma breve introdução e mais algumas dicas sobre J. Por enquanto vamos ignorar a nomenclatura oficial e não seguiremos extritamente com os termos verbo, advérbio, gerúndio, sentença (serão introduzidas aos poucos durante o ou os artigos). Pode ser interessante você olhar os dois artigo que escevi sobre J no blog. O primeiro */>:i.5 (j é Russo) e segundo Utilizando J em imagens. […]

Os comentários estão desativados.