1、四川大学本科毕业论文 基于Bayer的数字图像还原及MATLAB实现摘要:成像芯片是数码相机的关键部分,生产厂家通常采用单片CCD或CMOS图像传感器以降低数码相机的生产成本和体积,并在其表面覆盖一层彩色滤波阵列CFA,其中Bayer CFA应用最为广泛。CFA使每个成像点只能获得物理三原色(红、绿、蓝)中的一种颜色分量。因此要获得全彩色图像,必须进行插值获得丢失的其余两个分量,这个过程被称为彩色插值或去马赛克DEMOSAICING。论文主要是对DEMOSAICING过程做研究,提出了双线性法和梯度法等四种不同的算法来实现从灰色图像到真彩色图像的还原,然后分别在MATLAB上进行实现。论文分别
2、得出了四种不同算法的彩色还原图像,并通过对原始图像中有代表性的一小块区域进行放大处理,比较和找出了其中的优势算法。结构上,论文首先介绍数字图像处理的一些基础知识,然后回顾了部分典型的插值算法,并选择了在数字图像处理上独具优势的MATLAB软件,详细记述了运用四种不同的算法来实现从灰色图像到真彩色图像还原的全过程,并对图像放大,对比后得出结论。关键词:Bayer,彩色滤波阵列,DEMOSAICING,图像还原,MATLAB实现Digital image reduction based on Bayer and MATLAB implementationMedical InformationAbs
3、tract: Imaging chip is the key part of digital cameras. Manufacturers usually use a single CCD or CMOS image sensor to reduce the cost and size of digital cameras. Those sensors surface is covered with a layer of color filter array. The Bayer CFA is used most widely. CFA makes each image point to ge
4、t one of the physical primary colors values (red, green, blue). To get full-color image, interpolation is advanced to get the other two missed colors values. This process is called as color interpolation or DEMOSAICING. The paper is doing research of the DEMOSAICING process. It proposed the four dif
5、ferent algorithms included the bilinear method and the gradient-based algorithms to achieve the full-colors image from gray image. It used the MATLAB software to make out the four different algorithm implementations. It got four pictures match with those four interpolation algorithms. Then, zoom in
6、a representative area of the original image, compared and find out the advantages of algorithm.This paper structure: first introduces some basic knowledge of Digital image processing and then reviews some of the typical interpolation algorithm. MATLAB software has the unique advantages of digital im
7、age processing. So chose the MATLAB software to make out the whole process from gray image to the full-colors image. Detailed record of the four different algorithms included the bilinear method and the gradient-based algorithms. Then, zoom in a representative area of the original image. These four
8、pictures match with those four interpolation algorithms. Then compares these four color image and gives evaluation. Then summarize their strengths and weaknesses.Keywords: Bayer, color filter array, DEMOSAICING, image reduction, MATLAB implementation摘要1Abstract2第一章 绪论41.1 研究背景41.2 课题意义51.3本文的主要内容和组织
9、结构6第二章 数字图像基础82.1色度学原理82.1.1 三色原理82.1.2 颜色的三个属性82.2 彩色模型92.2.1 RGB彩色模型92.2.2 HSI彩色模型10第三章 MATLAB简介以及图像处理的特点123.1 MATLAB概述123.2 MATLAB语言的特点123.3 MATLAB的主要功能133.4 MATLAB进行图像处理133.5综述14第四章 常规DEMOSAICING方法简介154.1双线性插值法154.2 基于梯度的插值算法16第五章 算法在MATLAB上的实现175.1 MATLAB使用175.2 程序框图205.3 算法的实现215.3.1 33双线性法215
10、.3.2 33梯度法245.3.3 55双线性法255.3.4 55不同系数双线性法275.4 结果及比较29第六章 结束语32致谢33参考文献34第一章 绪论1.1 研究背景近年来,随着数码相机的普及程度越来越高,数码摄影己经在航空航天、天文观测、显微技术、公共安全、医疗卫生等领域内应用越来越广泛。在现代生活中,数码摄影在新闻通讯、商业广告、婚庆摄影、工业生产、法律执行、物业管理、医疗诊断、车证管理等行业中也有十分深入的应用。然而,数码相机相关的核心技术仍然掌握在日本、美国、韩国等国手中。虽然我国近年来也在数字图像领域内加大了投入并加强了研发力度,但国内相关领域的技术仍然相对滞后。一般的静态
11、数码数字相机主要由以下五个部分1构成:光学镜头、成像芯片、图像处理模块、图像存储器、液晶显示器等。成像芯片也称为图像传感器,是决定数码相机品质的关键部分,它将光学信号转换为电荷输出。目前数码相机中使用的成像芯片2主要为CCD和CMOS两大类。CCD(即Charge Coupled Device)是电荷耦合器件,是由美国贝尔实验室(Bell Labs)的维拉波义耳(Willard S. Boyle)和乔治史密斯(George E. Smith)在1969年发明的,到20世纪70年代,经该实验室研究员改进成现代CCD的雏形,已可捕捉影像,工作原理如图1-1所示。CCD图像传感器可直接将光学信号转换
12、为数字电信号,实现图像的获取、存储、传输、处理和复现。它具有体积小、功耗低、灵敏度高、响应速度快等特点。经过几十年的发展,CCD成像质量已经很高,技术成熟并可大规模生产,然而价格依然不菲。图1-1 CCD工作原理CMOS(即Complementary Metal-Oxide-Semiconductor Transistor)为互补金属氧化物半导体器件,在片幅规格较大的单反数码相机中应用甚广。与CCD相比,CMOS接收外界光学信号后转化为电能,再透过芯片上的模数转换器(ADC)将获得的电信号转变为数字信号输出。它具有体积小、静态功耗低、集成度高、价格低、信息读取简单、输出信息速率快等优点。CMO
13、S是数码相机理想的成像芯片,然而目前 CCD仍是主流的成像器件。要获得一幅全彩图像,一般需要有三个图像传感器分别获得红、绿、蓝三原色信息。但为了降低数码相机的成本与体积,生产厂家通常会采用单片CCD或CMOS图像传感器,并通过其表面覆盖的彩色滤波阵列CFA(Color Filter Array),使得每个像素点只允许一种基色光透过到达该像素位置, 如图1-2所示。图1-2数码相机及其CFA一般CFA是使用染色的方法来直接涂于传感器上的,当光照到传感器上,芯片会输出对应成像点的电子信号,然后由外围电路完成电压转换,电压信号再经过模数转换器的放大与模数转换,形成数字信号。该数字信号代表了传感器的光
14、成像点捕捉到的光强信号。大部分传统消耗型数码相机都使用8位的数字信号值,因此可以产生 1670 万(即)种不同的颜色。1.2 课题意义由于 Bayer 图像是经过CFA采样得到的,需要进行插值才能恢复全彩色图像。然而,高质量的实时插值算法却一直是日本、美国、韩国等厂商产品的高附加值技术。国外对插值算法的研究日趋成熟,然而国内对这方面的研究相对较少。就目前现状来说,核心问题是如何在保证图像质量的前提下,尽可能地降低插值算法的复杂度。本文主要对插值算法进行研究,力求在保证高质量插值效果的同时控制算法保持在较低的复杂度,以尽可能地提高算法的实用性。图像传感器利用CFA来检测不同颜色的光的光强,常见的
15、彩色滤波阵列如图1-3所示。(1)Bayer CFA (2)Mosaic CFA (3)Stripe CFA图1-3 三种常见的CFA在大多数数码相机里,运用的较多的都是Bayer CFA。其中,R、G、B分别代表红色Red、绿色Green、蓝色Blue。另外在一些比较高端数码相机里,会使用CMY CFA,其中C、Y、M分别代表青色Cyan、黄色Yellow、紫色Magenta。Bayer CFA根据绿色在可见光谱中的位置最宽和绿色能体现最多的细节这两个特点提出的,它符合人眼对绿色最敏感的这一视觉特性,因此应用最广。关于Bayer CFA的插值算法的研究也最多。Bayer CFA由一组红色和绿
16、色的滤镜与一组绿色和蓝色的滤镜交叉循环组成,采样得到总像素中有一半的是绿,有四分之一是红色,另外四分之一是蓝色。用Bayer CFA制作的传感器获得的Bayer图像比较昏暗,色彩也并不鲜明,它在每个像素点只有红、绿或蓝一种颜色分量,实际效果如图1-4所示。其中(a)图为传感器获取的理想的Bayer格式的马赛克图片,已经可以从该图片上判断出图像的轮廓外形,只要靠得足够近,就能够比较清楚的看到一个个红、绿、蓝色的点,验证了每个像素只有一种基色;(b)图为(a)中红色线框内的图像放大,可以清晰的观察到Bayer格式的排列规律。 图1-4(a)sensor获取的原始图像 (b)红色线框区域的放大图1.
17、3本文的主要内容和组织结构对于上述传感器获得的Bayer图像,我们必须完成图像还原工作,也就是完成图像从Bayer格式到真彩色图的还原。一般采用插值算法将Bayer图像中的马赛克图像还原成每个像素包含红、绿、蓝三色的全彩色图,这个过程通常被称为DEMOSAICING。本文中主要是对数码相机的关键性环节DEMOSAICING进行研究,共有六章:第一章是绪论,介绍课题的研究背景,国内外动态,课题意义,并对论文内容和结构安排进行了阐述。第二章主要介绍了色度学的基础知识,包括图像处理中各种常用的颜色模型,以及彩色图像的成像模型,这些是进行图像还原的基础。第三章主要介绍了MATLAB软件的一些特点,基于
18、MATLAB在图像处理上的一些独特优势,本文采用MATLAB进行图像还原工作。第四章主要介绍了两种常用的彩色图像插值算法:双线性算法和基于梯度的插值算法。为下一章图像还原作准备。第五章主要记述了使用MATLAB进行图像还原的全过程,通过编写四种不同的插值算法的程序顺利的完成了图像还原工作,并对图像的细节做出了比较和评价。第六章主要对上述论文中的优点和不足进行了总结,将需要进一步研究讨论的内罗列了出来,最后展望了数字图像出来的未来。第二章 数字图像基础2.1色度学原理1666年,牛顿3发现当一束太阳光通过三棱镜后,光并不是简单的被折射,而是显示从紫色、靛、蓝、绿、黄、橙到红色的连续变化的光谱,进
19、过研究测试后得出可见光的连续光谱如图2-1所示。可见平时我们看到的大多数光并不是一种波长的光,而是由许多不同波长的光组合而成的。单色光在自然界中极少,往往是由我们通过机器产生的。后来的电磁理论认为光是一种电磁波,不同颜色的彩色光对应不同的波段。需要说明的是红橙黄绿蓝靛紫七种不同色光是从一个颜色平滑地过渡到另一个颜色,两种颜色光之间找不到明显的分界线。图2-1光谱图2.1.1 三色原理在人的视觉系统中,存在着两种感光细胞:杆状细胞和锥状细胞。其中杆状细胞为暗视器官,它们在光照弱时对物体较为敏感,将物体的总体形状形成于视野内。锥状细胞为明视器官,在光照强时起作用。人眼对红、绿、蓝最为敏感,在人眼的
20、大约七百万个锥状细胞中,对红光敏感的占65%,对绿光敏感的占33%,对蓝光敏感的占2%。任何颜色都可通过红、绿、蓝这三种颜色按不同的比例混合而成,同样,任何颜色都可以分解成红、绿、蓝三种颜色,这就是三色原理,也称三原色原理。需要说明的是红绿蓝作为三原色,它们之间是相互独立的,任何一种颜色都不能由其余的两种颜色组成。混合色的饱和度由三原色的比例来决定,其亮度是三种颜色的亮度之和。2.1.2 颜色的三个属性颜色是外界光刺激作用于人的视觉器官而产生的一种主观感觉,而人眼的视觉器官只能分辨颜色的色调、色饱和度和亮度三种特征,因此称这三个特征为颜色的三个基本属性。HSI彩色模型正是基于颜色的这三个基本属
21、性提出的。其中色调H(Hue)与光的波长有关,它表示人的感官对不同颜色的感受;饱和度S(Saturation)表示颜色的纯度,饱和度越大,颜色看起来就会越鲜艳;强度I(Intensity)对应成像亮度和图像灰度,是颜色的明亮程度。2.2 彩色模型为了科学并定量的描述和使用颜色,人们提出了多种色彩模型。目前常用的彩色模型有面向硬件设备的RGB彩色模型和面向图像处理的HSI彩色模型。2.2.1 RGB彩色模型依据三色原理进行的颜色匹配实验4中,当R、G、B相对亮度比例为1.0000:4.5907:0.0601时就能匹配出等能白光,所以CIE选取这一比例作为红、绿、蓝三原色的单位量。RGB彩色模型是
22、根据三色原理提出来的,如图2-2所示。图2-2 RGB彩色空间模型在RGB立方体模型中,原点(0,0,0)对应黑色,顶点(1,1,1)对应白色,从原点到顶点(1,1,1)的连线称为灰色线,所有灰度值都分布在这条线上。其中位于X、Y、Z轴上的三个顶点分别对应红、绿、蓝三原色,其余各点分别对应不同的颜色,并由从原点指向该点的向量来定义。在RGB彩色模型中,所表示的图像由红、绿、蓝三种颜色分量组成。RGB彩色模型是通过颜色的加运算来完成颜色匹配的,当混合色的饱和度和亮度与另一种光的相等时,他们在人眼的视觉上将等效。对应RGB彩色模型的有一种CMY表色系则是通过减运算来完成颜色匹配的彩色模型,常用于彩
23、色打印中,可通过RGB模型转换而来,转换方程表示为:(2-1)2.2.2 HSI彩色模型HSI彩色模型是由美国色彩学家孟塞尔(H.A.Munseu)基于颜色的三个基本属性于1915年提出的。它从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation)和亮度(Intensity)来描述色彩。它建立在两个重要的事实之上:其一是I分量与图像信息的强弱有关,其二是H和S分量和人感受颜色的方式紧密相连。这使得HSI模型非常适合处理和人的视觉系统相关的图像处理的算法。HSI彩色空间模型可以采用如图2-3所示的锥形体来表示。图2-3 HSI彩色模型HSI彩色模型和RGB彩色模型之间可以相互转换,
24、 RGB彩色模型对应HIS彩色模型的转换方程如下:(2-2)其中色调分量:(2-3)HSI模型作为一种可以直接显示的模型,更符合人描述和解释颜色的方式,它把图像分成彩色信息和灰度信息,使其更符合灰度级的数字图像处理技术。第三章 MATLAB简介以及图像处理的特点3.1 MATLAB概述MATLAB是矩阵实验室(Matrix Laboratory)之意,是美国Mathworks公司推出的一款专业计算软件。经过多年的不断完善,现已发展成为国际公认的最优秀的科学计算与数学应用软件之一,也是近几年来在国内外广泛流行的一种可视化科学计算软件。MATLAB功能强大、界面友好,包含了针对信号处理、控制系统、
25、图像处理、统计分析、小波分析、财政金融等30多个不同领域的可直接运用的工具箱。MATLAB扩充性强,支持函数的二次开发,除内部函数外,所有MATLAB主文件包和各种工具包都是可读可修改的文件,用户可以通过对源程序的修改或加入自己编写的程序来构造新的专用工具包。3.2 MATLAB语言的特点MATLAB语言最突出的特点5就是简洁、直观。MATLAB的程序开发环境也是如此。MATLAB语言的主要优势:1)语言简洁,使用灵活,库函数相当丰富,程序书写形式自由多样,利用其丰富的库函数可避免繁杂的子程序编程任务,减少了很多程序的重复编写。2)MATLAB既具有结构化的控制语句又有面向对象编程的特性。3)
26、程序限制不严格,程序设计自由度大。例如,在MATLAB里,用户无需对矩阵预定义就可使用。4)程序的可移植性好,基本上不用修改就可以在各种型号的计算机或操作系统上运行。5)源程序的开放性强。MATLAB支持用户对其函数进行二次开发,除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。MATLAB也有劣势:它和其他高级程序相比,因为MATLAB的程序没有编译等预处理过程,也不生成可执行文件,程序采用及时解释并执行的方式,所以导致程序的执行速度较慢。3.3 MATLAB的主要功能随着MATIAB版本的升级,MATLAB
27、不断完善、功能变得越来越强大,这也是它也能够成为世界顶级的科学计算与数学应用软件的原因。MATLAB的主要功能6有:1)数值计算功能:MATLAB起源于矩阵运算,因此数值计算功能一直是它优于其他数学应用软件的原因之一。2)数据分析功能:MATLAB可以将所需计算的数据以二维、三维乃至四维的图形表现。这是其他软件所不具备的,在分析数据间的本质关系起着非常重要的作用。3)图像处理功能:MATLAB可以对图像文件进读写、图像类型转换、图像变换、系统增强等。4)动态仿真功能:MATLAB提供的交互程序SIMULINK可以建立直观的系统模型,进行仿真并模拟动态系统。3.4 MATLAB进行图像处理数字图
28、像处理的研究领域非常广泛,从学科上可以分为图像的数字化、图像变换、图像增强、图像恢复、图像分割、图像分析、图像的压缩等7。1)基本图像操作:图像类型转换、图像文件的读写与显示、其它常用图像操作。MATLAB工具箱支持真彩色图像(RGB)、索引色图像、灰度图像(I)和二值图像(BW)四种图像类型,且这四种类型之间可以相互转换。可以用imread()函数读入各种图像文件,用imwrite()函数将数据写入指定图像文件,用image()函数把图像显示在屏幕上,用subplot()函数将一个窗口分成几个部分分别显示不同图像。另外还可以调用fopen()、fread()等函数将各种不同非图像类型文件读入
29、再对其处理。用imresize()函数实现图像的插值缩放。用imrotate()函数实现图像的插值旋转。用lmcrop()函数剪切图像中的一个矩形子图。2)图像变换功能:傅立叶变换、离散余弦变换、radon变换、离散小波变换。傅立叶变换在图像处理中起着至关重要的作用。可用fft2()和ifft2()函数计算二维傅立叶变换及其逆变换,用fftn()和ifftn()函数计算n维傅立叶变换和逆变换。可用dct2()和idct2()函数实现二维离散余弦变换及逆变换。可用radon()函数计算指定方向上图像矩阵的投影,用iradon()函数实现逆radon变换。可用dwt()和idwt()函数实现一维离
30、散小波变换及其反变换,用wavedec()和waverec()实现一维信号的多层小波分解和多层重构等。3)图像增强功能:直方图均衡化、灰度变换、平滑与锐化滤波。可用histeq()函数实现直方图均衡化,使原图像灰度集中的区域拉开或使灰度分布均匀,到达增大反差,另图像的细节变得更加清晰。可用imadjust()函数实现灰度变换过程,将图像中低对比度(即整个图像偏亮或偏暗)的区域,扩大图像灰度范围,以达到改善图像质量的目的。可用fspecial()函数预先创建各种自定义的滤波算子进行卷积运算,再用filter()或cony2()函数在次基础上进行滤波。4)边缘检测功能:往往物体和背景之间会在灰度、
31、颜色或纹理等特性上存在差异,边缘检测就是利用这些差异来检测图像特性发生变化的位置。它主要包括三个步骤:一是检测出图像在灰度上变化的边界点;二是删除多余的边界点或填补间断的边界点;三是将这些边界点连接成完整的线。可用edge()函数实现基于sobel算子、prewitt算子、Roberts算子、Log算子和canny算子的检测边缘。3.5综述本章简单介绍了MATLAB自身的语音特点和主要功能。利用MATLAB语言及其所提供的函数进行图像处理,编程简单、操作方便、可靠性强,能够达到预期的效果。MATLAB起源于矩阵,具有强大的矩阵运算能力,同时MATLAB中的数字图像也是以矩阵形式表示的,这就决定
32、了它在处理数字图像上的独特优势。正是基于此,本文采用了MATLAB编写程序处理DEMOSAICING过程。第四章 常规DEMOSAICING方法简介在现有文献中提出了大量的彩色插值算法,本文在此介绍两种典型而有效的算法,为第五章MATLAB实现图像彩色还原作准备。4.1双线性插值法双线性插值算法(bilinear8)是基于Bayer CFA提出来的,它先找出最接近像素的四个图素,然后在它们之间作差补效果。此法属于单通道独立插值算法,简单、易懂,它是设计新型插值算法的基础。图4-1 Bayer采样阵列在图4-1中,在每个像素位置只有一种相应的颜色分量,以为例,此处只有蓝色信息,为了得到全彩信息,
33、必须利用相邻位置的红色和绿色分量来恢复出(4,4)位置的红色和绿色分量。双线性插值算法采用33滤波器,并取其相邻位置同色分量的平均值,因此可以得到: (4-1) (4-2)同理可得到、处的其它两色分量。由于双线性插值算法属于单通道独立插值算法,没有考虑到三个颜色通道之间的相关性,所以彩色还原效果一般,且容易在高频处(即图片边界)产生突变。4.2 基于梯度的插值算法基于梯度的插值算法9是基于以下两点提出的:一是在Bayer CFA中绿色像素占了总像素的一半,能够反映更多的细节,因此,优先考虑恢复绿色分量,再根据绿色信息恢复出红色和蓝色分量;二是为了解决插值在图片边缘产生突变,通过计算梯度来检测图
34、片边界方向,使插值沿着图片边界进行。仍以图4-1中为例,设为该点水平方向的梯度,为该点竖直方向的梯度,则、可由一阶微分计算得到:即采用亮度分量来确定参考像素点可能的边界方向,其中: (4-3) (4-4)通过比较、值的大小来确定进行插值的方向:(4-5)当所有绿色分量都得到后,就可以插值恢复出红色和蓝色分量。此时需要用到色差恒定思想:在图片的一小片平滑区域内,色差是恒定的。可得到值如下:(4-6)同理可得到、处的其它两色分量。 第五章 算法在MATLAB上的实现如前所述基于MATLAB在处理数字图像上的独特优势,本文采用MATLAB编写程序处理DEMOSAICING过程。5.1 MATLAB使
35、用在PC上运行MATLAB,进入主界面如图5-1所示:图5-1 MATLAB主界面可以看出MATLAB主界面可分为五个大的部分:其一是主界面中最大也位于最中部的命令窗口(Command Window),在这儿输入程序或命令,回车可直接出结果;其二是位于主界面左侧的文件夹窗口(Current Folder),在这儿可以快速找到需要的文件;其三是位于主界面右上测的工作环境窗口(Workspace),在这儿可以查看运行过程中的一些中间变量的值和运行结果的数值;其四是位于主界面右下侧的历史命令窗口(Command History),在这儿可以查看过去的一些命令活程序;最后位于主界面上侧的可以统称为工具
36、栏,在这儿有一些关于软件操作的命令和一些快捷图标。本文程序中使用了读写操作,因此在运行程序之前需要先将Current Folder固定,否则软件找不到需要读写文件的具体位置。可在Current Folder窗口快速设置,也可以点击工具栏中的FileSet Path进行设置,弹出窗口如图5-2所示:图5-2 Set Path窗口点击Add Folder,弹出窗口如图5-3所示:图5-3 Add Folder to Path窗口选好合适路径后,点击“确定”按钮。这时会看到这个路径已经加入Path中,单击此路径,点击图5-2中的“Save”按钮,Set Path成功。点击图5-2中的“Close”按
37、钮,返回到MATLAB主界面。点击主界面中的File/New/Script或工具栏上的快捷按钮,弹出如图5-4所示的编辑窗口,在这里可以编辑所需要的程序。图5-4 程序编辑窗口为了便于修改,先将程序保存下来。也可以直接点击图5-4中的DebugSave File and Run或快捷键,在第一次运行时软件会弹出如图5-5所示的保存窗口。选好保存位置并改好文件名后,点击“保存”按钮,软件自动保存并运行出结果。图5-5 保存窗口5.2 程序框图本文设计了两个大类的算法实现:33算法和55算法。其中33算法包括33双线性算法和33基于梯度的算法,它们的思路相同,只在图像的主要部分进行处理的算法不同,
38、程序框图如图5-6所示。N2310Y读入原始数据并赋给矩阵点是否在边界显示原图、彩图边界处理R33G32G23B22结束点的位置开始图5-6 33程序框图55算法包括55双线性算法和55不同系数的双线性算法,和33算法一样的是,它们的思路相同,在图像的主要部分进行处理时算法不同;而和33算法不同的是,它在处理边界时,包括了55边界和33边界,因此在处理时要比33算法的程序多一个步骤,程序框图如图5-7所示。NYN2310Y开始读入原始数据并赋给矩阵55边界?显示原图、彩图边界处理G34G43B44结束点的位置33边界?2310G32G23B223点的位置R55R55图5-7 55程序框图其中读
39、入原始数据并赋给矩阵可由如下方式实现。由于原始数据并不是MATLAB能够直接读取的文件类型,因此此时我们采用指针fid=fopen(00157.raw,r),并以8bit位来读取原始数据A1,cc=fread(fid,w*h,uint8)。程序框图中的其它部分将在下一节介绍。5.3 算法的实现5.3.1 33双线性法这个程序主要包含五大功能模块:一是设置图像的大小,二是打开原始图像,三是对图像边界进行处理,四是对图像主要部分进行处理,五是将图像显示出来。1)设置图像的大小。已知原始图像的宽度width=1600,高度height=1200,因此在进行图像处理之前,我们先设定图像的大小:w=16
40、00;h=1200。本程序基于Bayer格式,因此,先预设四个16001200大小的矩阵:I_data=zeros(h,w);R=zeros(h,w);G=zeros(h,w);B=zeros(h,w)。其中I_data用于存放原始图像的数据,R、G、B分别用于存放Bayer格式图像所需的R、G、B的数据。程序如下:w=1600;h=1200;I_data=zeros(h,w);R=zeros(h,w);G=zeros(h,w);B=zeros(h,w);2)打开原始图像。由下面小段程序实现:fid=fopen(00157.raw,r);%指针指向文件00157.raw,且只读A1,cc=fr
41、ead(fid,w*h,uint8);%打开文件00157.raw并以8bit方式采集数据A2=uint16(A1);for i=1:h for j=1:w I_data(i,j)=A2(i-1)*w+j);%将数据赋值给矩阵I endend由于原始图像的格式并不是MATLAB本身能直接处理的数据格式,因此采用了指针fid指向名为00157.raw的文件(这儿就是为何前面要预设路径set path的原因,否则软件没法正确找到所要处理的文件),并用fread()函数将图像的16001200个数据以8bit形式存入数列A1中。此时并不符合MATLAB显示图像的格式标准,因此采用了for循环将数据对
42、应的存入I_data=zeros(h,w)矩阵中,此时再用cat()、figure和imshow()函数即可将原始图像显示出来。原始图像如图5-8所示。3)图像边界处理。由下面小段程序实现:for i=1:h for j=1:w bit_i=bitget(i,1); %以二进制方式取个数的低位的第一位 bit_j=bitget(j,1); %用于判断不在边界时点的位置 bit_ij=bit_i*2+ bit_j;if (i=1)|(i=h)|(j=1)|(j=w)%此时在图像边界 R(i,j)=A2(i-1)*w+j);%取边界本身位置的值 G(i,j)=A2(i-1)*w+j); B(i,j
43、)=A2(i-1)*w+j); else%此时是图像主要部分用(i=1)|(i=h)|(j=1)|(j=w)判断图像的边界。因为已经在图像的边界,外侧没有数据,此时仍然采用33的方式,MATLAB软件将会报错,没法处理,因此采用了for循环将位于图像边界的数据直接赋值到R、G、B矩阵中。这并不意味着没有对图像边界上的图像进行处理,而是在处理过程中将位于图像边界上的数据以加权系数为1的方式处理的。4)图像主要部分的处理。由下面小段程序实现:else%此时是图像主要部分 switch(bit_ij)%判断所需处理的像素所在的位置 case 0%此时点位于典型位置B22R(i,j)=(A2(i-2)
44、*w+j-1)+ A2(i-2)*w+j+1)+ A2(i*w+j-1)+ A2(i*w+j+1)/4;G(i,j)=(A2(i-1)*w+j-1)+ A2(i-1)*w+j+1)+ A2(i-2)*w+j)+ A2(i*w+j)/4;B(i,j)=A2(i-1)*w+j); case 1%此时点位于典型位置G23R(i,j)=(A2(i-2)*w+j)+ A2(i*w+j)/2;G(i,j)=A2(i-1)*w+j);B(i,j)= (A2(i-1)*w+j-1)+ A2(i-1)*w+j+1)/2; case 2%此时点位于典型位置G32R(i,j)=(A2(i-1)*w+j-1)+ A2
45、(i-1)*w+j+1)/2;G(i,j)=A2(i-1)*w+j);B(i,j)= (A2(i-2)*w+j)+ A2(i*w+j)/2; case 3%此时点位于典型位置R33R(i,j)=A2(i-1)*w+j);G(i,j)= (A2(i-1)*w+j-1)+ A2(i-1)*w+j+1)+ A2(i-2)*w+j)+ A2(i*w+j)/4;B(i,j)= (A2(i-2)*w+j-1)+ A2(i-2)*w+j+1)+ A2(i*w+j-1)+ A2(i*w+j+1)/4;otherwis R(i,j)=255; end end end end用bit_ij=bit_i*2+ bit_j计算数据的临时值,用switch()函数判断数据在图像中的具体位置,有B22、G23、G32和R33四个典型位置,此时严格按