olá… preciso de uma orientação:
carrego uma imagem binaria (preta com fundo branco) para o java. essa imagem é semelhante a um rio e seus afluentes. preciso calcular a distância de um ponto a outro. Já li algumas coisas sobre a API Raster e JAI, só que a jai só tem material em ingles.
como posso achar algum material sobre processamento de imagens voltada a esse meu objetivo?
ou algum código q me de uma orientação?
agradeço a ajuda!
[quote=pedroroxd]Perguntas:
- Você vai clicar na imagem em 1 ponto, e depois clicar em outro, fazendo ele calcular a distância?
- Sua imagem tem “escala” (1cm = 1km) ou vc quer calcular a distância em cm msmo?
Seja mais específico…[/quote]
OK.
A imagem não será clicada. Terei que identificar os pontos: Imagina uma linha traçada que em um certo ponto se divide em 2 ou mais linhas (Bifurcação). Cada bifurcação é o ponto que terei que identificar. Isso ocorrerá várias vezes, tendo várias bifurcações. A linha é de uma expessura padrão, quando essa expessura tiver mais pixels agrupados do que o normal, se enquadraria como um ponto de bifurcação! Assim eu imaginei para identificar os pontos.
A escala, terei que definir eu mesmo, vai depender de alguns fatores!!
Esse trabalho é um mapa importado (já corrigido também) pelo ArcGis, programa de processamento geográfico, onde recebo a imagem de um Rio e seus afluentes. O principio de tudo é identificar os pontos de bifurcações e definir uma distância entre eles!
Essa imagem será enquadrada em um tamanho padrão, para testar esses processos, mas a idéia é dar a resposta em km de distância.
Alguma idéia?
[quote]
Alguma idéia?[/quote]
achei um código q poderia ajudar:
package data.info;
import java.awt.image.SampleModel;
import java.io.IOException;
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.media.jai.iterator.RectIter;
import javax.media.jai.iterator.RectIterFactory;
public class ProcessPixelsUsingRectIterator
{
public static void main(String[] args) throws IOException
{
if (args.length != 1)
{
System.err.println("Usage: java data.info.ProcessPixelsUsingRectIterator image");
System.exit(0);
}
PlanarImage image = JAI.create("fileload", args[0]);
int width = image.getWidth();
int height = image.getHeight();
SampleModel sm = image.getSampleModel();
int nbands = sm.getNumBands();
if (nbands != 3)
{
System.err.println("Desculpe, esta aplicação só trabalha com imagens RGB.");
System.exit(1);
}
long startTime = System.currentTimeMillis();
int[] pixel = new int[nbands];
RectIter iterator = RectIterFactory.create(image,null);
int counter = 0;
for(int h=0;h<height;h++)
for(int w=0;w<width;w++)
{
iterator.getPixel(pixel);
iterator.nextPixel();
if (isWhite(pixel[0],pixel[1],pixel[2])) counter++;
}
long endTime = System.currentTimeMillis();
System.out.println("Existem "+counter+" pixels broncos na imagem.");
System.out.println("Foi processada em: "+((endTime-startTime)/1000.)+" segundos.");
}
private static boolean isWhite(int r,int g,int b)
{
return ((r == 255) && (g == 255) && (b == 255));
}
}
só q esse código soma os pixels branco de uma maneira geral…
eu preciso seguir uma linha tracejada para definir quantos pixels existem do ponto Origem ao ponto Destino…
Alguma idéia???