Roadmap Processamento de Imagens

Bom, manipulação de imagens é um tema recorrente aqui, então resolvi postar esse guia para aqueles que estão entrando nesse mundo agora, e querem usar Java.

[size=18]Para manipular imagens com eficiência[/size]

Using Rasters For Image Processing

Java Foundation Classes in a Nutshell:

Jerry’s Java Image Processing Pages

[size=18]Para desenhar no Java 2D[/size]

Ponto V - Java 2D

Painting in AWT and Swing - http://java.sun.com/products/jfc/tsc/articles/painting/#swing
Space Invaders - An Accelerated Tutorial - http://www.cokeandcode.com/info/tut2d.html
Killer Game Programming in Java: http://fivedots.coe.psu.ac.th/~ad/jg/
Lesson: Performing Custom Painting - http://docs.oracle.com/javase/tutorial/uiswing/painting/
Trail: 2D Graphics: Table of Contents - http://docs.oracle.com/javase/tutorial/2d/TOC.html

[size=18]APIs para Processamento de Imagens[/size]

Bindings para APIs não-Java (usam JNI)

[size=18]Sobre performance e ergonomia da JVM[/size]

Visual VM: http://visualvm.java.net/docindex.html
Introduction to Profiling Java Applications: http://netbeans.org/kb/60/java/profiler-intro.html

Brian Goetz Publications:

Tunning Garbage Collection With JVM 5: http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

Se alguém souber de mais links, sinta-se à vontade para complementar esse post.

Muuuito bom! Valeu! Trabalho com imagens mas não uso java, vou começar a usar agora.

Você usa o que? C++ com opencv?

Muito bom Vinicius,

vou contribuir com alguns links de assuntos correlatos que andei brincando (mas faz algum tempo):

API 3D
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138252.html

http://www.java3d.org/
OpenGL - http://nis-lab.is.s.u-tokyo.ac.jp/~robin/jGL/
jCUDA - http://www.hoopoe-cloud.com/Solutions/jCUDA/Default.aspx
Lg3d - http://java.net/projects/lg3d
Batik SVG Toolkit - http://xmlgraphics.apache.org/batik/

Outros resources
http://www.opengl.org/
http://www.mesa3d.org/

abraços

Eu prefiro, para OpenGL, esse binding aqui: http://lwjgl.org/

Bom Dia Vini,

Boas dicas.

Pretendo começar a estudar manipulação de imagem e vídeo, em especial a parte de reconhecimento de padrões.

Estava pensando em iniciar pelo OpenCV mas agora fiquei na dúvida, você acredita que os recursos citados nesse post atendam essa área que pretendo me dedicar ou OpenCV ainda é o mais indicado para esse caso?

Ressaltando que meu objetivo é a interpretação dos dados de imagem e vídeos já existentes, não geração dos mesmos.

Abs

Use o opencv, especialmente para vídeo.
É mais rápido, mais completo e mais fácil de usar.

O java é legal só se vc quiser estudar como esses algoritmos funcionam (implementar seu próprio algorítmo de dilatação, por exemplo).

Entendi.

Farei isso mesmo então, já tenho até o livro aqui :slight_smile:

Obrigado

Se quiser usar o C++, dê uma olhada na nova API do Opencv 2.0.

O legal é que vc pode estudar pelo livro, entender os conceitos, e depois só adaptar a sintaxe.

A lib em C++ é bem mais fácil, orientada a objetos e tão rápida quanto.
http://opencv.willowgarage.com/documentation/cpp/

Sim, vou partir pro C++ mesmo.

Aproveito e já estudo a linguagem que é algo que estava querendo fazer há algum tempo já.

Valeu

Bom, aí vc também pode olhar meu Roadmap C++:
http://www.pontov.com.br/site/index.php/cpp/46-conceitos-basicos/88-roadmap-c

Oi Vini,

Aproveitando o embalo mas sem desviar muito do tópico.

Qual dos livros citados no roadmap você indica pra quem já programa em outras linguagens(exceto C) ?

Não quero pegar um livro muito básico mas também fico com receio de pular conceitos importantes.

Programo em java e algumas outras linguagens faz um bom tempo já, queria um livro que me permitisse partir desse ponto.

Abs

Um desses aqui:
Programação Orientada a Objetos em C++, do prof. André Duarte Bueno (UFSC): Ótimo material, em português e disponível para download gratuitamente aqui.
Programming: Principles and Practice Using C++: Livro básico da linguagem C++, escrito pelo próprio Bjarne Stroustrup, criador da linguagem.
Accelerated C++: Practical Programming by Example, do Andrew Koenig: Para quem não sabe C, e nem quer saber, mas quer aprender C++;[/quote]

Eles são complementares. Ou seja, obtendo um, não precisa comprar o outro.
O Accelerated C++ é o mais “direto” deles. Também é recomendado pelo Stroustrup.

Opa,

Obrigado novamente pela dica, vou partir pra esse Accelerated C++.

Abs

[quote=GraveDigger]Opa,

Obrigado novamente pela dica, vou partir pra esse Accelerated C++.

Abs
[/quote]

É interessante você usar uma lingiuagem simples como java ou pascal para começar a implementar esses algoritmos(para aprender mesmo). Quando precisar criar uma ferramenta relacionada, partir para o c++ para conseguir um bom tempo de resposta deles.

Você usa o que? C++ com opencv?[/quote]

Uso MatLab.

Você usa o que? C++ com opencv?[/quote]

Seguinte… ViniGodoy, nao tem muito haver mais se puder me responder… ou entao abrirei um topico…

preciso listar as imagens de um banco de dados em minha aplicaçao SWING(Desktop).

Estou usando desta maneira:

	public BufferedImage searchFoto(int codFicha) throws SQLException{
		BufferedImage img = null; 
		
		String sql = "SELECT imagem FROM db_recfirma_arquivos.tb_documentos where cod=?"; 
		ResultSet rs = null;
		try {
			PreparedStatement psmt = con.prepareStatement(sql);
			psmt.setInt(1,codFicha);
			rs = psmt.executeQuery();
		} catch (SQLException e) {
			throw new SQLException("Não foi possível obter os dados do banco!",e);
		}
		if(rs.next()){			try {
				img = ImageIO.read(new ByteArrayInputStream(rs.getBytes("imagem")));
			} catch (IOException e) {
					e.printStackTrace();
			}
		}
		return img;
	}

o tipo do campo da minha base de dados e: MEDIUMBLOB

MAIS nao esta trazendo… para meu componente que e um JPanel que recebe um BufferedImage

JPanel im = null;
			try{
				im = new JImagePanel(d); 
			}
			catch (NullPointerException e) {
				e.printStackTrace();
}

porque esses dados foram importados de outra base de dados, e entao o tamanho de cada imagen esta mais ou menos 90kb a 300kb

e quando eu salvo uma imagen com minha webcam em outra tabela com o mesmo tipo de campo (Mediumblob) o tamanho fica em torno de 20kb no maximo, e entao
e listado em meu JPanel. nao sei por que

tem como ajudar?