F_VN_CheckColorRange

F_VN_CheckColorRange 1:

Check if the pixel values of an image lie in a given range. The destination image has the same size as the source image but only one channel with a pixel element size of 8 bit. Its elements are set to 255 if the corresponding pixels of the source image are in the checked range and set to 0 otherwise.

Syntax

Definition:

FUNCTION F_VN_CheckColorRange : HRESULT
VAR_INPUT
    ipSrcImage   : ITcVnImage;
    ipDestImage  : Reference To ITcVnImage;
END_VAR
VAR_IN_OUT
    aLowerBounds : TcVnVector4_LREAL;
    aUpperBounds : TcVnVector4_LREAL;
END_VAR
VAR_INPUT
    hrPrev       : HRESULT;
END_VAR

F_VN_CheckColorRange 2: Inputs

Name

Type

Description

ipSrcImage

ITcVnImage

Source image

ipDestImage

Reference To ITcVnImage

Destination image (An appropriate destination image will be created if required.)

hrPrev

HRESULT

HRESULT indicating the result of previous operations (If SUCCEEDED(hrPrev) equals false, no operation is executed.)

F_VN_CheckColorRange 3: In/Outputs

Name

Type

Description

aLowerBounds

TcVnVector4_LREAL

Channel-wise lower bounds (Unused channels are ignored.)

aUpperBounds

TcVnVector4_LREAL

Channel-wise upper bounds (Unused channels are ignored.)

F_VN_CheckColorRange 4: Return value

HRESULT

Weiterführende Informationen

Die Funktion F_VN_CheckColorRange segmentiert das Eingangsbild hinsichtlich eines bestimmten Wertebereichs. Somit ist es egal welcher Farbraum verwendet wird, da die Segmentierung rein numerisch erfolgt.

Parameter

Eingangsbild

Das Eingangsbild ipSrcImage kann jedes beliebige Format haben.

Ergebnisbild

Das Ergebnisbild ipDestImage gibt das segmentierte 1-kanalige 8-Bit Binärbild zurück.

Wertebereich

Der zu segmentierende Wertebereich wird durch die die untere Grenze aLowerBounds und obere Grenze aUpperBounds festlegen.

Bei zyklischen Wertebereichen wie dem Hue-Kanal im HSV-Raum kann der untere Grenzwert den oberen übersteigen, um Farbbereiche über den Nulldurchgang hinweg zu segmentieren. Ein Bereich von der unteren Grenze [250, ...] bis zur oberen Grenze [5, ...] entspricht dabei der Kombination von einem Funktionsaufruf mit [250, …] - [MAX, …] und [0, …] – [5, …]. Dadurch ist eine direkte Selektion von Farbtönen, die im Übergang des Wertebereichs liegen wie z.B. der Rot-Bereich (+-20° um 0°) im Hue-Kanal, mit einem Funktionsaufruf möglich.

F_VN_CheckColorRange 5:

Grenzvektoren initialisieren

Achten Sie immer darauf, die Grenzvektoren mit mindestens so vielen Elementen zu initialisieren, wie das Eingangsbild Kanäle hat. Wenn Sie beispielsweise ein 4-kanaliges Bild (z. B. mit Alpha-Kanal) segmentieren und die Farbvektoren nur mit drei Elementen initialisieren, sind die vierten Elemente der Vektoren 0 und das Ergebnisbild wird schwarz.

Anwendung

Für robuste Farbsegmentierungen ist grundsätzlich empfehlenswert, in einem anderen Farbraum als dem additiven RGB-Raum zu arbeiten. Zum Beispiel ist im HSV-Raum der Farbton (H) von Helligkeit (V) und Sättigung (S) getrennt, wodurch die Farbunterscheidung damit typischerweise weniger empfindlich auf Beleuchtungsschwankungen reagiert.

Die Segmentierung eines HSV-Bilds (HSV_FULL) für ein rotes Farbspektrum sieht z. B. so aus:

VAR
    aLower      :   TcVnVector4_LREAL := [250, 150, 100];
    aUpper      :   TcVnVector4_LREAL := [5, 255, 255];
END_VAR

hr := F_VN_CheckColorRange(
    ipSrcImage      := ipImageIn,
    ipDestImage     := ipImageRes,
    aLowerBounds    := aLower,
    aUpperBounds    := aUpper,
    hrPrev          := hr);

Beispiele

Verwandte Funktionen

Required License

TC3 Vision Base

System Requirements

Development environment

Target platform

PLC libraries to include

TwinCAT V3.1.4024.59 or later

PC or CX (x64) with min. PL50, e.g. Intel 4-core Atom CPU

Tc3_Vision