编译:ronghuaiyang

导读

捕捉和诠释光的旅程。

从硬件到实现打算机视觉的系统,本文的概述侧重于广度而非深度。
为了平衡这种方法,本文勾引读者阅读具有辅导性的参考文献,并供应了随时可以运行的源代码。
我们从图像形成的机制开始。
我们涵盖针孔、透镜、传感器(CCD和CMOS)、Bayer滤波器和颜色重修。

​计算机视觉传感器u0026系统

然后,我们转到打算机视觉的运用上来,检测图像中的车道线。
该方法是基于一套常用的打算机视觉算法。
我们涵盖了Canny边缘检测,高斯模糊,感兴趣区域,和霍夫变换。

成像历史简介

拍照便是把3D场景投影到2D平面上。
暗箱通过一个针孔实现了这种投影。
墙上的一个小针孔让光芒穿透了阴郁的摄影机室。
这个大略的机制产生了尖锐的投影,使艺术家能够在场景的细节上画出草图。
但是这种方法缺少亮度,针孔本身不能网络足够的光。

柯歇(Athanasius Kircher) 1645年的著作《大路西与阴影》(Ars Magna Lucis Et Umbrae)中“便携式”暗箱的雕刻

针孔相机纵然在本日也吸引了广泛的兴趣,它们能够捕捉到令人惊叹的图像,其特点是在任何地方都能利用。
缺陷还是一样,图像很暗,须要很长的曝光韶光。

用针孔相机拍摄的邓卢斯城堡的日落,曝光韶光20分钟,伊万·麦格雷戈

为理解决光芒暗淡的问题,引入了透镜。
通过在光圈前放置透镜,可以聚拢更多的光。
透镜还可以修正投影图像的放大倍率。
在过去,放大须要艺术家移动全体相机。
如今,在不改变场景和像面之间的间隔的情形下,可以通过移动镜头的位置来调节放大效果。
变焦是移动镜头来改变放大倍率的过程。

纵然有了镜头,捕捉图像也须要很永劫光依赖艺术家在投影图像上作画。
19世纪30年代,路易斯·达盖尔(Louis Daguerre)发明了胶片,这是拍照史上最主要的发明之一。
这是第一次有可能在物理层上记录光,不须要依赖艺术家,只须要按下一个按钮,就能记住一个时候。

胶片上涂上卤化银。
一旦暴露在光芒下,卤化银就会转化为金属银。
转换量取决于胶片上任何特定点的曝光量。
为了产生图像,胶片随后要经由化学显影处理。

黑白底片处理

硅成像探测器的发明乃至比胶片的影响更大。
同样的芯片可以用来捕捉无限多的图片,而不再须要化学摄影显影。
它是数码相机所利用的技能,也是我们大多数人本日随身携带的手机。

图像传感器

概括地说,拍照便是将3D场景投影到2D平面上。
投影是通过光圈来实现的,通过透镜来网络更多的光芒并调节放大倍率。
2D平面最初是一个大略的平面,艺术家可以在上面作画。
后来它变成了卤化银薄膜的表面。
末了是硅芯片的表面:图像传感器。

为了将吸收到的光转换成数字图像,大多数图像传感器依赖于硅原子的特性。
当一个具有足够能量的光子撞击硅原子时,它会开释出电子。
在硅晶格(一个像素)上,光子通量暴露产生电子通量。
然后电子通量被转换成电压。

电荷耦合装置 CCD

在这种类型的图像传感器中,光子到电子的转换发生在每个像素中。
在每个像素下都有一个电容储存开释的电子。
一个叫做“垂直CCD移位寄存器”的电路连接每列像素的电容。
这个电路可以使电子从一个像素垂直转移到它正下方的像素上,直到它们到达末了一行。
末了一行由水平CCD移位寄存器连接,该寄存器将电子送到模数转换器中。

CCD中电子的垂直通报采取bucket-brigade法完成。
这意味着每一行在获取其前面一行的电子之前,先将其电子通报给下一行。
水平转移保持行顺序,当它们水平移动到ADC时,它们被转换为与它们的电子电荷成比例的电压。

互补金属氧化物半导体 CMOS

CMOS以不同的办法实现图像传感器。
它不是将电子从像素转移到ADC,而是集成了像素级的电压转换。

利用CMOS可以单独寻址每个像素以读取其电压。
这供应了更多的灵巧性,由于它可以加快特定兴趣区域的阅读速率。
这种灵巧性因此更小的光敏区域为代价的,由于在像素级集成了更多的组件。
为了填补感光区域的减少,微透镜被直接放置在每个像素的上方。
这些微透镜将光芒聚焦在光敏探测器上。

像素构造

获取颜色

像素本身能够捕捉光的强度,但不能捕捉光的波长。
为了捕捉颜色(波长),最盛行的方法是叠加一个拜耳滤光片阵列。
在这种方法中,每个像素都被一个赤色、绿色或蓝色的滤光片覆盖。

图像传感器的像素阵列上的彩色滤光片的拜耳排列。
每个2乘2单元格包含两个绿色,一个蓝色和一个赤色的滤光片。

人类对险些所有颜色的觉得都可以通过3种波长产生。
捕捉赤色、绿色和蓝色的波长就足以重现拍摄到的场景的实际颜色。
但就其本身而言,拜耳模式的叠加是不足的。
它产生的图像看起来像左边的:

左边图像的像素要么是赤色,要么是绿色,要么是蓝色。
把稳,图像看起来大部分是绿色的。
拜耳模式仿照了人类视网膜在白天对绿光最敏感的事实。
因此滤镜是一半绿色,四分之一赤色,四分之一蓝色。

为了将左边的图像转换为右边的图像,我们取每个像素的值,并将其与相邻像素的值结合起来。
这个过程被称为插值。
假设我们从左边的图片中取一个蓝色的像素。
插值是将蓝色值与相邻像素的赤色和绿色值稠浊在一起。

打算机视觉

图像传感器的运用已经成为我们生活中的基本组成部分。
它们塑造了我们表达自我和互换的办法,它们开辟了科学和艺术的跨学科领域。
大概这些领域中最前辈的是打算机视觉。

研究打算机视觉必须从欣赏使之成为可能的硬件开始。
我们已经简要地理解了硬件的历史、进展和紧张组件。
让我们来看一个利用它的令人愉快的实际运用。

自动驾驶中的车道线检测

从2021年5月开始,特斯拉开始交付不再安装雷达的Model 3和Model Y。
这些车型依赖基于摄像头的自动驾驶系统,以相同的安全评级供应相同的功能。

特斯拉Vision的主动安全功能之一是车道偏离警告/避免。
能够探测道路车道在驾驶中是至关主要的。
我们将研究车道检测,并以两种不同的办法实现它。
首先利用打算机视觉算法,其次利用空间卷积神经网络。

![image-20220825133010031](D:\ronghuaiyang\wechat\202208\Computer Vision Sensors & Systems.assets\image-20220825133010031.png)

第一步是检测图像中最显著的边缘。
与其相邻像素亮度比拟较大的区域被标记为边缘。
下面的代码将图像转换为灰度,用高斯滤波器进行模糊以减少噪声,并运用算法Canny边缘检测。

def canny(image): gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) blur = cv2.GaussianBlur(gray, (5, 5), 0) canny = cv2.Canny(blur, 10, 30) return canny

Canny Edge Detection

![image-20220825133055971](D:\ronghuaiyang\wechat\202208\Computer Vision Sensors & Systems.assets\image-20220825133055971.png)

经由Canny边缘检测后得到的图像

这些图像充满了我们不须要的信息。
我们想专注于前方的道路,以是我们将定义一个多边形区域,以裁剪每个图像。
定义多边形的点对这两幅图像来说是不同的。
为了找到它们,我们可以绘制图像并显示宽度和高度轴。

def region_of_interest(image): height = image.shape[0] width = image.shape[1] polygons = np.array([[(10,height), (width,height), (width,1100), (630, 670), (10, 1070)]]) mask = np.zeros_like(image) cv2.fillPoly(mask, polygons, 255) masked_image = cv2.bitwise_and(image, mask) return masked_image

用于裁剪图像的多边形掩码

感兴趣区域掩码的结果

不雅观察产生的感兴趣区域,人眼可以很随意马虎地感知线条。
这些线实际上是一系列像素,它们只是打算机中的点。
我们须要追踪两条最能描述点排列的主线。
这是利用Hough变换算法完成的。

lines = cv2.HoughLinesP(cropped_image, 2, np.pi/180, 100, np.array([]), minLineLength=40, maxLineGap=5)

![image-20220825133226882](D:\ronghuaiyang\wechat\202208\Computer Vision Sensors & Systems.assets\image-20220825133226882.png)

在原始图上加上蓝色线条的结果

这种方法彷佛产生了很好的结果,但这种实现远非最佳,由于:

我们必须明确定义每个情形的兴趣区域。
由于透视的变革,运用相同的多边形掩码来裁剪ROI是不可能的。
打算韶光过慢,开车须要较高的处理速率。
转弯包括波折的车道,这种方法只包括直线。

—END—

英文原文:https://towardsdatascience.com/computer-vision-sensors-systems-bdc079847316