computer-visionErste Schritte mit Computer Vision


Bemerkungen

Digitale Bildverarbeitung und Computer Vision sind ein interessantes Gebiet, da es in der Mathematik und in der Informatik liegt. Daher ist es sehr hilfreich, die Grundlagen zu verstehen und sie mithilfe von Programmierung anzuwenden, um das Thema zu verstehen.

Digitale Bilder sind die Diskretisierung von 2- oder 3-dimensionalen Signalen. Mit anderen Worten sind digitale Bilder abgetastete Sätze von Pixeln oder Voxeln fortlaufender Domänen.

                                        f : R² ⊃ Ω → R

Wo ist das digitale Bild über Ω: Rechteckige Bilddomäne

Der Einfachheit halber werden nur zweidimensionale digitale Bilder behandelt, wie in unseren StackOverflow-Avataren.

Über Pixel: Ein kurzer Hinweis zu Pixelwerten, bevor wir über die Bildtypen diskutieren. Als Faustregel gilt, dass die Pixel mit dem Wert 0 beginnen, der kein Licht (schwarz) bedeutet, die maximale Intensität (z. B. Weiß) bis 1 erreichen und in ganzen Zahlen dargestellt werden.

Binäre Bilder: Nur Schwarzweißbilder. Jedes Pixel ist entweder 0 oder 1, jedes Pixel kann durch ein Bit dargestellt werden. Sie sind nicht sehr bekannt, da sie in der Regel in wissenschaftlichen Anwendungen oder für andere Bildverarbeitungsvorgänge als Maske verwendet werden.

Lena-Bild in binärer Form

Ein Beispiel für ein binäres Bild. (Warnung, dass die Bildpixelwerte dieser Datei nicht unbedingt binär sind, dies ist zur Demonstration; dies ist auch Lena, der Star der Bildverarbeitungswelt.)

Graustufenbilder: Dank Online-Filtern kennt jeder diese Bilder noch sehr gut. Diese Bilder sind im Allgemeinen ein Byte pro Pixel, wobei 0 schwarz und 255 weiß ist. Alles dazwischen ist ein anderer Ton als grau, da der Mensch nur 40 Graustufen unterscheiden kann. Dieser Bereich reicht für viele Anwendungen aus (Beachten Sie die Werte von Pixeln werden hier von 0 bis 1 auf die Byte-Werte 0 - 255 abgebildet.

Lena-Bild in Graustufen

Farbbilder: Schließlich die häufigsten digitalen Bildtypen, Farbbilder. Das Konzept der Kanäle muss hier erwähnt werden. Digitale Bilder haben auch Kanäle. Tatsächlich sind oben beschriebene Binär- und Graustufenbilder auch Kanäle. Die gebräuchlichste Beschreibung wäre das RGB-Modell (Rot-Grün-Blau). In diesem Fall verfügt das Bild über 3 Kanäle (nicht mit Abmessungen verwechseln, dies sind immer noch 2D-Bilder), um die Rötung, Unschärfe und das Grün des Bildes zu beschreiben. In diesem Fall ist jedes Pixel ein Triplett, ein Wert zwischen 0 - 255 (kein Rot bis zum meisten Rot), 0 - 255 (kein Grün bis zum größten Grün), 0 - 255 (kein Blau für das meiste Blau). Bei diesem Modell ist Pixel {0,0,0} schwarz, {255,255,255} ist weiß, {255,0,0} ist rot, {255, 255, 0} ist gelb. Farbe ist jedoch ein sehr breites Thema, und Sie können die Referenzen auf weitere Informationen überprüfen.

Lena Bild in Farbe

Hyperspektrale Bilder:

Nachdem wir die Kanäle besprochen haben, ist es einfacher, über hyperspektrale Bilder zu sprechen. Diese Bilder können hunderte von Kanälen haben und werden häufig in der Mikroskopie, Satellitenbildgebung usw. verwendet.

Lesungen

  1. Signalabtastung: https://en.wikipedia.org/wiki/Sampling_(signal_processing)

  2. Bibel der digitalen Bildverarbeitung: RC Gonzalez, RE Woods: Digitale Bildverarbeitung. Dritte Ausgabe, Pearson Prentice Hall, Upper Saddle River, 2008.

  3. Computer Vision Review (Bis zum tiefen Lernen): R. Szeliski: Computer Vision: Algorithmen und Anwendungen. Springer, New York, 2010.

  4. Um ein Verständnis für binäre, Graustufen- und Farbbilder zu erhalten, gehen Sie folgendermaßen vor: https://en.wikipedia.org/wiki/Grayscale

Beispiele

Dies ist eine sehr einfache Python-Übungsreihe zur Bildverarbeitung und Bildverarbeitung, die dazu gedacht ist, diese Themen mit wenigen praktischen Übungen vorzustellen. Ich entschuldige mich im Voraus für eventuelle Anfängerfehler, es befindet sich noch in der Entwicklung. In dieser Serie beschränke ich mich auf digitale Bilder, die wir der Einfachheit halber auf PNG-Dateien verwenden können, wobei ich auch auf das Thema Bildkomprimierung eingehen werde.

Bitte klonen Sie das Repository, falls Sie dies noch nicht getan haben, oder laden Sie es einfach hier über Github herunter:

git clone https://github.com/Skorkmaz88/compvis101
 

Es gibt zwei Dateien, die Sie verwenden können, eine davon ist tutorial0.py und die andere ist readingImages.ipynb. Die zweite ist ein ipython-Notizbuch, falls Sie dies vorziehen. Aber zwei Dateien machen dasselbe.

Code hat Erklärungen in Kommentaren, ich bin


 # libs
import png

# We create a greyscale image as described in our text.
# To do that simply, we create a 2D array in python. 
# x and y, x being horizontal and y being vertical directions.

x  = []
y = []
# Play around with these pixels values to get different grayscale images, they shoud be 
# in range of 0 - 255. 
white = 255
gray = 128
black = 0
width  = 100
height = 300

# Add 100 x 100 rectangle as just white(255) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(white); # Pixel (i,j) is being set to a value, rest is coding trick to nest two lists 
    x.append(y)
    y = []
    
# Add 100 x 100 rectangle as just mid-gray(128) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(gray);
    x.append(y)
    y = []

# Add 100 x 100 rectangle as just black(0) valued pixels
for i in range(0, 100):
    for j in range(0,100):
        y.append(black);
    x.append(y)
    y = []

# output image file 
f = open('out.png', 'wb')
w = png.Writer(width, height , greyscale=True, bitdepth=8)
w.write(f, x)
f.close()
# If everything went well, you should have 3 vertically aligned rectangles white, gray and black 
# Check your working folder

# PART 2
# Read a grayscale image and convert it to binary

# This time we will binarize a grayscale image, to do that we will read pixels and according to threshold we set
# we will decide if that pixel should be white or black 

# This file is originally 8 bit png image, can be found in github repository, you should use only this type of
# images if you want to change the image.
f = open('./img/lenaG.png', 'r')

r=png.Reader(file=f)
# You will the details about the image, for now pay attention to size and bitdepth only.
img = r.read()

width = img[0]
height = img[1]
# Threshold value for binarizing images, 
threshold = 128
print "Input image size is: "+ str(width)+ " pixels as  width, " + str(height) + " pixels as height"

f_out = open('lenaBinary.png', 'wb')
w = png.Writer(width, height , greyscale=True, bitdepth=1)

pixels = img[2]
 
x = []
y = []

# Let's traverse the Lena image 
for row in pixels:
    for pixel in row:
        p_value =  pixel
        # Now here we binarize image in pixel level
        if p_value > threshold:
            p_value = 1
        else:
            p_value = 0
            
        y.append(p_value);
    x.append(y)
    y = []

w.write(f_out, x)
f_out.close()

Wenn alles gut ging, herzlichen Glückwunsch! Sie haben ein Bild von Grund auf erstellt und die erste Pixelebene auf einem vorhandenen Bild umgewandelt. Überprüfen Sie Ihren Arbeitsordner, um die neuen Bilder anzuzeigen

Installation oder Setup

Detaillierte Anweisungen zum Einrichten oder Installieren von Computer Vision.

Für diese und die folgenden Bilderserien werde ich Python 2 als Programmiersprache verwenden. Python ist eine gängige Wahl für die wissenschaftliche Gemeinschaft, es ist kostenlos, es gibt viele Bibliotheken für freies und Open Source, und wenn Sie mit der Programmierung noch nicht vertraut sind, ist dies eine der am einfachsten zu erlernenden und zu programmierenden.

Wenn Sie Linux einrichten, haben Sie wahrscheinlich bereits Python. Öffnen Sie einfach das Terminal und geben Sie 'Python' ein, um zu überprüfen, ob bereits alles funktioniert. Andere können diesen Link überprüfen und Python 2.7 herunterladen.

Zweitens müssen wir die Bibliotheken installieren, die wir im Quellcode verwenden werden. Nun, hier ein Hinweis, dieses Setup ist für dieses Beispiel konzipiert. In späteren Schritten werden wir verschiedene Bibliotheken hinzufügen. Natürlich benötigen verschiedene Computer Vision-Anwendungen bestimmte Bibliotheken, wie beispielsweise OpenCV. Für die Ausführung des Codes benötigen wir nur eine Bibliothek in unserem System. Bei der Verwendung von Python installiere ich im Allgemeinen Abhängigkeiten mit 'pip'. Es ist ein einfaches Werkzeug, um die Python-Module zu installieren. Sie können es auch über diesen Link überprüfen

Nun können wir die benötigte Bibliothek PyPNG installieren. Wenn Sie pip verwenden, brauchen Sie nur zu tun

pip install PyPNG

im Terminal, wenn Sie Linux / Mac verwenden, in der Befehlszeile, wenn Sie Windows verwenden

Für diese Übungen benötigen Sie außerdem Bilder, die Sie neben dem Quellcode und den ipython-Notizbüchern in github link finden.

https://github.com/Skorkmaz88/compvis101

Jetzt sollten wir gut trainieren