Hochwasserfüllung: Flood Fill: Erkundung des dynamischen Terrains der Computer Vision
Von Fouad Sabry
()
Über dieses E-Book
Was ist Flood Fill
Flood Fill, auch Seed Fill genannt, ist ein Flooding-Algorithmus, der den Bereich bestimmt und ändert, der mit einem bestimmten Knoten in einem mehrdimensionalen Array verbunden ist mit einem passenden Attribut. Es wird im „Eimer“-Füllwerkzeug von Malprogrammen verwendet, um verbundene, ähnlich gefärbte Bereiche mit einer anderen Farbe zu füllen, und in Spielen wie Go und Minesweeper, um zu bestimmen, welche Teile entfernt werden. Eine Variante namens „Boundary Fill“ verwendet dieselben Algorithmen, ist jedoch als der Bereich definiert, der mit einem bestimmten Knoten verbunden ist, der kein bestimmtes Attribut aufweist.
Ihre Vorteile
(I) Einblicke und Validierungen zu den folgenden Themen:
Kapitel 1: Flutfüllung
Kapitel 2: Scanline-Rendering
Kapitel 3: Tiefe -erste Suche
Kapitel 4: Quadtree
Kapitel 5: Graphdurchquerung
Kapitel 6: Beschriftung verbundener Komponenten
Kapitel 7: Watershed (Bildverarbeitung)
Kapitel 8: Labyrinth-Lösungsalgorithmus
Kapitel 9: Ray Casting
Kapitel 10: Box Blur
(II) Beantwortung der häufigsten öffentlichen Fragen zu Flood Fill.
(III) Beispiele aus der Praxis für die Verwendung von Flood Fill in vielen Bereichen.
Für wen dieses Buch gedacht ist
Profis, Studenten und Doktoranden, Enthusiasten, Bastler und diejenigen, die über das Grundwissen oder die Informationen für jede Art von Flood Fill hinausgehen möchten.
Mehr von Fouad Sabry lesen
Neue Technologien In Der Materialwissenschaft [German]
Ähnlich wie Hochwasserfüllung
Titel in dieser Serie (100)
Multispektrale Bildgebung: Das Spektrum erschließen: Fortschritte in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenBildhistogramm: Visuelle Einblicke enthüllen und die Tiefen von Bildhistogrammen in der Computer Vision erkunden Bewertung: 0 von 5 Sternen0 BewertungenComputer Vision: Erkundung der Tiefen des Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenAffine Transformation: Visuelle Perspektiven freischalten: Erforschung der affinen Transformation in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenComputer-Stereo-Vision: Erforschung der Tiefenwahrnehmung in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenBildkompression: Effiziente Techniken zur visuellen Datenoptimierung Bewertung: 0 von 5 Sternen0 BewertungenLärmminderung: Verbesserung der Klarheit, fortschrittliche Techniken zur Rauschunterdrückung in der Bildverarbeitung Bewertung: 0 von 5 Sternen0 BewertungenTonzuordnung: Tone Mapping: Erhellende Perspektiven in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenInpainting: Überbrückung von Lücken in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenUnterwasser-Computervision: Erkundung der Tiefen der Computer Vision unter den Wellen Bewertung: 0 von 5 Sternen0 BewertungenFarbraum: Erkundung des Spektrums von Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenRetinex: Enthüllen Sie die Geheimnisse des computergestützten Sehens mit Retinex Bewertung: 0 von 5 Sternen0 BewertungenHough-Transformation: Enthüllung der Magie der Hough-Transformation in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenFilterbank: Einblicke in die Filterbanktechniken von Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenGemeinsame Fotoexpertengruppe: Erschließen Sie das Potenzial visueller Daten mit dem JPEG-Standard Bewertung: 0 von 5 Sternen0 BewertungenHadamard-Transformation: Enthüllung der Leistungsfähigkeit der Hadamard-Transformation in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenGamma-Korrektur: Verbesserung der visuellen Klarheit in der Computer Vision: Die Gammakorrekturtechnik Bewertung: 0 von 5 Sternen0 BewertungenRadon-Transformation: Aufdecken verborgener Muster in visuellen Daten Bewertung: 0 von 5 Sternen0 BewertungenHomographie: Homographie: Transformationen in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenAnisotrope Diffusion: Verbesserung der Bildanalyse durch anisotrope Diffusion Bewertung: 0 von 5 Sternen0 BewertungenFarbanpassungsfunktion: Spektrale Empfindlichkeit in Computer Vision verstehen Bewertung: 0 von 5 Sternen0 BewertungenHistogrammausgleich: Verbesserung des Bildkontrasts für eine verbesserte visuelle Wahrnehmung Bewertung: 0 von 5 Sternen0 BewertungenModell des menschlichen visuellen Systems: Wahrnehmung und Verarbeitung verstehen Bewertung: 0 von 5 Sternen0 BewertungenEpipolare Geometrie: Erschließung der Tiefenwahrnehmung in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenFarbmanagementsystem: Optimierung der visuellen Wahrnehmung in digitalen Umgebungen Bewertung: 0 von 5 Sternen0 BewertungenAdaptiver Filter: Verbesserung der Computer Vision durch adaptive Filterung Bewertung: 0 von 5 Sternen0 BewertungenDirekte lineare Transformation: Praktische Anwendungen und Techniken in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenGeometrisches Hashing: Effiziente Algorithmen zur Bilderkennung und -anpassung Bewertung: 0 von 5 Sternen0 BewertungenCanny Edge Detector: Enthüllung der Kunst der visuellen Wahrnehmung Bewertung: 0 von 5 Sternen0 BewertungenKonturerkennung: Enthüllung der Kunst der visuellen Wahrnehmung in der Computer Vision Bewertung: 0 von 5 Sternen0 Bewertungen
Ähnliche E-Books
Level-Set-Methode: Weiterentwicklung der Computer Vision, Erforschung der Level-Set-Methode Bewertung: 0 von 5 Sternen0 BewertungenEntfernung verdeckter Linien: Das Unsichtbare enthüllen: Geheimnisse des Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenStrichzeichnungsalgorithmus: Beherrschen von Techniken zur präzisen Bildwiedergabe Bewertung: 0 von 5 Sternen0 BewertungenNebenläufigkeit in Java und C++ Bewertung: 0 von 5 Sternen0 BewertungenC# 8.0 – kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenEinstieg ins Machine Learning: Grundlagen, Prinzipien, erste Schritte Bewertung: 0 von 5 Sternen0 BewertungenPartitionierung des binären Raums: Erkundung der binären Raumpartitionierung: Grundlagen und Anwendungen in der Bildverarbeitung Bewertung: 0 von 5 Sternen0 BewertungenBresenham-Linien-Algorithmus: Effiziente pixelgenaue Linienwiedergabe für Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenDas Vulkan-API: Teil 3: Umgang mit 3-D-Daten Bewertung: 0 von 5 Sternen0 BewertungenErfolgreiche Spieleentwicklung: Minecraft-Welten erschaffen Teil 2 Bewertung: 0 von 5 Sternen0 BewertungenLaplace-Transformation: Kompendium Simulation und Regelung technischer Prozesse, Teil 4 Bewertung: 0 von 5 Sternen0 BewertungenZufallsstichprobenkonsens: Robuste Schätzung in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenC# 10 – kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenHistogrammausgleich: Verbesserung des Bildkontrasts für eine verbesserte visuelle Wahrnehmung Bewertung: 0 von 5 Sternen0 BewertungenNumerische Grundlagen der Simulation: Kompendium Simulation und Regelung technischer Prozesse, Teil 5 Bewertung: 0 von 5 Sternen0 BewertungenJava 8 Streams Bewertung: 0 von 5 Sternen0 BewertungenDatenvisualisierung mit Processing Bewertung: 0 von 5 Sternen0 BewertungenHough-Transformation: Enthüllung der Magie der Hough-Transformation in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenVoxel: Erkundung der Tiefen des Computer Vision mit Voxel-Technologie Bewertung: 0 von 5 Sternen0 BewertungenC# 6.0 – kurz & gut Bewertung: 5 von 5 Sternen5/5Sprachenkompendium: Vala, Go und Rust Bewertung: 0 von 5 Sternen0 BewertungenComputer-Vision-Grafikschnitte: Erforschung von Graphschnitten in der Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenBlockchain kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenBestimmung verdeckter Oberflächen: Enthüllung der Geheimnisse des Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenWavelets und Anwendungen Bewertung: 0 von 5 Sternen0 BewertungenApproximation der Lösungen von Differentialgleichungen mit Wavelets und Einstellung der Parameter Bewertung: 0 von 5 Sternen0 BewertungenLeast Squares: Optimierungstechniken für Computer Vision: Methoden der kleinsten Quadrate Bewertung: 0 von 5 Sternen0 BewertungenRuby Pakete 100 Stöße: Eine Stunde Meisterklasse, Ausgabe 2024 Bewertung: 0 von 5 Sternen0 BewertungenZweidimensionale Computergrafik: Erkundung des visuellen Bereichs: Zweidimensionale Computergrafiken in Computer Vision Bewertung: 0 von 5 Sternen0 BewertungenMerkmalskonstruktion für Machine Learning: Prinzipien und Techniken der Datenaufbereitung Bewertung: 0 von 5 Sternen0 Bewertungen
Künstliche Intelligenz (KI) & Semantik für Sie
Wissen statt Glauben!: Das Weltbild des neuen Humanismus Bewertung: 0 von 5 Sternen0 BewertungenChatbotische Medien-Gestaltung leicht gemacht: Von der Idee zum viralen Hit Bewertung: 0 von 5 Sternen0 BewertungenKI-Innovationen: Wie die Technologie die Grenzen verschiebt Künstliche Intelligenz verstehen und nutzen: Ein AI-Buch Bewertung: 0 von 5 Sternen0 BewertungenDie Zukunft der Arbeit: Digitalisierung, Automatisierung, KI Bewertung: 0 von 5 Sternen0 BewertungenKünstliche Intelligenz: Die vierte industrielle Revolution Bewertung: 0 von 5 Sternen0 BewertungenDie KI Bibel, mit künstlicher Intelligenz Geld verdienen: Echte Fallbeispiele und Anleitungen zum Umsetzen Bewertung: 1 von 5 Sternen1/5ChatGPT – Für Einsteiger: Schreibprofi mit KI, Zeit und Geld sparen ohne peinliche Fehler Bewertung: 0 von 5 Sternen0 BewertungenMeistern von ChatGPT: Entriegeln Sie die Kraft der KI für verbesserte Kommunikation und Beziehungen: German Bewertung: 0 von 5 Sternen0 BewertungenRoboter im Alltag: Maschinen (beinahe) wie Menschen Bewertung: 0 von 5 Sternen0 BewertungenChatGPT: Epische Reise des Erfolgs - 'Steigern Sie Ihren Reichtum': Mit Screenshots aus dem echten Leben - Erreichen Sie finanzielle Höhen Bewertung: 0 von 5 Sternen0 BewertungenPsychologie des Sozialismus Bewertung: 0 von 5 Sternen0 BewertungenEinstieg ins Machine Learning: Grundlagen, Prinzipien, erste Schritte Bewertung: 0 von 5 Sternen0 BewertungenChatGPT: Begegnung mit einer neuen Welt: Lernen Sie Künstliche Intelligenz mit der Gratisversion ChatGPT 3.5 Bewertung: 0 von 5 Sternen0 BewertungenChatbotische Landingpages: Wie du deine Konkurrenz in den digitalen Staub schicken Bewertung: 0 von 5 Sternen0 BewertungenAufstieg der Roboter: Wie unsere Arbeitswelt gerade auf den Kopf gestellt wird - und wie wir darauf reagieren müssen Bewertung: 0 von 5 Sternen0 BewertungenKünstliche Intelligenz in Sozialen Medien Bewertung: 0 von 5 Sternen0 BewertungenMenschlicher Geist und Künstliche Intelligenz: Die Entwicklung des Humanen inmitten einer digitalen Welt Bewertung: 0 von 5 Sternen0 BewertungenDigitalotopia: Sind wir bereit für die (R)Evolution der Wirklichkeit? Bewertung: 0 von 5 Sternen0 Bewertungen
Rezensionen für Hochwasserfüllung
0 Bewertungen0 Rezensionen
Buchvorschau
Hochwasserfüllung - Fouad Sabry
Kapitel 1: Flutfüllung
Flood Fill, auch bekannt als Seed Fill, ist ein Flooding-Algorithmus, der den Bereich in einem mehrdimensionalen Array auswählt und ändert, das einem bestimmten Knoten mit einem bestimmten Attribut zugeordnet ist. Es wird in Spielen wie Go und Minesweeper verwendet, um zu bestimmen, welche Teile gelöscht werden, sowie im Eimer
-Füllwerkzeug von Malanwendungen, um verbundene, ähnlich gefärbte Bereiche mit einem bestimmten Farbton zu füllen. Der Bereich, der mit einem bestimmten Knoten verbunden ist, aber kein bestimmtes Attribut hat, ist das, was mit der Variation gemeint ist, die als Randfüllung bekannt ist und die gleichen Techniken verwendet.
Beachten Sie, dass beim Füllen von Flächen bestimmte Pixel in spitzeren Ecken fehlen, was es für das Zeichnen von gefüllten Polygonen ungeeignet macht. Aktivieren Sie stattdessen die Ungleich-Null-Regel und die Gerade-Ungerade-Regel.
Für den klassischen Flood-Fill-Algorithmus sind drei Variablen erforderlich: ein Startknoten, eine Zielfarbe und eine Ersatzfarbe. Die Methode wechselt zur Ersatzfarbe für jeden Knoten im Array, der über einen Pfad mit dem Startknoten verbunden ist, der die Zielfarbe darstellt. Anstelle der Zielfarbe wird eine Rahmenfarbe für eine Begrenzungsfüllung bereitgestellt.
Stattdessen werden in den folgenden Beschreibungen zwei Routinen bereitgestellt, um die Methode in der üblichen Weise zu verallgemeinern. Dazu gehören Set, das ein Pixel oder einen Knoten füllt, und Inside, das true für nicht gefüllte Punkte zurückgibt, die sich aufgrund ihrer Farbe innerhalb des gefüllten Bereichs befinden würden. Sobald Set auf einem Knoten aufgerufen wurde, muss er das Inside verlassen.
Es gibt zwei Versionen, je nachdem, ob wir Knoten, die sich an den Ecken berühren, als verbunden zählen oder nicht: Acht-Wege- bzw. Vier-Wege-Knoten.
Im Folgenden finden Sie die früheste bekannte Vier-Wege-Flood-Fill-Implementierung, die implizit stapelbasiert ist:
Flood-Fill (Knoten):
1. Wenn der Knoten nicht Inside ist, kehren Sie zurück.
2. Festlegen des Knotens
3. Führen Sie Flood-filling einen Schritt südlich des Knotens durch.
4. Führen Sie die Flutfüllung einen Schritt nördlich des Knotens durch
5. Führen Sie Flood-Fill einen Schritt westlich des Knotens durch
6. Führen Sie Flood-Fill einen Schritt östlich des Knotens durch
7. Rückgabe.
In Sprachen und Situationen, in denen der Stapelplatz extrem eingeschränkt ist, ist die Implementierung der oben verwendeten Technik einfach zu verstehen, aber nicht praktikabel (z. B. Mikrocontroller).
Ein Stapelüberlauf wird vermieden, indem die Rekursion in eine Datenstruktur verschoben wird, z. B. in einen Stapel oder eine Warteschlange. Die Wahl der Datenstruktur wirkt sich auf das Proliferationsmuster aus, ähnelt jedoch der einfachen rekursiven Methode, da sie die Knoten zur Nutzung in einen Stapel oder eine Warteschlange schiebt, anstatt rekursive Aufrufe durchzuführen:
Flood-Fill (Knoten):
1. Setzen Sie Q auf die leere Warteschlange oder den leeren Stapel.
2. Fügen Sie den Knoten am Ende von Q hinzu.
3. Solange Q nicht leer ist:
4. Setze n gleich dem ersten Element von Q.
5. Entfernen Sie das erste Element aus Q.
6. Wenn n drin ist:
Setzen Sie die Option n
Fügen Sie den Knoten westlich von n am Ende von Q hinzu.
Fügen Sie den Knoten östlich von n am Ende von Q hinzu.
Fügen Sie den Knoten nördlich von n bis zum Ende von Q hinzu.
Fügen Sie den Knoten südlich von n bis zum Ende von Q hinzu.
7. Wiederholen Sie die Schleife, bis Q erschöpft ist.
8. Rückgabe.
Bevor Sie einen Knoten zum Stapel oder zur Warteschlange hinzufügen, bestimmen Sie seine Pixelfarbe und legen Sie sie fest, um die Größe des Stapels oder der Warteschlange zu minimieren.
Verwenden Sie eine Schleife, um sich in Ost-West-Richtung zu bewegen, während Sie Pixel oben und unten in die Warteschlange stellen (was den Algorithmen zum Füllen von Spannen ähnelt, siehe unten).
Um Out-of-Order-Prozessoren mehr Möglichkeiten zur Parallelisierung zu bieten, verschachteln Sie zwei oder mehr Kopien des Codes mit zusätzlichen Stapeln und Warteschlangen.
Verwenden Sie mehrere Threads, idealerweise mit leicht unterschiedlichen Besuchsplänen, damit sie sich nicht an einem Ort versammeln.
Unkomplizierte Methode, die einfach und fehlerfrei zu erstellen ist.
Speicherintensiv, insbesondere bei Verwendung eines Stacks.
Testet die am häufigsten gefüllten Pixel insgesamt viermal.
Das Füllen von Mustern ist nicht möglich, da die Ergebnisse von Pixeltests geändert werden müssen.
Das Zugriffsmuster für die Warteschlangenvariante ist nicht cachefreundlich.
Schwierig zu optimieren für Bitebenen oder Multi-Pixel-Wörter.
Die Arbeit mit Spannweiten, einer Zeile mit konstantem y, ermöglicht eine weitere Optimierung. Das erste veröffentlichte vollständige Beispiel funktioniert nach dem folgenden Grundsatz:.
Füllen Sie links und rechts nach einem Keimpunkt. Behalten Sie den Überblick über die am weitesten links und ganz rechts gefüllten Punkte, lx bzw. rx. Damit ist die Reichweite festgelegt.
Suchen Sie nach weiteren Startpunkten, indem Sie von lx nach rx oberhalb und unterhalb des aktuellen Startpunkts scannen.
Der Scanvorgang ist so optimiert, dass nur die Seed-Punkte am Anfang der folgenden Spanne neu gestartet werden müssen. Eine Warteschlange untersucht zuerst Spannen, während ein Stapel zuerst Spannen in Bezug auf die Tiefe untersucht.
Obwohl die am meisten gefüllten Pixel insgesamt dreimal überprüft werden, ist dieser Ansatz in Bezug auf Implementierungen und Zitate der gebräuchlichste.
fn fill(x, y):
wenn nicht Inside(x, y), dann return
let s = neuer leerer Stack oder neue Warteschlange
Addieren Sie (x, y) zu s
während s nicht leer ist:
Entfernen eines (x, y) aus s
let lx = x
while Inside(lx - 1, y):
Satz(lx - 1, y)
lx = lx - 1
while Inside(x, y):
Satz(x, y)
x = x + 1
Scan(lx, x - 1, y + 1, s)
scannen (lx, x - 1, y - 1, s)
Fn-Scan (lx, rx, y, s):
let span_added = false
für x in lx .. rx:
wenn nicht Inside(x, y):
span_added = falsch
Andernfalls, wenn nicht span_added:
Addieren Sie (x, y) zu s
span_added = wahr
Im Laufe der Zeit wurden folgende Verbesserungen vorgenommen:
Ein neuer Scan müsste nicht in die Warteschlange gestellt werden, wenn er sich vollständig innerhalb einer übergeordneten Spanne befände, da er nur gefüllte Pixel erkennen würde.
Darüber hinaus müssen nur die Überhänge (U-Turns und W-Turns) gescannt werden, wenn ein neuer Scan eine übergeordnete Spanne kreuzt.
Sie können sich bei der Suche nach Samen satt machen.
fn fill(x, y):
wenn nicht Inside(x, y), dann return
let s = neue leere Warteschlange oder neuer Stack
Addieren Sie (x, x, y, 1) zu s
Addieren Sie (x, x, y - 1, -1) zu s
während s nicht leer ist:
Entfernen Sie ein (x1, x2, y, dy) aus s
Sei x = x1
if Inside(x, y):
while Inside(x - 1, y):
Satz(x - 1, y)
x = x - 1
Wenn x < x1:
Addiere (x, x1-1, y-dy, -dy) zu s
während x1 <= x2:
while Inside(x1, y):
Satz(x1, y)
x1 = x1 + 1
Addiere (x, x1 - 1, y+dy, dy) zu s
Wenn x1 - 1 > x2:
Addiere (x2