采用FPGA进行bayer插值算法的实现方法
简介
Bayer型CFA上面每一个感光点仅允许一种颜色分量通过,所以其整帧画面是由单通道RGB颜色组成的灰度图。其可按照BGGR,RGGB,GBRG,GRBG四种排列方式给出。若想获得全彩的图像,必须估计出每一个像素点的其他两个像素灰度值。以图1所示,图中B33
图1 B点的5×5邻域
点采集到的只有蓝色灰度值,这就需要估计出B33处的R和G灰度值,如此方可将Bayer型数据转换为RGB3通道数据。我们称这个过程为Bayer型颜色滤波阵列的插值过程,又名去马赛克(Demosaicing)。
2. 算法描述
关于颜色插值算法有很多,包括传统上的最近邻域插值法,双线性插值法(Bilinear)[1],这些算法在颜色比较平坦的区域得到了很好的插值效果,但对于一些边缘部分(高频部分)的处理效果明显存在缺陷,导致整幅图像看上去变得模糊了。近年来出现了Laplacian, Freeman, Hamilton-Adams,Pei-Tam,Kimmel,AP,ECI等算法。它们不但能很好地平滑平坦区域,也引入了边缘信息进行计算,利用了空间信息,还利用了色差与亮度之间的相关性,使得在一定程度上较好地保留了边缘信息,总体效果明显好于传统算法。但是其中也有一部分算法比较复杂,不易于在FPGA等VLSI上实现,包括浮点运算,权重相乘,除法运算等。经过研究,最后基本确定了基于G-B,G-R空间的颜色插值算法[2]。下面基于Matlab的实现方式对算法原理进行描述。
首先对于CFA型图像上的一点,定义以下颜色空间:
步骤一:先计算G点的Kr和Kb值
for i=3:m-2 for j=3:n-2 if(rem(i,2)~=0) if(rem(j,2)~=0) %B点计算周围4个G点Kb的值 Kb(i-1,j)=I(i-1,j)-(I(i-2,j)+I(i,j))/2; Kb(i,j-1)=I(i,j-1)-(I(i,j-2)+I(i,j))/2; Kb(i,j+1)=I(i,j+1)-(I(i,j+2)+I(i,j))/2; Kb(i+1,j)=I(i+1,j)-(I(i+2,j)+I(i,j))/2; end else if(rem(j,2)==0) %R点计算周围4个G点Kr的值 Kr(i-1,j)=I(i-1,j)-(I(i-2,j)+I(i,j))/2; Kr(i,j-1)=I(i,j-1)-(I(i,j-2)+I(i,j))/2; Kr(i,j+1)=I(i,j+1)-(I(i,j+2)+I(i,j))/2; Kr(i+1,j)=I(i+1,j)-(I(i+2,j)+I(i,j))/2; end end end end |
步骤二:计算所有G值
for i=3:m-2 for j=3:n-2 if(rem(i,2)~=0) if(rem(j,2)~=0) %B点根据周围4个G点Kb值计算G值 J(i,j,2)=I(i,j)+(Kb(i-1,j)+Kb(i,j-1)+Kb(i,j+1)+Kb(i+1,j))/4; else J(i,j,2)=I(i,j); end else if(rem(j,2)==0) %R点根据周围4个G点Kr值计算G值 J(i,j,2)=I(i,j)+(Kr(i-1,j)+Kr(i,j-1)+Kr(i,j+1)+Kr(i+1,j))/4; else J(i,j,2)=I(i,j); end end end end |
步骤三:再计算R,B点的Kb和Kr值
|
步骤四:再计算G点的R值和B值
|
步骤五:最后计算B点的R值和R点的B值
|
3. 实验结果
以图2为例,显示了该算法在Matlab上插值的结果,其中图2(a-b)为模拟的原始CFA格式图,图2(c-d)为插值后的对应图片,图2(e-f)为原始标准RGB图[3]。
图2(a) 05.png
图2(b) 08.png
图2(c) 05.png
图2(d) 08.png
图2(e) 05.png
图2(f) 08.png
当然,主观上看,恢复出的图片c,d与原始图像e,f几乎无区别,但如图中所示,仍然有一些细节可以辨别出。为了更加容易评价算法的性能,我们可以引入信噪比率指标:
为此,我们可将各算法比较如下表所示。其中,SCEE算法是在SC算法上引入Laplacian边缘算法的一种结合算法,ASIC为一家在FPGA上开发ISP厂家的算法指标[4]。
Image |
Fiture |
Bilinear |
Laplacian |
SC |
SCEE |
ASIC? |
1 |
25.35 29.48 24.90 |
30.02 34.84 30.02 |
33.10 35.68 33.40 |
34.18 36.28 34.63 |
34.78 36.50 34.96 |
|
2 |
31.43 36.32 32.33 |
33.31 41.01 34.93 |
35.07 41.47 39.71 |
35.81 42.19 40.81 |
40.18 41.94 40.59 |
|
3 |
33.42 37.06 33.19 |
34.68 42.31 35.31 |
39.46 42.84 40.95 |
40.17 43.44 41.69 |
39.92 43.70 41.99 |
|
4 |
32.56 36.51 32.90 |
33.97 40.67 34.42 |
37.52 41.80 40.61 |
37.90 41.96 40.88 |
40.83 42.09 38.29 |
|
5 |
25.87 29.21 25.54 |
30.62 35.98 30.67 |
34.39 36.81 35.48 |
35.12 37.32 36.25 |
34.87 37.73 36.92 |
|
6 |
26.55 30.95 26.32 |
31.16 36.14 30.98 |
34.25 36.90 34.14 |
35.59 37.66 35.51 |
35.01 37.52 35.74 |
|
7 |
32.64 36.23 32.42 |
34.65 42.20 34.92 |
39.27 41.94 40.90 |
40.10 42.93 42.13 |
40.28 43.78 42.94 |
|
8 |
22.58 27.34 22.31 |
28.28 33.56 28.14 |
29.86 33.15 30.03 |
31.96 34.68 32.30 |
32.49 35.11 33.28 |
|
9 |
31.42 35.65 31.53 |
34.42 41.57 34.15 |
39.09 41.47 38.69 |
40.64 42.61 40.03 |
41.41 42.88 40.40 |
|
10 |
31.55 35.29 31.24 |
34.29 41.38 33.87 |
39.65 42.09 39.20 |
40.50 42.77 40.04 |
40.85 43.24 40.47 |
|
11 |
28.13 32.25 28.19 |
31.75 37.33 32.10 |
35.07 38.17 36.33 |
36.01 38.74 37.50 |
36.97 38.70 37.37 |
|
12 |
32.29 36.33 31.48 |
34.64 42.43 34.15 |
38.47 42.14 39.23 |
39.91 43.42 41.04 |
40.38 43.50 41.34 |
|
13 |
23.12 26.42 22.78 |
27.30 30.75 26.94 |
31.20 32.64 30.87 |
31.24 32.38 30.92 |
30.54 32.41 31.38 |
|
14 |
27.95 32.05 28.36 |
31.07 37.38 32.68 |
33.35 37.95 36.63 |
34.00 38.60 37.50 |
34.99 38.62 37.50 |
|
15 |
30.87 34.72 30.13 |
32.52 39.56 33.98 |
35.08 40.35 38.07 |
35.78 40.87 39.04 |
38.82 40.71 38.97 |
|
16 |
30.17 34.71 30.22 |
33.37 39.72 34.23 |
37.13 39.97 37.44 |
38.78 41.05 39.11 |
38.35 40.89 38.79 |
|
17 |
31.24 34.57 31.07 |
33.68 39.53 33.95 |
39.38 40.56 38.34 |
39.90 40.80 38.74 |
39.14 40.83 39.85 |
|
18 |
27.28 30.51 26.88 |
31.17 34.81 30.92 |
35.04 36.53 33.88 |
35.07 36.31 33.89 |
35.08 36.60 35.15 |
|
19 |
26.84 31.74 27.14 |
32.32 38.40 32.92 |
34.72 37.29 34.61 |
37.06 39.15 36.97 |
38.27 39.83 37.66 |
|
20 |
30.72 34.39 30.50 |
35.77 39.78 34.36 |
38.44 40.52 37.48 |
39.36 41.08 38.33 |
37.97 41.62 40.68 |
|
21 |
27.47 31.58 27.48 |
31.91 36.47 31.57 |
35.19 37.61 35.29 |
36.01 37.95 36.12 |
35.68 38.15 36.86 |
|
22 |
29.78 33.45 29.29 |
33.27 37.93 33.18 |
36.11 38.58 36.00 |
36.58 39.10 36.94 |
36.25 39.30 37.69 |
|
23 |
34.53 38.12 34.28 |
35.51 43.36 37.35 |
39.66 43.54 39.41 |
40.25 44.18 40.07 |
40.92 44.21 43.50 |
|
24 |
26.37 29.44 25.13 |
30.56 33.42 28.70 |
34.03 35.56 32.07 |
33.74 35.10 31.87 |
31.72 35.18 34.25 |
|
Average |
29.17 33.10 28.98 |
32.51 38.36 32.69 |
36.02 38.98 36.61 |
36.90 39.61 37.60 |
37.32 39.79 38.19 |
4. FPGA插值算法设计
图3:Color Filter Array Interpolation Block Diagram
如图3所示,算法中需要5个模块,其中第一个模块需要存储4行单通道数据,以使其输出构建成5×5矩阵。第二个模块实现G分量的插值,第三个模块实现输出3×3输出,以方便在第4个模块中实现Kb,Kr的插值,最后输出RGB分量。
采用FPGA进行bayer插值算法的实现方法相关推荐
- 一种基于FPGA硬件求解对数的简化方法
本文研究了一种运用FPGA进行数据处理的方法,包括:提取输入数据的高log2M个比特位的数据,作为高有效位,根据预先设置的目标函数的计算表格,查找所述高有效位对应的目标函数值y(n)以及高有效位+1对 ...
- 【FPGA】时钟信号几种设计方法
最近找工作,课题组报告一堆事搞得不可开交,今天就再更一下时钟信号的几种设计方法吧,哇好气,今天发现这个破编辑器好烦,都快写完了,都有给我搞丢了,还得重新写!吐槽一下CSDN的博客编辑,希望不要再出现这 ...
- bayer插值算法(1):邻近插值算法
目录 前言 插值算法 Bayer阵列类别 邻近插值算法 代码示例 前言 相机生成的图像一般是bayer阵列的raw图,这时候如果转换成我们需要的rgb图像,就需要对应的bayer插值算法将丢失的rgb ...
- 采用FPGA实现音频模数转换器
摘 要 简要分析sigma-deIta(∑一△)架构模数转换器(ADC)原理,提出一种基于FPGA内部LVDS(Low Voltage Differential Signaling)接收器的音频ADC ...
- 采用FPGA IP实现DDR的读写控制的设计与验证
随着高速处理器的不断发展,嵌入式系统应用的领域越来越广泛,数字信号处理的规模也越来越大,系统中RAM规模不断增加,比如视频监控.图像数据采集等领域,图像处理的实时性对RAM带宽的要求不断增加,传统的S ...
- bayer插值算法(3):高质量线性插值算法
目录 前言 插值算法 高质量插值算法 代码示例 前言 相机生成的图像一般是bayer阵列的raw图,这时候如果转换成我们需要的rgb图像,就需要对应的bayer插值算法将丢失的rgb信息通过算法补齐 ...
- (21)FPGA面试题D触发器表示方法
1.1 FPGA面试题D触发器表示方法 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题D触发器表示方法: 5)结束语. 1.1.2 本节引言 " ...
- 【软件项目管理】用例分析方法采用一种面向对象的情景分析方法
用例分析方法采用一种面向对象的情景分析方法. 传统的结构化分析方法是面向功能的,而面向对象的视点是将系统看作一组服务,将问题看作相互作用的实体.用例分析方法采用面向对象的方法,将现实世界的" ...
- quartus管脚分配后需要保存吗_Quartus II中FPGA的管脚分配保存方法
一.摘要 将Quartus II中FPGA管脚的分配及保存方法做一个汇总. 二.管脚分配方法 FPGA 的管脚分配,除了在QII软件中,选择"Assignments ->Pin&quo ...
最新文章
- 特殊SQL语句及优化原则
- C语言 —— 把字符指针中的字符串,存入字符数组中
- php三位不够前面加0,php 格式化数字 位数不足前面加0补足的实现方法
- JQUERY的split
- hashCode()方法的性能优化
- DOM-12 【模拟桌面待讲评】鼠标事件深入、点击与拖拽分离、双击事件
- 【渝粤教育】广东开放大学 综合英语1 形成性考核 (36)
- Android 10分钟集成极光推送
- yii2 migrate 数据库迁移的简单分享
- spring框架 web开发_go语言web开发框架学习:Iris框架讲解(一)
- 新来个专家吐槽我们:连qps都不懂,靠谱吗?
- android获取设备的唯一编号,android如何获取设备的唯一设备码
- TypeScript入门教程 之 类/抽象类/构造器/Getter/Setter
- python的深拷贝和浅拷贝
- linux 自动获取ip和dns,linux 配置IP和DNS
- springboot动态切换数据源_Springboot整合Mybatis注解实现动态数据源切换
- Pycharm 远程连接服务器(ssh)运行深度学习代码 | 详细步骤
- PPT学习整理(四)表格
- 彼得林奇——如何看待股市大跌
- 什么是Python?Python简介