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

computer-vision開始使用計算機視覺


備註

數字圖像處理和計算機視覺是一個有趣的領域,因為它位於數學和計算機科學之間。因此,理解基礎知識並使用編程來理解該主題非常有用。

數字圖像是2維或3維信號的離散化。換句話說,數字圖像是連續域的像素或體素的採樣組。

                                        f : R² ⊃ Ω → R

其中f是Ω上的數字圖像:矩形圖像域

為簡單起見,我們只討論二維數字圖像,就像StackOverflow頭像中的圖像一樣。

關於像素:在我們開始討論圖像類型之前,關於像素值的快速說明。根據經驗,像素以值0開始,其表示無光(黑色),達到1,最大強度(例如白色),並且它們以整數表示。

二進製圖像:僅黑白圖像。每個像素為0或1,每個像素可以用一個比特表示。它們並不是非常普遍地知道,因為它們通常用於科學應用或用於其他圖像處理操作,例如掩模。

莉娜圖像以二進制形式

二進製圖像示例。 (警告此文件的圖像像素值不一定是二進制,這是用於演示,這也是Lena,圖像處理世界的明星)

灰度圖像:借助在線過濾器,每個人都能很好地了解這些圖像。這些圖像通常是每像素一個字節,0為黑色,255為白色,兩者之間的所有內容都是不同的灰色,因為人類只能區分40種灰度,這個範圍對於許多應用來說已經足夠了(注意這些值)這裡的像素映射從0到1到字節值0 - 255)

Lena圖像在灰度

彩色圖像:最後,最常見的數字圖像類型,彩色圖像。我們在這裡必須提到渠道的概念。數字圖像也具有通道,實際上,上述二進制和灰度圖像也具有通道。最常見的描述是RGB(紅 - 綠 - 藍)模型,在這種情況下,圖像有3個通道(不要將它與尺寸混淆,這些仍然是2D圖像)來描述圖像的紅色,藍色和綠色。在這種情況下,每個像素是一個三元組,值介於0 - 255(無紅色至大多數紅色),0 - 255(無綠色至大多數綠色),0 - 255(無藍色至最藍色)之間。對於此模型,像素{0,0,0}為黑色,{255,255,255}為白色,{255,0,0}為紅色,{255,255,0}為黃色​​。但是,顏色是一個非常廣泛的主題,您可以查看參考資料以獲取更多信息。

莉娜圖像的顏色

超光譜圖像:

在我們討論了頻道之後,談論高光譜圖像更容易。這些圖像可以有數百個通道,通常用於顯微鏡,衛星成像等。

閱讀

  1. 信號採樣: https//en.wikipedia.org/wiki/Sampling_(signal_processing)

  2. 數字圖像處理聖經:RC Gonzalez,RE Woods:數字圖像處理。第三版,Pearson Prentice Hall,Upper Saddle River,2008。

  3. 計算機視覺評論(直到深度學習):R。Szeliski:計算機視覺:算法和應用。施普林格,紐約,2010年。

  4. 要了解二進制,灰度,彩色圖像: https//en.wikipedia.org/wiki/Grayscale

例子

這是一個非常簡單的圖像處理和計算機視覺Python練習系列,旨在介紹這些主題,幾乎沒有實用性。對於任何新手的錯誤,我很抱歉,它仍處於開發階段。在本系列中,為了簡單起見,我將限制我們可以用於PNG文件的數字圖像,我還將討論圖像壓縮的主題。

如果您還沒有這樣做,請克隆存儲庫,或者您可以通過Github 在此處下載它:

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

你可以使用兩個文件,其中一個是tutorial0.py,另一個是readingImages.ipynb,第二個是ipython筆記本,如果你喜歡使用它你可以這樣做。但是兩個文件正在做同樣的事情。

代碼在評論中有解釋,我是


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

如果一切順利,恭喜!您從頭開始創建圖像,並在現有圖像上執行第一個像素級轉換。檢查您的工作文件夾以查看新圖像

安裝或設置

有關設置或安裝計算機視覺的詳細說明。

對於本系列和以下系列的計算機視覺,我將使用Python 2作為編程語言。 Python是科學界的共同選擇,它是免費的,它有許多免費和開源的庫,如果你是新手編程,它是最簡單的學習和開始編程之一。

現在設置,如果你使用Linux,你可能已經有了python,只需打開終端並輸入'python'來檢查一切是否正常。其他人,可以查看此鏈接並下載python 2.7。

其次,我們需要在源代碼中安裝我們將要使用的庫。現在,請注意,此設置是針對此示例設計的,在後續階段,我們將添加不同的庫,當然,不同的計算機視覺應用程序可能需要特定的庫,如OpenCV。我們只需要在我們的系統中安裝一個庫來運行代碼。使用python時,我通常使用'pip'安裝依賴項。這是一個安裝python模塊的簡單工具,您也可以通過此鏈接進行檢查

現在,我們已準備好安裝我們需要的庫PyPNG。如果你正在使用pip,你需要做的就是

pip安裝PyPNG

在終端中,如果您使用的是Linux / Mac,請在命令行中使用Windows。

此外,對於本練習,您需要獲取可以在源代碼和ipython筆記本旁邊的github鏈接中找到的圖像。

https://github.com/Skorkmaz88/compvis101

現在,我們應該好好去鍛煉身體