Looking for computer-vision Answers? Try Ask4KnowledgeBase
Looking for computer-vision Keywords? Try Ask4Keywords

computer-visionKomma igång med datorsyn


Anmärkningar

Digital bildbehandling och datorvision är ett intressant fält eftersom det ligger vackert mellan matematik och datavetenskap. Därför är det till stor hjälp att förstå grunderna och tillämpa dem med hjälp av programmering för att förstå ämnet.

Digitala bilder diskretiserar 2 eller 3 dimensionella signaler. Med andra ord är digitala bilder samplade uppsättningar pixlar eller voxels kontinuerliga domäner.

                                        f : R² ⊃ Ω → R

Där f är digital bild över Ω: Rektangulär bilddomän

För enkelhetens skull diskuterar vi bara tvådimensionella digitala bilder, som de i våra StackOverflow-avatarer.

Om pixlar: En snabbnot om pixelvärden innan vi börjar diskutera om typen av bilder. Som tumregeln börjar med värdet 0 som inte anger ljus (svart), når till 1, maximal intensitet (t.ex. vit), och de representeras i heltal.

Binära bilder: Endast bilder i svartvitt. Varje pixel är antingen 0 eller 1, varje pixel kan representeras av en bit. De är inte särskilt populära, eftersom de vanligtvis används i vetenskapliga applikationer eller för andra bildbehandlingsoperationer som mask.

Lena-bild i binär form

Ett binärt bildexempel. (Varning för bildpixelvärdena för denna fil är inte nödvändigtvis binära, detta är för demonstration, också detta är Lena, stjärnan i bildbehandlingsvärlden)

Gråskalabilder: Tack vare onlinefilter känner alla fortfarande dessa bilder mycket bra. Dessa bilder är vanligtvis en byte per pixel, där 0 är svart och 255 är vita, allt mellan är en annan ton en grå, med tanke på att människor bara kan skilja 40 gråtoner, detta intervall räcker för många applikationer (Observera att värdena av pixlar här mappas från 0 till 1 till bytevärden 0 - 255)

Lena-bild i gråskala

Färgbilder: Slutligen, vanligaste digitala bildtyp, färgbilder. Vi måste nämna konceptet med kanaler här. Digitala bilder har också kanaler, faktiskt, binära och gråskalebilder som beskrivs ovan har också kanaler. Den vanligaste beskrivningen skulle vara RGB (röd-grön-blå) modell, i så fall har bilden 3 kanaler (Förväxla inte den med dimensioner, det är fortfarande 2D-bilder) för att beskriva bildens rodnad, blåhet och grönhet. I detta fall är varje pixel en triplett, ett värde mellan 0 - 255 (inget rött till det mest röda), 0 - 255 (inget grönt till det mest gröna), 0 - 255 (inget blått till det mest röda). För denna modell är pixel {0,0,0} svart, {255,255,255} är vit, {255,0,0} är röd, {255, 255, 0} är gul. Men färg är ett mycket brett ämne, och du kan kontrollera referenserna för mer information.

Lena bild i färg

Hyper-spektrala bilder:

Efter att vi diskuterat kanalerna är det lättare att prata om hyperspektrala bilder. Dessa bilder kan ha hundratals kanaler och används vanligtvis i mikroskopi, satellitavbildning etc.

avläsningar

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

  2. Bible of Digital Image Processing: RC Gonzalez, RE Woods: Digital Image Processing. Tredje upplagan, Pearson Prentice Hall, Upper Saddle River, 2008.

  3. Computer Vision Review (Fram till djup inlärning): R. Szeliski: Computer Vision: Algoritms and Applications. Springer, New York, 2010.

  4. För att få en förståelse av binära, gråskala, färgbilder: https://sv.wikipedia.org/wiki/Grayscale

exempel

Detta är en mycket enkel bildbehandlings- och datorsyn Python-övningsserie, utformad för att introducera dessa ämnen med lite praktiskt. Jag är ledsen i förväg för några nykelfel, det är fortfarande under utveckling. I den här serien kommer jag att begränsa digitala bilder som vi kan använda för att PNG-filer för enkelhets skull, som jag också kommer att diskutera ämnet för bildkomprimering.

Klona förvaret om du inte redan har gjort det, eller så kan du bara ladda ner det här via Github:

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

Det finns två filer du kan använda, en av dem är tutorial0.py och andra är läsningImages.ipynb, den andra är en ipython anteckningsbok om du föredrar att använda så kan du göra det. Men två filer gör samma sak.

Koden har förklaringar i kommentarerna


 # 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()

Om allt fungerade bra, gratulerar! Du skapade en bild från början och utförde den första pixelnivåtransformationen på en befintlig bild. Kontrollera din arbetsmapp för att se de nya bilderna

Installation eller installation

Detaljerade instruktioner för att få datorsyn installerat eller installerat.

För denna och följande serie av datorsyn kommer jag att använda Python 2 som programmeringsspråk. Python är ett vanligt val för det vetenskapliga samfundet, det är gratis, det har många bibliotek gratis och öppen källkod, och om du är ny på att programmera är det en av de enklaste att lära sig och börja programmera.

Sätt nu upp, om du använder Linux har du antagligen redan python, bara öppna terminalen och skriv 'python' för att kontrollera om allt fungerar redan. Andra kan kolla den här länken och ladda ner python 2.7.

För det andra måste vi installera de bibliotek som vi ska använda i källkoden. Nu, en anmärkning här, denna inställning är utformad för detta exempel, i senare skeden kommer vi att lägga till olika bibliotek, och, naturligtvis, olika datorvisionsapplikationer kan kräva specifika bibliotek som OpenCV. Vi behöver bara ett bibliotek som ska installeras i vårt system för att köra koden. När jag använder python installerar jag i allmänhet beroenden med 'pip'. Det är ett enkelt verktyg för att installera pythonmodulerna, du kan också kontrollera det via den här länken

Nu är vi redo att installera det bibliotek vi behöver, PyPNG. Om du använder pip är allt du behöver göra

pip installera PyPNG

i terminal om du använder Linux / Mac, i kommandoraden om du använder Windows.

För dessa övningar måste du också få bilder som kan hittas i github-länken bredvid källkoden och ipython-anteckningsböckerna.

https://github.com/Skorkmaz88/compvis101

Nu borde vi vara bra att träna