Processamento de Imagem em Java versus C

14 respostas
E

Ola Pessoal,

Como é meu primeiro post de pergunta, saudações cordiais a todos!

Bom, alguem aqui tem familiaridade com, ou jah tocou algum projeto de, processamento de imagem usando Java?

tenho certa experiência com a biblioteca OpenCV (C e C++) da Intel. Vasculhando a documentação da Java Advanced Imaging (JAI) API fiquei animado. Mas tenho que convencer meu chefe de que ““Java é lento” não é bem assim”…

Provavelmente terei que lidar com 15 a 20 frames por segundo… Não encontrei (google) nenhuma comparação realmente quantitativa entre por exemplo OpenCV e Java.

Alguém já fez alguma comparação ou tem sugestão de link?

Obrigado, Abraços.
Elvano.

14 Respostas

A

Só te digo uma coisa, JAI é pesadaço. :slight_smile: O treco faz coisa , mas o que tem de bom tem de pesado.

E

so pra confirmar… Pesado quanto ao tempo de processamento?
Valeu!
elvano

A

Justamente. :slight_smile:

Mas vale lembrar que a minha experiência básica foi gerar thumbnails com JAI, criar blending e alpha em imagens e conversão de tipos :stuck_out_tongue: :P.

Se alguém tiver algo mais preciso…

H

Elvano, acho que o JAI é um bom framework , mas na área de processamento de imagens, nada se compara ao MATLAB , pois a toolbox de PI é muito completa e muita coisa já está implementada enquanto ao JAI tive muita dificuldade fazendo comparação com o MATLAB. Não conheço o OpenCV mas acho que deve ser bem superior ao JAI em questão de desempenho. Ainda acho que para esse processamento todo vale a pena continuar com o C/C++ pois o overhead é grande e você vai ter que se preocupar muito com HeapOutOffMemory e controle de System.gc()

Acho que se existir alguém que usou muito o JAI seria uma boa, pois tentei muito com JAI e acabei desistindo :frowning:

Espero ter ajudado um pouco.

D

Processamento de imagens, vídeo?

Eu já implementei diversos algoritmos de processamento de imagens na cadeira de Processamento de Imagens na faculdade, e pode crer, ficaram tão rápidos quanto os feitos em C…

O que pesa é a complexidade dos algoritmos nesses casos, e não tanto a linguagem.

E

Hebert, ajudou muito, valeu!

Concordo! Sou quase um MatlabAholic :slight_smile: .

Sempre uso uso Matlab (Image aquisition e Image Processing toolbox, por exemplo) pra fazer prototipo de algoritmos, ou até pra aplicaçoes finais. Já fiz aplicativos em que compilo o códico .m em dlls, daí faz-se um .exe em C++ “standalone” que as usa. O problema é assim fico dependendo do runtime do Matlab na maquina alvo, ou seja, fico dependente de ter de uma licença do Matlab (que uso na Universidade) e não daria para propósitos comerciais (pelo menos por enquanto, que nao posso comprar o bicho… que eh bem caro!)…

Ainda to vendo se encontro pelo menos um Benchmarking comparando algum processamento entre opencv e JAI… se eu nao encontrar… acho que vou aplicar algum tempo em fazer um simples… daí, prossigo com o C e C++.

Abraço.
elvano.

E

Isso já me anima mais!

Valeu!
Elvano.

A

Elvano,

Alguns depoimentos.

Fonte: http://www.guj.com.br/posts/list/106517.java

Fonte: http://www.guj.com.br/posts/list/81374.java#433589

Não sei se ajuda muito, mas acredito que valha a pena dar uma lida.

Você tem experiência em OpenCV? O que te faz mudar para JAI?

Mostre alguns casos de sucesso da JAI para o seu chefe (tem alguns da NASA eu acho). Ou faça algo bem básico usando imagens, pra mostrar que essa de Java é lento é de outras eras.

Abraço.

E

Ola Andre Brito,

Desde que coloquei o post continuei lendo sobre o JAI, e tive mesmo a impressão que ela implementa algoritmos em código nativo. Os posts que vc mandou são muito bons!

Uma questao pertinente sua foi é: se jah uso C/C++ OpenCV, por que mudar pra Java? Bom, não sou profissional de TI. Faço pesquisa (área neurociencia), e escrever (mini)softwares eh uma necessidade. Como meu orientador fazia tudo em C++, segui o caminho.

No entanto, quanto ao Java, achei a linguagem fascinante: elegante e mais fácil de escrever código sem as, ou com menos, “gambiarras” que eu faço em C/C++. A bibliografia de Padrões de Projeto, OO, etc, me parecem muito mais bem discutidas em Java. Enfim, me parece que Java encoraja mais facilmente boas práticas de programação. Sem contar que deixo de usar uma IDE comercial e cara e passo pro Eclipse. (Bom, ja to treinando pra “javaEvangelizar” os colegas da pós-graduação.) etc, etc…

A partir de amanhã vou começar estudar mesmo a JAI e JMF e tentar escrever um aplicativo, que ja tenho em OpenVC, que detecta a posição de um rato (eh rato, o bicho mesmo, rs) enquanto é filmado, em tempo real.

Tendo ou não sucesso, conto o andamento aqui… Certamente pedirei ajuda… :smiley:

abraço a todos
elvano.

T

Vou dar uma dica (já que me citaram: )

Veja se alguém já fez um encapsulamento Java para a OpenCV.
Se isso não existir, mas você tiver o orçamento para tanto, tente ver se é possível criar um encapsulamento desses e deixá-lo sob alguma licença open-source. Seria muito interessante.
Para o tipo de coisas que você precisa fazer, a JAI não é adequada. Apesar de a JAI ser escrita em C / C++ e usar instruções do processador que são adequadas para o processamento de imagens, nem mesmo assim eu recomendaria o seu uso para - por exemplo - detectar a posição de um rato.

E

encapsulamento Java para a OpenCV
seria chamar as funções nativas do OpenCV por meio de JNI? Se for isso, posso usar o swig, que facilita geração (gera algum código automático) de interfaces de chamada JNI. Seria um trabalho e tanto…! Alguém ae teria interesse em se juntar a um projeto assim?

Valeu!
Abraços
elvano.

E

Ops, achei um projeto que começou portar o OPenCV para Java:
http://ubaa.net/shared/processing/opencv/

This implementation is not a complete port of OpenCV. Currently, this library supports :

real-time capture

video file import

basic image treatment (brightness, contrast, threshold, ?)

object detection (face, body, ?)

blob detection</blockquote>

to testando…

J

Olha, trabalho com a Opencv da intel aqui, e se você puder olhar nos fontes, vai ver que ela é toda otimizada em assembly. Não tem comparação.

E

Ok Julio. Valeu!

elvano.

Criado 10 de fevereiro de 2009
Ultima resposta 11 de fev. de 2009
Respostas 14
Participantes 7