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

现在,我们应该好好去锻炼身体