标题：CMOS摄像机
简介
  问：什么事CMOS摄像机？和CCD摄像机有何不同？ ？
答：CMOS传感器是一种通常比CCD传感器低10倍感光度的传感器。
因为人眼能看到1Lux照度（满月的夜晚）以下的目标，CCD传感器通常能看到比人眼略好在0.1~3Lux，是CMOS传感器感光度的3到10倍。
更多：
CMOS传感器的感光度一般在6到15Lux的范围内，CMOS传感器有固定比CCD传感器高10倍的噪音，固定的图案噪音始终停留在屏幕上好像那就是一个图案，因为CMOS传感器在10Lux以下基本没用，因此大量应用的所有摄像机都是用了CCD传感器，CMOS传感器一般用于非常低端的家庭安全方面。
有2个例外，CMOS传感器可以做得非常大并有和CCD传感器同样的感光度，CMOS传感器非常快速，比CCD传感器要快10到100倍，因此非常适用于特殊应用如high ens DSC camera (Cannon D-30）或者高帧摄像机。
CMOS传感器可以将所有逻辑和控制环都放在同一个硅芯片块上，可以使摄像机变得简单并易于携带，因此CMOS摄像机可以做得非常小。
CMOS摄像机尽管耗能同样或者高于CCD摄像机，但是CMOS传感器使用很少的圆环如CDS,TG和DSP环，所以同样尺寸的总能量消耗比CCD摄像机减少了1/2到1/4。
一般CCD摄像机的消耗12伏特/150到300毫安，因此比CMOS的5到12伏特和35到70毫安高出了2到4倍。
有趣的是，尽管CCD表示“电荷耦合器件”而CMOS表示“互补金属氧化物半导体”，但是不论CCD或者CMOS对于图像感应都没有用，真正感应的传感器称做“图像半导体”，CCD和CMOS传感器（暂且如此称呼）实际使用的都是同一种传感器“图像半导体”，图像半导体是一个P N结合半导体，能够转换光线的光子爆炸结合处成为成比例数量的电子。电子的数量被计算信号的电压，光线进入图像半导体得越多，电子产生的也越多，从传感器输出的电压也越高。
CCD称为“电荷耦合器件” ，CCD实际上只是一个把从图像半导体中出来的电子有组织地储存起来的方法。
CMOS称为“互补金属氧化物半导体”，CMOS实际上只是将晶体管放在硅块上的技术，没有更多的含义。传感器被称为CMOS传感器只是为了区别于CCD传感器，与传感器处理影像的真正方法无关。
CMOS传感器不需要复杂的处理过程，直接将图像半导体产生的电子转变成电压信号，因此就非常快。这个优点使得CMOS传感器对于高帧摄像机非常有用，高帧速度能达到400到2000帧/秒。这个优点对于眺望高速移动的物体非常有用，然而由于没有高速的数字讯号处理器，所以市场上只有很少的高速摄像机并一般价格都非常高。
性能参数
1、摄像机芯片：CMOS30W像素
2、压缩格式：M-JPEG
3、红外距离：≤15米
4、工作电源：DC12V,最大工作电流500mA
5、最大水平转角：355°，最小水平转角：20°。
6、垂直转角：0°—90°。
7、转速：水平约12°/S，垂直约12°/S。
8、最大载荷：0.5KG。
9、基本功能：上、下、左、右、自动旋转。
10、使用环境：室内。
11、使用环境温度：-10℃-50℃。
12、带彩色/夜视
CMOS图像处理器工作原理
CMOS 光电传感器经光电转换后直接产生电流(或电压） 信号，信号读取十分简单； CCD 图像传感器仅能输出模拟电信号，输出的电信号还需经后续地址译码模数转化图像信号处理器处理，需提供3 组不同的电源和同步时钟控制电路，集成度非常低。
由于CMOS 图像传感器的应用，新一代图像系统的开发研制已经得到了迅速发展，并且随着经济规模的形成，其生产成本也得到了降低. 高集成单芯片CMOS 图像传感器使有关图像的应用更容易实现. 增加和改善了许多功能，如自动增益控制、自动曝光控制、伽玛校正、背景补偿和自动黑点校正. 所有的彩色矩阵处理功能都被集成在芯片上. CMOS 集成度高，将会在功耗、大小、系统及成本上有竞争优势. 带CMOS 图像传感器的手机价格低，使用方便，同PC 机结合可进行编辑，配合高性能的打印机以及计算机上网的普及，市场需求量会快速增长。
CMOS成像器件的组成CMOS成像器件工作原理如图1所示，它的主要组成部分是像敏单元阵列和MOS场效应管集成电路，而且这两部分是集成在同一硅片上的。像敏单元阵列实际上是光电二极管阵列它也有线阵和面阵之分。
图1所示的像敏单元阵列按H和V方向排列成方阵，方阵中的每一个像敏单元都有它在H、V各方向上的地址，并可分别由两个方向的地址译码器进行选择；每一列像敏单元都对应于一个列放大器，列放大器的输出信号分别接到由H方向地址译码控制器进行选择的模拟多路开关，并输出至输出放大器；输出放大器的输出信号送往A/D转换器进行模数转换，经预处理电路处理后通过接口电路输出。图中的时序信号发生器为整个CMOS图像传感器提供各种工作脉冲，这些脉冲均可受控于接口电路发来的同步控制信号。
  CMOS成像器件原理图
在CMOS图像传感器的同一芯片中，还可以设置其他数字处理电路。例如，可进行自动曝光处理、非均匀性补偿、白平衡处理、γ校正、黑电平控制处理。甚至可将具有运算和可编程功能的DSP器件制作在一起，形成具有多种功能的器件。
为了改善CMOS图像传感器的性能，在许多实际的器件结构中，光敏单元常与放大器制作成一体，以提高灵敏度和信噪比。
CMOS图像传感器工作流程CMOS图像传感器的功能很多，组成也很复杂。其器件工作原理如图1 所示，它由像敏单元、行列开关、地址译码器和A/D转换器等许多部分组成较为复杂的结构。这就需要使诸多的组成部分按一定的程序工作，以便协调各组成部分的工作。为了实施工作流程，还要设置时序脉冲，利用它的时序关系去控制各部分的运行次序，用它的电平或前后沿信号去适应各组成部分的电气性能。CMOS图像传感器的典型工作流程如图2 所示。
  
CMOS图像处理器成像原理
成像模块在了解CMOS图像处理器成像原理之前，我们先来看看CCD与CMOS之间的一个对比，以更好了解CMOS图像处理器。相比于CCD，CMOS的优点由于：
1） 设计单一感光器感光器连接放大器
2） 灵敏度同样面积下高感光开口小，灵敏度低
3） 成本线路品质影响程度高，成本高CMOS整合集成，成本低
4） 解析度连接复杂度低，解析度高低，新技术高
5） 噪点比单一放大，噪点低百万放大，噪点高
6） 功耗比需外加电压，功耗高直接放大，功耗低
由于构造上的基本差异，我们可以表列出两者在性能上的表现之不同。CCD的特色在于充分保持信号在传输时不失真（专属通道设计），透过每一个像素集合至单一放大器上再做统一处理，可以保持资料的完整性；CMOS的制程较简单，没有专属通道的设计，因此必须先行放大再整合各个像素的资料。下图为CMOS成像模块示意图。
  
线性插值为什么需要线性插值呢？我们先来看看CMOS图像处理器的排列：
  由于制作工艺的问题，CMOS感应R 或G或B一种颜色，这就是贝叶尔格式的数据（如图6所示）。它必须经过插值运算才能得到每个像素的RGB值。
  由上图可以看出，每个像素点都有8个相邻的像素点，而且这8个像素点的颜色分量与此像素点不同。插值算法就是依据相邻的像素点的颜色值的空间相关性原理进行的。其处理方法如下：
a. 只有R颜色分量的像素点，其G颜色分量由周围4个G的平均值计算得出。B颜色分量由周围4个B的平均值计算得出。
b. 只有B颜色分量的像素点，其R颜色分量由周围4个R的平均值计算得出，G颜色分量由周围4个G平均值计算得出。
c. 只有G颜色分量的像素点，其R颜色分量由上下2个R的平均值计算得出，B颜色分量由左右2个B平均值计算得出。
白平衡任何物体在不同的光线下具有不同的色温。所谓色温，简而言之，就是定量地以开尔文温度表示色彩。色温越高，物体的蓝色分量就越多；色温越低，物体的红色分量就越多。由于人眼具有自调节性，所以即使物体色温不同，也能正确识别出颜色。但是CMOS图像传感器没有自调节性，所以当在户外日光下拍摄物体时，物体的颜色就会因为色温高而偏蓝。而在室内的荧光灯下拍摄物体时，物体的颜色就会因为色温低而偏红。要得到正确的颜色，必须进行白平衡。白平衡的基本原理是调整颜色的色温，使其保持在一个特定的范围内。
图像压缩处理
图片压缩为了有效地进行图像信息的传输或储存，减少描述图像的数据量是一件非常重要的工作。在Windows系统中，我们常见的bmp图片文件（bitmap file）是位图图片。位图图片的文件大小一般都是最大的，不便于存储和传输，所以后来才出现了一些"压缩"格式图片，如：gif、tiff、jpeg、png等图片文件。
图片"压缩"分为"有损压缩"（如jpeg图片）和"无损压缩"：（如tiff图片）
什么是位图? 位图也称像素图像或点阵图像，是由多个点组成的，这些点被称为像素。位图可以模仿照片的真实效果，具有表现力强、细腻、层次多和细节多等优点。图片的压缩算法很多，格式也有很多种，例如jpge，gif等，但为了大家能够简单了解和实验方便，这里重点介绍BMCP压缩格式算法。
BMCP 采用无损压缩方法对图片进行压缩的，其处理流程大概如下：对一幅位图的所有象素点进行扫描，取出所有像素点的颜色构造颜色表，并且记录这些像素点的颜色在颜色表中的索引位置，然后再对这些索引位置记录进行压缩后再存储数据，也就是存储的时候像素点位置只存储索引而不存储颜色。我们都知道一张图按行列扫描时某个点的颜色在它后面连续同时出现的机率是很大的，所以我们的压缩就在这里了。简单的压缩原理用伪代码表示如下：
color = 图片的第一点像素点颜色；
while（图片的像素点没有扫描完）
newColor = 获取当前像素点的颜色；
if(newColor == color)
{
color的出现次数+1;
}else{
存储color;
color = newColor;
}
}
这样压缩后，我们就可以将一些连续出现的颜色点压缩为一个颜色点了。例如有下面的字符数据：
abceefaccccch
经我们压缩后就可以变为如下数据了：
a1b1c1e2f1a1c5h1
（注：字符后面的数字表示其连续出现的次数）
l BMCP 的颜色索引值的存储
我们大家都知道在bmcp里是存储颜色索引值的，而大家也知道在C#里的int/uint是占用4个字节空间的，所以我们存储象素颜色索引时肯定尽量避免存储为int/uint值！
在bmcp里颜色索引值的存储大小是根据颜色表的数量来决定的。当颜色表的颜色数量小于255个时索引占用的空间就只占用1个字节；而颜色表的数量小于ushort值范围时索引占用的空间就是2个字节；而如果颜色表数量小于ushort. MaxValue*255时就索引就占用3个字节（前2个字节存储的是“值/255”的整数部分，而后1个字节则存储的是“值%255”）；否则就只能使用4个字节存储索引。
在上面的压缩计算中，我们还要存储一个“颜色连续出现的次数”值，这个值的大小在bmcp里是占用1个字节的，也就是说计算某颜色重复出现的次数时值最多只能记录到255次，如果还继续出现同一个颜色，则重新记录颜色！为什么要这样做呢？这是为了减少占用空间所做的，在很多图片中，不连续出现相同颜色的位置所占的比率也是很大的，而连续出现同一种颜色超出255次的地方则是少之又少。
l BMCP 的文件格式
BMP是一种与硬件设备无关的图像文件格式，使用非常广。它采用位映射存储格式，除了图像深度可选以外，不采用其他任何压缩，因此，BMP文件所占用的空间较大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时，图像的扫描方式是按从左到右、从下到上的顺序。典型的BMP图像文件由三部分组成：位图文件头结构（BITMAPFILEHEADER），它包含BMP图像文件的类型、显示内容等信息；位图信息头结构（BITMAPINFOHEADER），它包含有BMP图像的宽、高、压缩方法，以及定义颜色等信息；位图调色板。
位图结构l 位图文件头结构
BITMAPFILEHEADER中，bfTabe是标识数据，内容为固定值“BM”，用于标识文件格式为BMP文件。
bfSize的数据地址为2，数据类型为unsigned long，表示位图文件的大小。
bfReserved1和bfReserved2的数据地址分别为6和8，数据类型为unsigned int，是BMP文件的保留字，其值为0，暂无意义。
bfOffBits的数据地址为10，数据类型为unsigned long，以字节为单位，指示图像数据在文件内的起始地址，即图像距文件头的偏移量。
l 位图信息头结构
BITMAPINFOHEADER中，biSize的数据地址为14，数据类型为unsigned long，以字节为单位，指定数据结构BITMAPINFOHEADER所占用的存储容量，固定值为40。
biWidth和biHeigth的数据地址分别为18和22，数据类型为unsigned long，均以像素为单位，给出该BMP文件所描述位图的宽度和高度。若biHeigth取值为正数，则表明位图为bottom_up类型的DIB位图，位图的原点为左下角。若biHeigth取值为负数，则表明位图为top_down类型的DIB位图，位图的原点为左上角。一般情况下，取值为正数。
biPlanes数据地址为26，数据类型为unsigned int，表示目标设备平面数，必须置为1.
biBitCount的数据地址为28，数据类型为unsigned int，确定每个像素所需要的位数，即量化级数。
biCompression的数据地址为30，数据类型为unsigned long，表示bottom_up类型位图的压缩类型。值得注意的是，BMP文件格式对索引色图像及真彩色图像不做任何数据压缩。biSizeImage的数据地址为34，数据类型为unsigned long，以字节为单位，表示图像数据占用的空间大小。
biXperlsPerMeter和biYperlsPerMeter的数据地址为38和42，数据类型为unsignedlong，以每米像素数为单位，给出位图目标设备水平垂直的分辨率。
biClrUsed的数据地址是46，数据类型为unsigned long，给出位图实际使用的颜色表中的颜色变址数。
biClrImperant的数据地址为50，数据类型为unsigned long，给出位图显示过程中重要颜色的变址数。若取值为0，表示所有使用的颜色都是重要颜色。
l 位图调色板
RGBQUAD结构体由4个字节型数据组成，因此一个RGBQUAD结构体只占用4字节空间，从左到右每个字节依次表示（蓝色，绿色，红色，保留字）。
我们很清晰的了解到BMCP是如何做到压缩位图文件的。
1） 只存储每个象素点颜色索引值
2） 将连续出现相同颜色的多个象素点压缩为一个“象素点”