Comparando imagenes con ORACLE

Alberto
06 de Octubre del 2005
Saludos.
Estoy tratando de realizar una comparacion de imagenes utilizando Visual Information retrieval de ORACLE 9i 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 cualquier tipo de colaboracion para resolver este problema
--- porque he buscado por mucho tiempo y no he podido conseguir mucho material
--- al respecto, tampoco ejemplos que siempre ayudan.