comparacion de imagenes con Visual Information retrieval

Giganews Newsgroups
Subject: comparacion de imagenes con Visual Information retrieval
Posted by:  Alberto (jdenob…@gmail.com)
Date: 5 Oct 2005

Saludos.
Estoy tratando de realizar una comparacion de imagenes utilizando
Visual Information retrieval de ORACLE y aunque estoy realizando un
proceso sencillo, el manejador me arroja unos errores que no he podido
solucionar. He buscado por todos lados y he conseguido muy poco
material que no me ha dado la respuesta a mi problema.
Agradeceria que por favor alguno me orientara en como conseguir
informacion para resolver mi enigma.

Para explicar mi problema les muestro mis sentencias desde que creo la
tabla.

-- Me conecto a la base de datos con el usuario alberto

connect alberto/jalberto;

-- Creo la tabla llamada imagen_tabla

create table imagen_tabla
    (CodigoImagen number primary key,
    imagen ordsys.ordimage,
    imagen_firma ordsys.ordimagesignature);

-- me conecto como administrador para crear la variable imagedir
indicando el directorio en donde tengo mis imagenes y otorgo permiso de
lectura al usuario alberto

Connect sys/o123123 as sysdba;
create or replace directory imagedir as 'd:\tesis\imagenes';
grant read on directory imagedir to alberto;

-- me vuelvo a conectar con el usuario alberto y creo un procedimiento
llamado ImportarImagen que utilizo para insertar imagenes en mi tabla

connect alberto/jalberto;
create or replace procedure ImportarImagen(dest_id number, filename
varchar2) is
    img ordsys.ordimage;
    ctx raw(64) := null;
begin
    delete from imagen_tabla where CodigoImagen = dest_id;
    insert into imagen_tabla (CodigoImagen, imagen, imagen_firma)
    values (dest_id, ordsys.ordimage.init(),
ordsys.ordimageSignature.init())
    returning imagen into img;
    img.importFrom(ctx, 'file', 'IMAGEDIR', filename);
    update imagen_tabla set imagen=img where CodigoImagen=dest_id;
end;

-- otra vez me conecto para crear otro procedimiento que llama al
procedimiento anterior indicando el nombre y codigo de cada imagen a
ingresar en la tabla

connect alberto/jalberto;
create or replace procedure llamarImagen is
begin
importarImagen(1,'00001.bmp');
importarImagen(2,'00002.bmp');
importarImagen(3,'00003.bmp');
importarImagen(4,'00004.bmp');
importarImagen(5,'00005.bmp');
importarImagen(6,'00006.bmp');
importarImagen(7,'00007.bmp');
importarImagen(8,'00008.bmp');
importarImagen(9,'00009.bmp');
importarImagen(10,'00010.bmp');
importarImagen(11,'00011.bmp');
end;

-- Creo un procedimiento que permite generar la firma a cada una de las
imagenes. Esta firma la almaceno en el campo imagen_firma de mi tabla.
n llega a 33000 porque el procedimiento se correra con ese mumero de
imagenes ( para este ejemplo no ingrese todas las imagenes)

create or replace procedure agrega_firma is
t_image ORDSYS.ORDImage;
image_sig ORDSYS.ORDImageSignature;
n number :=0 ;
BEGIN
loop
n := n + 1;
SELECT imagen, imagen_firma INTO t_image, image_sig FROM imagen_tabla
WHERE CodigoImagen=n FOR UPDATE;

image_sig.generateSignature(t_image);
UPDATE imagen_tabla SET imagen_firma = image_sig WHERE CodigoImagen =n;
exit when n = 33000;
end loop;
END;

--  llamo al procedimiento creado
call agrega_firma();

-- En este momento se crea otro procedimiento llamado comparaimagen que
se encarga de mostrar cuales imagenes son parecidas, tomando en cuenta
que el color sea 20% parecido, texture un 10%, shape un 50%, location
un 20%, y como valor umbral asigno 25

create or replace procedure comparaimagen is
  t_img ORDSYS.ORDImage;
  i number;
  imagen_sig ORDSYS.ORDImageSignature;
  query_signature ORDSYS.ORDImageSignature;
BEGIN
  SELECT codigoimagen, imagen, imagen_firma
  INTO i, t_img, imagen_sig
  FROM imagen_tabla
  WHERE ORDSYS.IMGSimilar(imagen_firma, query_signature, 'color="0.2"
texture="0.1" shape="0.5" location="0.2"', 25) = 1;
END;

-- Entonces mando a ejecutar este procedimiento y...

Call comparaimagen();

--- Como resultado obtengo el siguiente error

Call comparaimagen()
    *
ERROR at line 1:
ORA-29400: data cartridge error
IMG-00803: invalid attribute value
ORA-06512: at "ORDSYS.SCOREFUNC", line 0
ORA-06512: at "ORDSYS.SIMILARFUNC", line 22
ORA-06512: at "ALBERTO.COMPARAIMAGEN", line 7

--- He intentado muchas opciones y no he podido lograr solucionar el
problema.
--- Agradeceria ayuda de cualquier tipo.
--- Si poseen direcciones en donde pueda consultar mas informacion
--- del tema para mi seria maravilloso, ya que no he conseguido
--- muchas, y las ayudas en el web site de ORACLE me han sido de
--- poca utilidad en el momento de buscar la solucion al problema.

Replies