sólo estaba trabajando en algo similar y el resultado rápido y sucio que se me ocurrió es utilizar la aplicación de "ExhaustiveTemplateMatching" de AForge.Net con imágenes de 1/4 de su tamaño. Las imágenes de 720p a tamaño completo tardaron un par de minutos, pero con un tamaño de 1/4 es aproximadamente un segundo en mi pequeña computadora.
public static class BitmapExtensions
{
/// <summary>
/// See if bmp is contained in template with a small margin of error.
/// </summary>
/// <param name="template">The Bitmap that might contain.</param>
/// <param name="bmp">The Bitmap that might be contained in.</param>
/// <returns>You guess!</returns>
public static bool Contains(this Bitmap template, Bitmap bmp)
{
const Int32 divisor = 4;
const Int32 epsilon = 10;
ExhaustiveTemplateMatching etm = new ExhaustiveTemplateMatching(0.9f);
TemplateMatch[] tm = etm.ProcessImage(
new ResizeNearestNeighbor(template.Width/divisor, template.Height/divisor).Apply(template),
new ResizeNearestNeighbor(bmp.Width/divisor, bmp.Height/divisor).Apply(bmp)
);
if (tm.Length == 1)
{
Rectangle tempRect = tm[0].Rectangle;
if (Math.Abs(bmp.Width/divisor - tempRect.Width) < epsilon
&&
Math.Abs(bmp.Height/divisor - tempRect.Height) < epsilon)
{
return true;
}
}
return false;
}
}
Se podría también, por supuesto, sólo comprueban tm.length> 0 y sí hay algunas divisiones innecesarias en allí: P
Cómo exacta Por qué tiene que ser? ¿Podría cambiar el tamaño de las imágenes a la mitad del tamaño y comparar? – jestro
¿Puede decirnos algo sobre el contenido de las imágenes? ¿Son mapas de bits estáticos al azar, o hay alguna estructura que pueda aprovechar? Además, ¿puede decirnos cuál es la probabilidad de que la consulta sea "basura"? Es decir, ¿cuál es la probabilidad de que la imagen pequeña NO se encuentre en la imagen grande? Si la consulta tiene una alta probabilidad de ser basura, entonces lo que desea optimizar es determinar rápidamente el estado de basura. ¿Cuáles son las consecuencias de equivocar la respuesta, ya sea falso positivo o falso negativo? ¿Tiene que ser exacto para todas las imágenes? –
Ah, y ¿tiene que determinar * dónde * coincide la coincidencia, o simplemente si existe o no una coincidencia? –