Algoritmo per la ricerca di immagini all'interno di immagini [chiuso]

2

Non posso rispondere a questa domanda, perché non riesco a trovare una buona domanda, quindi permettimi di descrivere quello che voglio e forse qualcuno sarà in grado di suggerire un modo per me.

Ho bisogno di risolvere il seguente problema: c'è una lista di immagini jpg. C'è anche una immagine "jpg" di origine. Devo trovare se questa immagine è un'immagine ritagliata dalla lista. Non so quale software è stato utilizzato per ritagliare e non ho alcun controllo su quale impostazione di qualità jpeg è utilizzata nell'immagine sorgente. Mi rendo conto che se l'impostazione è bassa il risultato non può essere irriconoscibile, ma mi piacerebbe in qualche modo poter controllare l'immagine sorgente rispetto a ciascuna delle immagini nell'elenco e ottenere un "sì" se trova una corrispondenza.

Idealmente mi piacerebbe una libreria .net per questo, ma potrei anche implementarla da sola se solo conoscessi un algoritmo appropriato (e la sua descrizione non è lunga 100 pagine). Dal momento che jpeg è un formato con perdite, non posso fare un confronto bit a bit, e anche se potessi non è immediatamente ovvio come trovare la parte corretta dell'immagine da confrontare, quindi non ci vuole troppo tempo, poiché il ritaglio può essere di dimensioni arbitrarie in un punto arbitrario dell'immagine.

Nel mio caso il ritaglio non viene mai ridimensionato o ruotato, quindi lo rende più semplice, ma non sono ancora sicuro da dove cominciare.

    
posta Andrew Savinykh 14.02.2014 - 09:46
fonte

2 risposte

2

Avrai bisogno di un riconoscimento del modello di immagine o di una libreria di confronto.,

Probabilmente dovresti dare un'occhiata a OpenCV e VLfeat .

Ad esempio puoi usare SIFT per confrontare le immagini , che funziona anche bene su immagini ruotate e ritagliate (di cui non hai nemmeno bisogno).

Il SIFT di VLfeat è piuttosto interessante

Nota: puoi anche utilizzare altri algoritmi per confrontare, setacciare è solo un esempio.

    
risposta data 14.02.2014 - 09:58
fonte
0

Non sono un esperto di elaborazione di immagini o altro, ma che ne dici di questo:

  • per prima cosa assicurati di avere strumenti disponibili per estrarre informazioni pixel dalle tue immagini JPEG. Cose come i valori RGB, ad esempio, dovrebbero essere sufficienti (dato che non si dispone di un canale alfa in un JPEG). A seconda della piattaforma scelta, questo potrebbe già essere fornito in bundle (ad esempio Java JDK ha ImageIO e BufferedImage che può ti aiuta a farlo . Per PHP, puoi usare < a href="http://www.php.net/manual/en/function.imagecolorat.php"> imagecolorat )

  • Otterrai una matrice per i pixel, in cui i valori all'interno di tale matrice sono una struttura che rappresenta i valori cromatici di ciascun pixel.

  • Per fare il controllo che ti serve, dal momento che stiamo parlando della possibilità che l'immagine ritagliata non sia più identica nel valore del colore del pixel all'originale da cui è stata ritagliata, puoi iniziare con trovare un modo per scoprire le proprietà dell'immagine ritagliata e quindi cercare di trovare un valore medio simile (con una tolleranza data) in un'area della stessa dimensione sulla possibile immagine "genitore". C'è un buon suggerimento su come eseguire questo tipo di corrispondenza "sottomatrice" qui

risposta data 14.02.2014 - 11:57
fonte

Leggi altre domande sui tag