彩色CCD相机工作原理

原理

黑白(单色)相机

       CCD原理并不复杂。我们可以把它想象成一个顶部被打开的记忆芯片。因此光束可以射到记忆单元中。根据"光电效应”,这些光束在记忆单元中产生负电荷(下图中右上部分)。



       曝光后,这些电荷被读出,进而被相机处理单元进行预处理。从相机处理单元输出的就是一幅数字图像。

       如果相机要求以模拟格式输出视频,我们就必须对该数字原始图像进行相应转换。然而这个问题与本文所讨论的“彩色相机如何工作”并无关联。我们只需考虑数字格式的原始图像。


3CCD彩色相机

      你可以说CCD芯片将光子转换为电子,在这一过程当中,光子数目与电子数目互成比例。但光子还有另外一个特征值——波长,而这条信息却没有在这个过程中被转换为电子。因此,从这个意义上说,CCD芯片都可以被称为色盲。

       如果我们需要相机内的图像处理单元在每个像素上都输出红、绿和蓝三种颜色分量的值,就必须给这三种基色中的每种颜色都配置一个CCD。每个CCD都只得到过滤后一个颜色分量的光子,即一个CCD用于红光,一个用于绿光,一个用于蓝光。我们用三棱镜将这三种颜色分离开来。


      这个简单的解决方法在实际应用中可以得到非常理想的效果。但它有一个重要的缺点——价格昂贵。因此人们早已开始研发基于一个CCD的设计理念彩色相机。下节将介绍最常用的一种。


单CCD彩色相机

       如果考虑到价格因素,我们只能使用一个CCD芯片,那么我们就得把彩色滤光片象马赛克一样分布在CCD所有的像素上。这一概念也被称为马赛克滤光片或拜尔滤光片(最初由拜尔先生发明)。

      这样一来,每个像素只能产生红、绿或蓝三色当中一种颜色的值。但是在输出时,所有像素都应该有这三种颜色的信息。我们应该如何找回其余两种被滤除的颜色分量值呢?

     答案是由相机处理单元执行的空间色彩插值法。以下图中左下角的红色像素为例,我们需要的是被滤除的绿色与蓝色的值。而插值法通过分析与这个红色像素相邻的像 素可以估算出这两个值。在本例中,我们发现绿色像素含有大量电荷,但蓝色像素电荷数为零。因此这个红色像素实际上是黄色的。在稍后的色彩插值一节中您将可以了解到有关色彩插值的详细信息。



      如果对3CCD相机生成的3幅数字原始图像与单CCD相机生成的3幅数字始图像进行比较,我们会发现它们看起来完全相同。但这仅仅对我们这个简化的例子是成立的。在实际应用中,即使最好的彩色空间插值法也会产生低通效应。因此,单CCD相机生成的图像要比3CCD相机或黑白相机的图像模糊,这点在图像中有超薄或纤维形物体的情况下尤为明显。



用于成像与测量的单CCD相机

成像

      在原理一节中,我们已经了解了用于成像的单CCD彩色相机的工作原理。马赛克滤光片(亦被称作拜尔滤光片)使得每个像素只能显示红、绿或蓝当中的一种颜色。但由于我们希望相机能在每个像素都输出红、绿和蓝这三种颜色,相机的处理单元需要插入缺失色彩的值。在色彩插值一节您可以了解更多详细内容。



       这一方法的显著优点在于它能节省成本。此外,今天的单CCD相机的质量也惊人的好。因此,绝大多数彩色相机都采用此项技术。


测量

在以测量为目的图像应用领域,色彩插值法有重大的缺点:

? 每个像素都具有红、绿和蓝的色彩值,但这三个值中只有一个真正来自CCD。其它两个值都由插值法计算而得,即估算值。
? 这些估算值不但干扰测量过程本身,而且它们对于总线及计算机而言都会增加不必要的负载。

       在图像测量应用领域,我们认为将色彩插值关闭并把从CCD获得的电荷直接转换为数字原始图像更为有利。

       需要提醒读者注意的是:现在大多数彩色图像处理软件都默认每个像素都有红色、绿色和蓝色值。处理数字原始图像对于我们当中的大多数而言都还比较陌生。因此,我们在色彩插值一节中更详细地介绍处理数字原始图像的基本原理。




色彩插值(用于成像)

概述

        在原理一节中,我们通过一个例子介绍了色彩插值的原理。为了让该例简单明了,三幅生成的图像(数字原始图像的三色被分离后的图像)都是理想化的。

        下面我们将详细介绍两种简单的插值处理。一开始我们将使用在用于成像与测量的单CCD相机(测量)一节中介绍过的数字原始图像。为了简单起见,该数字原始图像、它的源图及拜尔滤光片都被列于下图。


复制临近像素法

       填补缺失的色彩值的最简单方法就是从临近像素中获取色彩值。让我们以第二行第一个绿色像素(来自拜尔滤光片)为例(如下图中被加粗黑框之像素所示)。


       在源图像中该点实际是红色的(见概述),但经拜尔滤光片绿色像素过滤后色彩值变为零。我们只需要把临近红蓝像素中的红色与蓝色值(见上图)复制到该像素中,就能获得其RGB值(255,0,0)。

       就上图所示例子而言,插值法产生了正确的RGB值。但在实际应用当中,对于静止图像,这种简单的插值法所生成的结果是不可接受的。但由于它并不耗费多少时间,我们可以将其用于对质量标准要求不高的视频数据流中(例如视频预览)。


临近像素均值法(双线性插值)



       我们可以对“复制插值法”作出的第一个改进就是使用若干临近像素的均值。如图所示,这种方法同样可以得到正确的RGB值(255,0,0)。

       但第二个例子指出了均值法的一个重大缺陷:均值法有低通特性,并由此将清晰的边界钝化。RGB值本应是(255,0,0),但实际上变成了(255,128,64),因此该点变成了棕橙色。

       今天相机中所使用的插值法的性能要大大高于前面介绍的这两种基本方法。A Study of Spatial Color Interpolation Algorithms for Single-Detector Digital Cameras一文 对这些算法做了很好的介绍和比较。

       一般情况下现场工程师不大可能选择或改变一个普通彩色相机的插值法。为了提供给用户更大的灵活性,
The Imaging Source 提供一系列不带插值处理功能的彩色相机,如1394相机中的 DBK 21F04, DBK 21AF04, DBK 21BF04, DBK 31AF03, DBK 31BF03, DBK 41AF02和DBK 41BF02,以及USB2.0相机中的 DBK 21AU04, DBK 21BU04, DBK 31AU03, DBK 31BU03, DBK 41AU02 及 DBK 41BU02。它们尤其适用于需要自行处理原始图像数据的用户。



色彩还原(用于测量)

概述

       在用于成像与测量的单CCD相机一节中,我们了解到经过插值处理的图像并不适用于以测量为目的的实际应用。其原因可以通过下图中的例子予以解释。

       源图像由色彩及其相近的两个区域组成。左半边像素的RGB值为(0,255,128),右半边的像素值为(0,255,144)。


对经过插值处理的图像进行还原处理



       上图显示了我们对源图像进行插值处理后的结果。为了简化运算,我们使用在色彩插值一节中介绍过的均值插值法(双线性插值法)。结果得到红、绿、蓝三色的三幅图像。

       柱状图是一种区分图像区域的经典方法。如右图所示,红色分量图只有64个灰度级为0的值,而绿色分量图中只有64个灰度级为255的值。因此,这两幅图对于区分不同区域起不到任何作用。

       只有蓝色分量柱状图显示出一个介于32个128值与24个144值之间的“谷值”。8个灰度级为136的值就是色彩插值低通效应的结果。这一效应使得原本清晰的边界变得模糊。


对数字原始图像进行还原处理

直接对数字原始图像进行柱状图分析有如下两点优势:

? 可以省去占总量三分之二的冗余信息。
? 由于没有使用插值处理,诸如边界模糊之类的干扰得以避免。

      三幅柱状图再次表明红色和绿色图对于我们的分析没有意义。蓝色柱状图则再次准确的反映了源图像的关系。

      也许会有人反对说,均值插值法(双线性插值法)今天已不再被应用,因为人们已经开始使用比它高效得多的算法。但效率应与成像质量优化问题联系在一起考虑,而且其中起评判标准的作用的是人类的视觉系统。所以如果从测量应用的角度出发,高效的插值法会在图像还原时导致不同类型的干扰。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTML学习】——HTML常见标签属性和方法介绍

目录 1、HTML分块--------< div> 2、HTML段落--------< p> 3、HTML标题--------< h1>…< h6> 4、HTML链接--------< a> 1)< a href“http://www.baidu.com”>百度< /a>&#xff08;点击百度&#xff0c;直接跳转到网页&#xf…

开发者应警惕的七种糟糕职业规划错误

那些心灵鸡汤式的说辞总爱美化失败&#xff1a;失败是成功之母啦、失败使人成长啦、别畏惧失败等等。但事实上&#xff0c;这种思路在软件开发领域也许并不适用——至少不完全适用。每位开发者在职业生涯中都不可避免会遭遇失败&#xff0c;但为什么不从他人的经验中汲取教训来…

【HTML学习】——一个网页HTML编程的构成

目录 1、html网页构成介绍 2、HTML标签介绍 全部的html标签&#xff1a; HTML: HyperText Markup Language | MDNhttps://developer.mozilla.org/en-US/docs/Web/HTML 一个网页文件一般由.html结尾的文件组成&#xff0c;主要由不同的标签对和内容组成&#xff0c;常见的html…

hbase里插入big int数据用Phoenix查看的报错问题

Phoenix建表create table "test_big_int"("ROW" varchar primary key,"ci"."column1" bigint) 在hbase里put数据hbase 里面进行put: put test_big_int,001,ci:column1,1 在Phoenix里进行查看&#xff08;问题出现&#xff09;第二个尝…

机器学习:利用卷积神经网络实现图像风格迁移 (一)

相信很多人都对之前大名鼎鼎的 Prisma 早有耳闻&#xff0c;Prisma 能够将一张普通的图像转换成各种艺术风格的图像&#xff0c;今天&#xff0c;我们将要介绍一下Prisma 这款软件背后的算法原理。就是发表于 2016 CVPR 一篇文章&#xff0c; “ Image Style Transfer Using Co…

博客园自定义样式

碎碎念&#xff1a; 已经很长时间没有更新过博客了&#xff0c;分析一下&#xff0c;一个是太懒了。。。所以很久没整理一下了。还有就是嫌弃博客园默认的博客界面真的太丑了&#xff0c;作为颜控的我真的无法忍受啊。个人比较喜欢用makedown来编写博客&#xff0c;但是博客园自…

【CSS】——cascading stylesheets层叠式样式表

目录 0、CSS介绍 1、CSS语句组成 2、CSS选择器的选择方式 1&#xff09;CSS选择器的方式和选择器大全&#xff1a; 2&#xff09;常见的三种方式&#xff1a; 3、添加CSS方式 1&#xff09;外部样式表 html调用css代码 css文件 html文件 展示 2&#xff09;内部样式表…

四 Apache Axis2 部署 WebService

最新版本1.7.4发布日期2016-10-21 Axis2官网下载如下文件&#xff1a; axis2-1.6.2-bin&#xff1a;二进制的axis axis2-1.6.2-docs&#xff1a;帮助文档 axis2-1.6.2-war&#xff1a;axis.war 文件 axis2-eclipse-codegen-plugin-1.6.2&#xff1a;Eclipse axis client 插件 a…

安装OpenCV:OpenCV 2.4.8或OpenCV 2.4.9 +VS 开发环境配置

因为读研期间的研究方向是图像处理&#xff0c;所以浅墨这段时间闭门研究了很多OpenCV和图像处理相关的知识与内容。眼看自己积累到一定的程度了&#xff0c;于是决定开始开设这个OpenCV系列专栏&#xff0c;总结自己所学&#xff0c;也分享知识给大家。 好了&#xff0c;这篇文…

powerdesigner中如何在自动生成建表SQL时添加模式名schema

1、在主菜单中选择“模型”→“users and roles”→“users”&#xff0c;新增一个user&#xff0c;其中"name"字段就是要添加的模式名。 2、在新增表时&#xff0c;在表属性的“general”页签中选择"owner"&#xff0c;选择刚才新增的user&#xff0c;即可…

【django学习】——Django介绍和实战(开发简易版博客网页)

目录 0、视频链接 1、环境配置 2、django基本命令 1&#xff09;常见命令 2&#xff09;数据库相关的Django命令 3、Django项目 1&#xff09;Django创建项目 2&#xff09;项目目录介绍 3&#xff09;运行初始化的Django项目 4、Django应用 1&#xff09;Django项目和Djan…

求最大子数组03

题目: 返回一个二维整数数组中最大联通子数组的和。 要求&#xff1a; 1. 输入一个二维整形数组&#xff0c;数组里有正数也有负数。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 2.程序要使用的数组放在一个叫 input.txt 的文件中&#xff0c; 文件格式是: 数组的行…

纠错——【Singleton array array(0.2) cannot be considered a valid collection.】

# 将数据集按照比例划分为训练集和测试集 def split_datas(datas,labels,random_state1,train_size0.9,test_size0.1):train_data, test_data, train_label, test_label sklearn.model_selection.train_test_split(datas,labels,random_staterandom_state,# 作用是通过随机数来…

Android Studio 模拟器 不要皮肤,效果更好

新建或者编辑虚拟机时&#xff0c;皮肤选择“No Skin”即可&#xff0c;第二张图片就是无皮肤的效果&#xff0c;看着更爽啊。 转载于:https://www.cnblogs.com/toSeeMyDream/p/6265501.html

JAVA 笔记(三)

NullPointerException:空指针异常 原因&#xff1a;数组已经不再指向堆内存了。而你还用数组名去访问元素。对于查找问题&#xff0c;如果找到就返回其索引值&#xff0c;如果找不到就要返回一个负数&#xff08;一般是负一&#xff09;这是必须的&#xff0c;否则如果找不到&a…

安装Wamp后 Apache无法启动的解决方法

安装Wamp后 Apache无法启动的解决方法&#xff0c;网上的解决方案可以说是五花八门&#xff0c;有些说了一大推&#xff0c;一点作用都起不到。 其实解决方法只需两步&#xff1a; 1、安装路径不能包含有中文&#xff0c;这个我不知道为什么&#xff0c;总之如果安装路径中包含…

【Not all parameters were used in the SQL statement】

在添加游标的时候&#xff0c;添加preparedTrue cursor mydb.cursor(preparedTrue) 感谢博主&#xff1a; 【已解决】Python MySQL: Not all parameters were used in the SQL statement - MoonYear530 - 博客园一、事故缘起 今天构造了一个超过 50 多个参数的 SQL 插入语句…

解决Android Studio报错:DefaultAndroidProject : Unsupported major.minor version 52.0

问题描述 今天使用Android Studio 2.0打开我之前的项目时&#xff0c;编译报了如下错误&#xff1a; Error:Cause: com/android/build/gradle/internal/model/DefaultAndroidProject : Unsupported major.minor version 52.0 其中build.gradle文件内容如下所示&#xff1a; // …

SQL语句:从一个表里按年份统计条目数

比如一个数据表名称叫deploypool&#xff0c; 需要知道里面每一年的记录数&#xff0c; 而add_date字段里有增加记录时的时间&#xff0c; 那么语句如下&#xff1a; SELECT EXTRACT(YEAR from add_date),COUNT(id) FROM deploypool GROUP BY EXTRACT(YEAR from add_date);

Php 与 Json

PHP与JSON 在PHP中存在两个与JSON相关的函数&#xff1a; json_encode($array或$object)函数&#xff1a;把一个数组或对象转化为JSON格式的字符串 json_decode($json,$flag)函数&#xff1a;把一个JSON格式的字符串转化为数组或对象 $flag &#xff1a;true&#xff0c;代表转…