var_threshold
— Segmentieren mit Schwellen durch lokale Analyse von Mittelwert und
Standardabweichung.
var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )
Mit var_threshold
ist es möglich, Pixel des Eingabebildes
Image
zu selektieren, die
eine hohe lokale Standardabweichung (für positive
StdDevScale
), oder eine niedrige lokale Standardabweichung (für
negative StdDevScale
) aufweisen
und
lokal hell oder dunkel sind, gemäß LightDark
.
Damit ist es möglich, Regionen in einem unregelmäßigen, verrauschten oder ungleichmäßig ausgeleuchteten Hintergrund zu finden.
Die Größe der Filtermaske, die durch MaskWidth
und
MaskHeight
festgelegt wird, bestimmt die maximale Größe der
Objekte, die segmentiert werden. Wenn die Maske allerdings zu groß ist,
können Objekte, die dicht nebeneinander sind, miteinander verbunden werden.
(1) | (2) |
(3) | (4) |
Wenn MaskWidth
oder MaskHeight
gerade Werte enthalten, werden die nächstgrößeren ungeraden Werte
genutzt. Insgesamt kann 3 als geringster sinnvoller Wert
angesehen werden.
Die lokale Standardabweichung wird als Maß für das Rauschen im Bild genutzt.
Sie kann durch StdDevScale
auf die gewünschte Empfindlichkeit
skaliert werden. Ein höherer Wert bedeutet, dass Pixel selektiert werden,
die sich stark von ihrer Umgebung unterscheiden.
Ein sinnvoller Wertebereich für den Parameter StdDevScale
liegt zwischen -1.0 und 1.0. Vorgeschlagen wird der Wert 0.2.
Wenn der Wert zu groß oder zu klein gewählt wird, kann eine komplett volle
oder leere Region zurückgegeben werden.
(1) | (2) |
In homogenen Bereichen eines Bildes ist die Standardabweichung gering; der
Einfluss von einzelnen Grauwerten ist daher sehr hoch. Um die
Empfindlichkeit des Operators in homogenen Bereichen zu reduzieren, kann
AbsThreshold
angepasst werden. Damit können kleine
Grauwertänderungen in homogenen Umgebungen ignoriert werden. Beachten Sie,
falls Sie StdDevScale
negativ wählen, sollte AbsThreshold
entsprechend auch negativ sein.
Wenn 'light' oder 'dark' ausgewählt sind, werden jeweils alle Pixel selektiert, die heller bzw. dunkler als ihre Umgebung sind. 'equal' selektiert alle Pixel, die von keiner der beiden Einstellungen ausgewählt werden; also alle Pixel, die ihrer Umgebung recht ähnlich sind. 'not_equal' vereint alle Pixel von 'light' und 'dark' ; es werden also alle Pixel selektiert, die sich von ihrer Umgebung unterscheiden.
(1) | (2) |
var_threshold
selektiert die Regionen des
Eingabebildes Image
, in denen die Bildpunkte eine
Schwellenwertbedingung erfüllen. Der Schwellenwert wird aus dem
Mittelwert und der Standardabweichung in einer lokalen Maske der
Größe MaskWidth
x MaskHeight
um jeden Bildpunkt
(x,y) berechnet.
Sei
g(x,y) der Grauwert des Eingabebildes Image
an der
Position (x,y),
m(x,y) der korrespondierende Mittelwert, und
d(x,y) die Standardabweichung der Grauwerte in der Maske um den Bildpunkt.
Der variable Schwellenwert v(x,y) ist dann definiert als
oder
Interpretation: Für eine positive StdDevScale
wird jeder Pixel
analysiert. Es wird überprüft, ob der benutzerdefinierte Wert von
AbsThreshold
oder die skalierte Standardabweichung größer ist.
Der größere Wert wird als variabler Schwellenwert v(x,y) genutzt. Für eine
negative StdDevScale
wird der jeweils kleinere Wert genutzt.
Welche Pixel basierend auf dem variablen Schwellenwert ausgewählt werden,
bestimmt der Parameter LightDark
:
LightDark
= 'light' :
Interpretation: Falls ein Pixel um v(x,y) heller ist als seine Umgebung, wird er selektiert.
LightDark
= 'dark' :
Interpretation: Falls ein Pixel um v(x,y) dunkler ist als seine Umgebung, wird er selektiert.
LightDark
= 'equal' :
Interpretation: Es werden genau die Pixel ausgewählt, die weder von 'light' noch von 'dark' ausgewählt werden, also die Pixel, die ihrer Umgebung recht ähnlich sind.
LightDark
= 'not_equal' :
Interpretation: Es werden alle Pixel von 'light' und 'dark' ausgewählt, also alle Pixel, die sich um v(x,y) von ihrer Umgebung unterscheiden.
Dieser Operator liefert eventuell unerwartete Resultate zurück, wenn ein Bild mit einer reduzierten Domäne als Input übergeben wird. Weitere Informationen können im Kapitel Filter gefunden werden.
Image
(input_object) singlechannelimage(-array) →
object (byte / int2 / int4 / uint2 / real)
Eingabebild.
Region
(output_object) region(-array) →
object
Segmentierte Regionen.
MaskWidth
(input_control) extent.x →
(integer)
Breite des Maskenfensters für Mittelwert- und Standardabweichungsberechnung.
Defaultwert: 15
Wertevorschläge: 9, 11, 13, 15
Restriktion: MaskWidth >= 1
MaskHeight
(input_control) extent.y →
(integer)
Höhe des Maskenfensters für Mittelwert- und Standardabweichungsberechnung.
Defaultwert: 15
Wertevorschläge: 9, 11, 13, 15
Restriktion: MaskHeight >= 1
StdDevScale
(input_control) number →
(real / integer)
Faktor für die Standardabweichung der Grauwerte.
Defaultwert: 0.2
Wertevorschläge: -0.2, -0.1, 0.1, 0.2
AbsThreshold
(input_control) number →
(real / integer)
Minimale Grauwertdifferenz zum Mittelwert.
Defaultwert: 2
Wertevorschläge: -2, -1, 0, 1, 2
LightDark
(input_control) string →
(string)
Schwellenwerttyp.
Defaultwert: 'dark'
Werteliste: 'dark' , 'equal' , 'light' , 'not_equal'
Sei A die Größe der Eingaberegion, dann beträgt die Laufzeit O(A).
var_threshold
gibt 2 (H_MSG_TRUE) zurück, wenn alle Parameter korrekt
angegeben sind. Das Verhalten bezüglich der Eingabebilder und
Ausgaberegionen kann mit den Werten von 'no_object_result',
'empty_region_result', und 'store_empty_region' im Operator
set_system
kontrolliert werden. Wenn nötig wird eine
Ausnahmebehandlung vorgenommen.
W.Niblack, “An Introduction to Digital Image Processing“, Page 115-116, Englewood Cliffs, N.J., Prentice Hall, 1986
Foundation