LER LINEAS

xixa
06 de Octubre del 2005
HOLA a todos, soy estudiante de Informatica de Sistemas. Estoy haciendo el Proyecto de Fin de Carrera y estoy intentado leer una imagen pero el problema que tengo es que no puedo leer la lineas diagonales. Os explico seguidamente el problema.
MUCHAS GRACIAS. SILVIA.
A partir de una imagen en 2 dimensiones, que sea en formato *jpg, y que sea en blanco y negro. Como puedo leer las posibles líneas (horizontales, verticales y diagonales) de la imagen?


• Para saber el color de cada píxel, accedo con VTK, si el color del píxel es 255 , es BLANCO, y si es 0, entonces el píxel es NEGRO.
• Y el algoritmo para leer las líneas lo he de realizar en C++, tendría que poder averiguar que hay una línea del píxel (x,y) al (x,y).En realidad, la parte del algoritmo que no me sale es cuando se cruza una línea diagonal con una vertical o horizontal.


/**********************************************************************
ACCEDER A UNA IMAGEN CON FORMATO *JPG
**********************************************************************/

//Creamos el objeto fuente JPEGReader, el cual lee archivos jpeg:
vtkJPEGReader *reader = vtkJPEGReader::New();


//Miramos si se trata de una archivo *.jpeg
if (!reader->CanReadFile(Nombre_vista))
printf(\\\\\\\"\\\\\\\\n Error de lectura\\\\\\\");

//Especificamos el nombre del archivo
reader->SetFileName(Nombre_vista);

//Actualizamos el objeto.
reader->Update();


//Obtemos la salida de la fuente ( del reader), la cual se trata de una imagen de datos.
vtkImageData* imagen = reader->GetOutput();

//Hallamos la dimensión en pixels de la imagen:
int dim[2];

imagen->GetDimensions(dim); //dim[0]-->ancho
//dim[1]-->alto

ancho=dim[0];
alto=dim[1];









/**********************************************************************
GUARDAR LA INFORMACIÓN DE LOS PIXELES DE LA IMAGEN
*********************************************************************/


//Creamos una matriz llamada \\\\\\\"Imagen_etiquetada\\\\\\\".
//Cada posición de la matriz contendrá información sobre la imagen:
// 1)ColorPixel: NEGRO(equivale a un 1) BLANCO (equivale a un 0)



//Reservamos memoria dinámicamente
Imagen_etiquetada=(tEtiquetas **) malloc (sizeof (tEtiquetas*) * alto);



for (i=0; i<alto; i++)
Imagen_etiquetada[i]=(tEtiquetas *) malloc (sizeof (tEtiquetas) * ancho);



unsigned char *pixel;


//Para cada pixel de la imagen averiguaremos su color,
//el cual es la union de los tres componentes RGB (Red- Green-Blue)
for (i=0; i<alto; i++)
{
for (j=0; j<ancho; j++)
{
//GetScalarPointer-->permite obtener un puntero al pixel indicado
pixel = (unsigned char*)imagen->GetScalarPointer(j, i, 0);


//Obtenemos el color del pixel
ColorPixel= (pixel[0]+pixel[1]+pixel[2])/3;

if(ColorPixel>=0 && ColorPixel<=50)
Imagen_etiquetada[i][j].ColorPixel=1;//Pixel NEGRO
else
Imagen_etiquetada[i][j].ColorPixel=0;//Pixel BLANCO

}
}