stavo solo lavorando a qualcosa di simile e il risultato rapido e sporco mi è venuta è quella di usare l'esecuzione di AForge.Net di "ExhaustiveTemplateMatching" con le immagini 1/4 delle loro dimensioni. Le immagini a 720p a grandezza intera sono durate un paio di minuti, ma con una dimensione di 1/4 sono circa un secondo sul mio computer.
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;
}
}
Si potrebbe anche, naturalmente, basta controllare per tm.length> 0 e sì, ci sono alcune divisioni non necessarie in là: P
Come esatto ha a che essere? Potresti ridimensionare le immagini a metà delle dimensioni e confrontare? – jestro
Puoi dirci qualcosa sul contenuto delle immagini? Sono bitmap statici casuali o c'è qualche struttura di cui si potrebbe trarre vantaggio? Inoltre, puoi dirci qual è la probabilità che la query sia "spazzatura"? Cioè, qual è la probabilità che la piccola immagine NON venga trovata nell'immagine grande? Se la query ha un'alta probabilità di essere spazzatura, ciò che si desidera ottimizzare è determinare rapidamente lo stato della posta indesiderata. Quali sono le conseguenze di una risposta errata, falsi positivi o falsi negativi? Deve essere esatto per tutte le immagini? –
Oh, e devi determinare * dove * è la partita, o solo se esiste una corrispondenza? –