Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Comprar imagenes (https://www.clubdelphi.com/foros/showthread.php?t=63745)

ronald_tro 01-03-2009 00:15:12

Comprar imagenes
 
Hola amigos, aqui de nuevo con una duda, resulta que deseo comprar dos iimagenes que tengo, son del mismo tamaño y me pasaron este codigo:

for i:=0 to Imagen1.Width do begin

for j:=0 to Imagen1.Height do begin

if Imagen1.Canvas.Pixels[i,j] <> Imagen2.Canvas.Pixels[i,j] then
//Son diferentes

end;{for j}

end;{for i}

, bueno y la verdad no he probado este metodo, no se si alguien lo halla utilizado, me dijeron que es un poco lento esta forma de hacerlo, y bueno tengo otra opcion, usar redes neuronales, no se si alguien sepa si solo con redes neuronales o con otro metodo mas facil y que no sea tardado me ayuda, es decir amigos, comparo la imagen y si es lo mas parecida a una principal de las dos me arroja un resultado cual sea, gracias, espero no molestarlos.:)

AzidRain 01-03-2009 00:52:57

Así como lo haces realmente no comparas las imágenes, más bien los pixeles de las mismas, lo que vendría siendo casi lo mismo que comparar byte por byte los archivos originales. Definitivamente tienes que irte por el lado de redes neuronales o algun otro elemento de IA para poder hacer que el programa efectivamente compare "a ojo" las imágenes y sea capaz de determinar si son o no iguales no tanto por su contenido de bytes sino por como se ven al ojo humano...algo posible, pero si que se llevará su buen tiempo y obviamente demandará recursos del equipo donde esté trabajando.

ronald_tro 04-03-2009 07:28:33

Hola amigos, he buscado algo de esto y me encontre algo referente:

Se puede hacer en plan artesanal , simplemente comparando % de pixels.
es decir , si las imagenes son siempre tamaño determinado, y la forma o objeto que desas buscar siempre es del mismo tamaño , lo que debes hacer es pasarla todas a blanco y negro y las guardas a modo de patron a buscar. luego cuando quieras reconocer una imagen , la pasas a b/n (esto es facil con bitmaps) y buscas en los patrones que tienes almacenados a cual se parece mas , calculando simplemente el % de pixels iguales. la que tenga > % es la mas parecida.

De hecho amigos, pongo por ejemplo 5 imagenes en un form, y le aplico un filtro y pone las imagenes en blanco y negro con los bordes, pero alguien sabe si me podria servir?, es decir asi como dijo AzidRain, o no se algo asi como guardarlas en memoria (virtualmente), espero se pueda, gracias.

pd. si no me entienden me dicen:)

Raynel 23-03-2009 23:43:46

1 Archivos Adjunto(s)
A lo mejor te sirva, encontré un código llamdo "ojos electrónicos", más bien sirve como sofware de seguridad, pero si desglosas el código es posible que le encuentres algún provecho, nota : lo encontré entre mis archivos y no es de mi autoría, pero si estaba en la red libremente por alli, no recuerdo si fué por estos foros o en otros).

Archivo Adjunto 1534

sebasthian777 27-03-2009 18:40:20

Sin mirar el codigo que nos facilito el compañero anterior te puedo comentar que tenes distintos caminos (algo parecido a lo que dijo el otro compañero con el tema de analizar % en pixels por pixels) uno es hacer algo seco... que analice toda la imagen, pero tienes otros caminos, en donde puedes trabajar con matices para lograr identificar el objeto a analizar en si....

puedes hacer por ejemplo, que donde encuentra una X cantidad de pixeles blanco, no lo analice (teniendo en cuenta que puede ser un fondo) siguiente este tipo de ideas, puedes "inventar" una serie compleja y extensa de algoritmos de IA... Te comento que no es imposible, pero esa serie de codigos, suelen ser desarrolladas por un grupo de trabajo y no una sola persona :P jejeje...

en si... entrando a muy bajo nivel de programacion en cuanto a los algoritmos (pixel por pixel) lo logras, pero tienes que tener un conocimiento de algebra muy grande para hacer las matrices...

ademas te comento que por mi experiencia, a la hora de trabajar pixel por pixel se notaba una diferencia en cuanto al rendimiento de la maquina, en otras palabras, maquina lenta.

te comento a grandes rasgos lo que hacia mi programa, Buscaba todos los pixeles negros (fondo blanco, en otras palabras imagen b/n) y las movia un pixel para la izquierda. EL fin de este programa fue ver que tanto se alentisaba el RAD o delphi utilisando esto, en vez de usar por ejemplo

Código Delphi [-]
image1.canvas.Draw(-1,0,image1.Picture.Graphic);

la diferencia en el refresco de la pantalla era notable aclaro.

esto, obviamente, tambien depende de la resolucion/tamaño de la imagen/s a analizar...

saludos y cuentanos si obtuviste algun resultado satisfactorio

=D la mejor de las suertes!


La franja horaria es GMT +2. Ahora son las 07:14:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi