Kontrastspreizung
Der Kontrast ist ein Maß für die Spanne der Intensitätswerte in einem Bild und ist definiert als die Differenz zwischen dem maximalen Pixelwert und dem minimalen Pixelwert. Der volle Kontrast eines 8-Bit-Bildes beträgt $ 255 (max) – 0 (min) = 255$.
Jeder Wert darunter bedeutet, dass das Bild einen geringeren Kontrast aufweist als möglich. Die Kontrastspreizung versucht, den Kontrast des Bildes zu verbessern, indem der Bereich der Intensitätswerte mittels linearer Skalierung gedehnt wird.
Nehmen wir an, dass $𝐼$ das ursprüngliche Eingabebild und $𝑂$ das Ausgabebild ist. Seien $𝑎$ und \𝑏 die minimal und maximal zulässigen Pixelwerte (für ein 8-Bit-Bild bedeutet dies $𝑎$ = 0 und $𝑏$ = 255) und seien $𝑐$ und $𝑑 $ die in $𝐼$ gefundenen minimalen und maximalen Pixelwerte. Dann ist das kontrastgespreizte Bild $𝑂$ durch folgende Funktion gegeben:
\( 𝑂(𝑥, 𝑦) = (𝐼(𝑥, 𝑦) − 𝑐)( \frac {b-a}{d-c}) +a\)
Kantenerkennung
Kanten sind eine wichtige Quelle für semantische Informationen in Bildern. Sie treten in der menschlichen visuellen Wahrnehmung an Abgrenzungen zwischen Bereichen unterschiedlicher Intensität, Farbe oder Textur auf. Ein Graustufenbild kann man sich wie eine 2D-Landschaft vorstellen, in der Bereiche unterschiedlicher Intensität auf verschiedenen Höhen liegen. Ein Übergang zwischen Bereichen unterschiedlicher Intensität in einem Bild $𝐼$ bedeutet, dass dort eine steile Steigung vorhanden sein muss, die wir als Gradienten (Vektor) formalisieren:
Da das Bild 𝐼 diskret ist, müssen wir die kontinuierlichen Ableitungen $\frac{\partial I}{\partial x}$ durch finite Differenzen approximieren. Einfache Beispiele für Faltungskerne, die finite Differenzen berechnen, sind die wie folgt definierten Sobel-Filter:
- heading
- code
-
def edge_detection(image, filter): image_x = convolution2D(image, filter) plt.imshow(image_x, cmap='gray') plt.title("Horizontal Edge S_x") plt.show() image_y = convolution2D(image, np.flip(filter.T, axis=0)) plt.imshow(image_y, cmap='gray') plt.title("Vertical Edge S_y") plt.show() G_magnitude = np.sqrt(np.square(image_x) + np.square(image_y)) max_value = get_max_ele(G_magnitude) print("max value is :",max_value,"we need normalize it") # normalize the result G_magnitude = G_magnitude * 255.0 / max_value plt.imshow(G_magnitude, cmap='gray') plt.title("result") plt.show() return G_magnitude