suche algorithmus / idee zur bild in bild erkennung
-
hallo,
folgende ausgangslage: ich habe ein bild a. inhalt des bildes a ist ein screenshot von meinem monitor. und ich habe ein bild b. inhalt des bildes b ist ein ausschnitt von bild a und damit vom screenshot.
was ich möchte: ich möchte die position des ausschnitts (b) in bild a ermitteln. irgendwie müsste es mir also gelingen festzustellen, ob bild b überhaupt ein teilbild von a ist und wenn ja, wo es liegt.
ich habe jetzt schon eine weile nach verschiedenen bilderkennungen recherchiert und festgestellt, dass die meisten bild-, konturen- oder objekterkennungen für meinen fall zu komplex sind. oft wird sehr aufwändig nach ähnlichkeiten gesucht um zum beispiel ein objekt des fotos x in foto y wiederzufinden. x und y sind da aber unterschiedliche fotos vom selben objekt. mein fall müsste einfacher anzugehen sein, da ich ja tatsächlich dasselbe bild habe - wenn auch nur ein teilstück davon.
natürlich könnte man linear die pixel in bild a durchlaufen und testen, ob der pixel(farb)wert dem ersten pixel des gesuchten bilder entspricht und falls ja die restlichen pixel auch noch überprüfen.
ich hätte allerdings gerne einen etwas performanteren ansatz, bei dem ich nicht stur alle pixel überprüfe.
vielleicht hat ja jemand eine idee oder kennt einen für mich passenden algorithmus.
vielen dank vorab
-
j-k schrieb:
natürlich könnte man linear die pixel in bild a durchlaufen und testen, ob der pixel(farb)wert dem ersten pixel des gesuchten bilder entspricht und falls ja die restlichen pixel auch noch überprüfen.
ich hätte allerdings gerne einen etwas performanteren ansatz, bei dem ich nicht stur alle pixel überprüfe.
wie soll es denn sonst gehen ... der Unterschied zwischen Deinen beiden Bildern und den Fotos ist der, das Du nicht auf Ähnlichkeiten suchen musst ... sondern Identität ... beides geht nun mal nur über "alles abklappern" ... wobei Du schon beim ersten falschen Pixel abbrechen kannst - bei Ähnlichkeit muss dennoch weiter gemacht werden
-
ja wie es sonst gehen soll würde ich ja gerne wissen
ok, um eindeutig zu bestimmen ob ein bereich aus bild a gleich bild b ist muss ich natürlich eine gewisse anzahl von übereinstimmungen finden. klar. wahrscheinlich durch pixelvergleich. aber schon dabei bin ich mir nicht so ganz sicher ob es nicht eleganter geht.
aber der springende punkt ist ja auch eigentlich nicht einen bereich mit meinem bild b zu vergleichen und dann festzustellen, ob es dieselben informationen beinhaltet, sondern überhaupt erst einmal (und das möglichst schnell) einen bereich in bild a zu finden, den ich mit bild b vergleichen möchte. ich kann mir nur schwer vorstellen, dass die variante alle punkte von links oben nach rechts unten durchzugehen die schnellste sein soll.
man könnte beispielsweie nur jeden x-ten punkt untersuchen. aber: mit welchem punkt aus bild b vergleiche ich den dann?
ich bin offen für alles: verschiedenste suchansätze (algorithmen), nutzung von filtern, segmentierung, neuronale netze.. nur - ich weiß nicht in welcher richtung ich in meinem fall suchen muss um zu einer lösung zu gelangen.
danke
-
es geht nicht schneller - Du musst Punkt für Punkt testen ... kannst aber immerhin den nächsten StartPunkt wählen wenn ein Punkt nicht übereinstimmt ... in der Hinsicht hast Du sogar einen Vorteil gegenüber der Fotosuche
-
naja du kannst dir zumindest die breite und höhe des abschnitts sparen also 2 balken, ansonsten wirklich pixel für pixel also:
for(int i = 1; i < Bild.Höhe - Auschnitt.Höhe; i++) { for(int j = 1; j < Bild.Breite - Auschnitt.Breite; i++) { } }