Flächen erkennen

<module>/detect-area durchsucht ein Bild, einmal, und meldet die Regionen, die es findet.

Ausführen

Setzen Sie die Bildadresse und führen Sie aus:

module-1/detect-area/input/input-image-address = hdvisionsystems/lumiscan-cam-driver/camera1/output/image
write module-1/detect-area/execute

Lesen Sie dann output/status-code und output/result.

Alles andere hat einen funktionierenden Standardwert, dieser erste Durchlauf zeigt Ihnen also, ob überhaupt etwas gefunden wird. Das Abstimmen folgt: siehe Die Erkennung abstimmen und Eine Szene analysieren zum Einstellen des Schwellwerts.

Das Ergebnis

output/result ist ein area_detect_result-Flatbuffer.

Feld Bedeutung

blobs[].x, .y

Mittelpunkt der Region.

blobs[].area

[Pixel^2] Pixel, die die Region bedeckt, gezählt - nie aus einer angepassten Form abgeleitet.

blobs[].label

Welche Region dies in output/blob-labels ist - so wird eine gemeldete Fläche ihren Pixeln zugeordnet.

blobs[].bbox_x/y/width/height

Eng anliegendes Rechteck um die Region.

blob_count

Wie viele Regionen, für ein Steuerungsprogramm, das nur eine Anzahl braucht.

total_area

[Pixel^2] Summe über alle Regionen - die zentrale Zahl für eine Bedeckungsprüfung.

largest_index, largest_area

Die größte Region.

image_width, image_height

Der durchsuchte Bereich - das ganze Bild, sofern kein Crop gesetzt war.

preprocess_method

NONE, LOG, DOG oder DOH, wie angewendet.

timestamp

Mikrosekunden seit der Epoche, wann der Durchlauf abgeschlossen wurde.

Die Regionen sind nach Fläche sortiert, blobs[0] ist also die größte.

total_area ist meist die Zahl, auf die Sie reagieren: Bedeckungs-, Verunreinigungs- und Füllstandsprüfungen fragen alle "wie viel", nicht "wie viele".

Farbbilder

Es kann ein Grau- oder ein Farbbild hineingehen. Schwellwertbildung und Zusammenhangskomponenten sind Einkanal-Operationen, ein Farbbild wird also umgewandelt und wie jedes andere gemessen. Auf ctrlX OS liefert ein ctrlX-Bildknoten drei Farbkanäle, egal welche Kamera angeschlossen ist; eine Graustufenkamera erzeugt also drei identische Kopien. Es gibt kein Flag, und eine Region wird einmal gemeldet, wie viele Kanäle auch immer ankamen.

Die Suche einschränken

input/crop/{startX, startY, width, height} beschränkt die Suche auf einen Teil des Bildes. Eine Breite oder Höhe von null reicht bis zum entsprechenden Rand; die Standardregion mit lauter Nullen durchsucht also alles, und startX=100 mit Nullgrößen sucht von dort bis zur unteren rechten Ecke.

Zwei Gründe, sie zu verwenden: Geschwindigkeit, und das Ausschließen von Bereichen, in denen keine Region sein kann, was das Zählen von Hintergrundstörungen vermeidet.

Eine Region, die über einen Rand hinausreicht, wird abgelehnt und nicht beschnitten; die Meldung nennt die Eingabe und die Grenze, die sie verletzt hat.

Vorverarbeitung

input/preprocess/method wendet vor der Erkennung einen Filter an:

Methode Was sie tut

NONE

Der Standard.

LOG

Laplacian of Gaussian - Weichzeichnen, dann eine zweite Ableitung; hebt Regionen einer durch das Sigma festgelegten Größe hervor.

DOG

Difference of Gaussians - zwei Weichzeichnungen voneinander abgezogen, ein Bandpass. sigma-first muss sich von sigma-second unterscheiden.

DOH

Determinant of Hessian - kombinierte zweite Ableitungen. kernel-size muss 1, 3, 5 oder 7 sein.

Nur die Parameter der gewählten Methode werden gelesen, und nur sie werden geprüft.

Die Regionen selbst

Das Ergebnis enthält Zahlen, keine Pixel. Die Pixel stehen in output/blob-labels, das jeder Durchlauf veröffentlicht: eine Regionsnummer pro Pixel, und blobs[].label sagt, welche Nummer welche Region ist. Siehe Das Label-Bild.

Ein leeres Ergebnis

Eine leere blobs-Liste mit status-code 1 bedeutet, dass keine Regionen zutrafen - sonst nichts. Jeder andere Grund, aus dem ein Durchlauf nichts erzeugen könnte, wird vor der Erkennung abgefangen und als negativer Statuscode gemeldet. Siehe Ausführungsstatus.