m基于FPGA的RGB转ycrcb颜色空间转换算法实现,包含testbench,对比三种转换方法

简介: m基于FPGA的RGB转ycrcb颜色空间转换算法实现,包含testbench,对比三种转换方法

1.算法仿真效果
vivado2019.2仿真结果如下:

f6d26621dfff52e0fe0b444a778e5c9f_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

其中1为直接乘法公式计算;

2为移位法计算;

3为分布式计算;

2.算法涉及理论知识概要
人类获得信息的主要方式是视觉,通常情况下颜色有2种描述方式,一种是RGB色度空间表示,一种是 YCbCr色度空间表示。然而,普通的R GB颜色空间对视频的显示存在很多问题,将其转换为YCbCr颜色空间能够很 好地适应现代社会的要求,本文正是采用一种新的方法,通过FPGA成功地将其转化,并得到正确的结果,此方法内 部变量少、算法优点突出、实时性好,十分易于在实际工程中实现。

 RGB颜色空间
    在RGB颜色空间中,1个带颜色的图像采样是用3个 值来表示一个像素点的相对的红、绿和蓝色比(3种光线的 主样构成颜色)。任何颜色都可以通过把红、绿和蓝通过 不同的比例相混得到。CRT和LCD通过分别对每个像素 点的红绿蓝值进行显示来得到各种颜色。从一个通常的观

察距离来看,不同的构成部分可以达到颜色上的真实感。

    YCbCr颜色空间
   人类视觉系统(HVS)相比亮度来说对于颜色不是那 么敏感。在RGB颜色空间中,3种颜色被平等地看待,并 用相同的分辨率存放起来。但是通过把亮度与颜色信息 分离,并对亮度值取更高的分辨率可以更有效地表示1个 颜色图像。

   颜色空间转换
    YCbCr颜色空间和它的变换(通常写为YUV)是1种 流行而高效的表示一个颜色图像的方法。YCrCb是国际 通用的B T.601数字电视信号中使用的彩色空间,它由 YU V彩色空间经过缩放和平移得到。YCrCb色度空间与 R GB色度空间的转换公式如下:

63987c8d06c1df99b3b83c2175e65691_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

直接乘法公式计算

   直接相乘,我们直接调用系统的IP核,如果版本不同,需要重新生成。如代码段中:

ac727f0b006a62114a2f9e7943b308aa_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

移位法计算

位移法就是用位移的方法来替换乘法器。

根据二进制乘法过程。二进制的乘法可以理解为,移位相加。
541d37e45025aa479201a7301ac2d21e_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

具体代码如上所示:

例如R*0010001100,那么其第三,四,八为1,所以结果为R移位7,R移位3,R移位2,最后三个相加得到。

f8499100ba64c1dbfa59a508169516f0_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

分布式计算

分布式算法是一种快速的流水线结构的算法,根据你提供的论文的要求,这个分布式算法的具体物理结构如下所示:

178dd318a36590c115433c04ae1314ab_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

将输入信号的每一位和另一个数相乘,通过10级流水线操作后,我们可以得到10个部分积,然后将10个部分积累加,得到最后的结果。

7fc8aee15d507b234edb57be376353d1_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.Verilog核心程序
````timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2023/03/26 18:01:20
// Design Name:
// Module Name: tops
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//

module tops(
clk,
ena,
r,
g,
b,
y,
cr,
cb
);

input clk;//输入时钟
input ena;//输入使能信号
input[7:0]r; //输入R,G,B信号
input[7:0]g;
input[7:0]b;

output[7:0]y;//输出Y,CR,CB信号
output[7:0]cr;
output[7:0]cb;

//mult your_instance_name (
// .CLK(CLK), // input wire CLK
// .A(A), // input wire [9 : 0] A
// .B(B), // input wire [9 : 0] B
// .SCLR(SCLR), // input wire SCLR
// .P(P) // output wire [19 : 0] P
//);
//================================================
wire[21:0]y1;
wire[21:0]cr1;
wire[21:0]cb1;
//================================================
wire[19:0]yr;
wire[19:0]yg;
wire[19:0]yb;

mult mult_yr(
.CLK (clk),
.A (10'd306),
.B ({r,2'b00}),
.SCLR (ena),
.P (yr)
);

mult mult_yg(
.CLK (clk),
.A (10'd601),
.B ({g,2'b00}),
.SCLR (ena),
.P (yg)
);

mult mult_yb(
.CLK (clk),
.A (10'd116),
.B ({b,2'b00}),
.SCLR (ena),
.P (yb)
);

assign y1 = yr + yg + yb;
assign y = y1[21:14];//y计算公式

wire[19:0]crr;
wire[19:0]crg;
wire[19:0]crb;

mult mult_crr(
.CLK (clk),
.A (10'd512),
.B ({r,2'b00}),
.SCLR (ena),
.P (crr)
);

mult mult_crg(
.CLK (clk),
.A (10'd429),
.B ({g,2'b00}),
.SCLR (ena),
.P (crg)
);

mult mult_crb(
.CLK (clk),
.A (10'd83),
.B ({b,2'b00}),
.SCLR (ena),
.P (crb)
);

assign cr1 = crr - crg - crb;
assign cr = cr1[21:14]+128;//cr计算公式

wire[19:0]cbr;
wire[19:0]cbg;
wire[19:0]cbb;

mult mult_cbr(
.CLK (clk),
.A (10'd173),
.B ({r,2'b00}),
.SCLR (ena),
.P (cbr)
);

mult mult_cbg(
.CLK (clk),
.A (10'd339),
.B ({g,2'b00}),
.SCLR (ena),
.P (cbg)
);

mult mult_cbb(
.CLK (clk),
.A (10'd512),
.B ({b,2'b00}),
.SCLR (ena),
.P (cbb)
);

assign cb1 = cbb - cbr - cbg;
assign cb = cb1[21:14]+128;//cb计算公式
endmodule
```

相关文章
|
19天前
|
机器学习/深度学习 算法 异构计算
m基于FPGA的多通道FIR滤波器verilog实现,包含testbench测试文件
本文介绍了使用VIVADO 2019.2仿真的多通道FIR滤波器设计。展示了系统RTL结构图,并简述了FIR滤波器的基本理论,包括单通道和多通道的概念、常见结构及设计方法,如窗函数法、频率采样法、优化算法和机器学习方法。此外,还提供了Verilog核心程序代码,用于实现4通道滤波器模块,包含时钟、复位信号及输入输出接口的定义。
48 7
|
8天前
|
编解码 算法 异构计算
基于FPGA的NC图像质量评估verilog实现,包含testbench和MATLAB辅助验证程序
在Vivado 2019.2和Matlab 2022a中测试的图像质量评估算法展示了效果。该算法基于NC指标,衡量图像与原始图像的相似度,关注分辨率、色彩深度和失真。提供的Verilog代码段用于读取并比较两个BMP文件,计算NC值。
|
17天前
|
存储 算法 物联网
R-Tree算法:空间索引的高效解决方案
【5月更文挑战第17天】R-Tree是用于多维空间索引的数据结构,常用于地理信息系统、数据库和计算机图形学。它通过分层矩形区域组织数据,支持快速查询。文章介绍了R-Tree的工作原理、应用场景,如地理信息存储和查询,以及Python的`rtree`库实现示例。此外,还讨论了R-Tree的优势(如空间效率和查询性能)与挑战(如实现复杂和内存消耗),以及优化和变种,如R* Tree和STR。R-Tree在机器学习、实时数据分析等领域有广泛应用,并与其他数据结构(如kd-trees和quad-trees)进行比较。未来趋势将聚焦于优化算法、动态适应性和分布式并行计算。
31 1
|
19天前
|
算法 异构计算
m基于FPGA的MPPT最大功率跟踪算法verilog实现,包含testbench
该内容包括三部分:1) 展示了Vivado 2019.2和Matlab中关于某种算法的仿真结果图像,可能与太阳能光伏系统的最大功率点跟踪(MPPT)相关。2) 简述了MPPT中的爬山法原理,通过调整光伏电池工作点以找到最大功率输出。3) 提供了一个Verilog程序模块`MPPT_test_tops`,用于测试MPPT算法,其中包含`UI_test`和`MPPT_module_U`两个子模块,处理光伏电流和电压信号。
17 1
|
19天前
|
前端开发 编译器 测试技术
LabVIEW FPGA利用响应式数字电子板快速开发空间应用程序
LabVIEW FPGA利用响应式数字电子板快速开发空间应用程序
24 1
|
19天前
|
编解码 算法 异构计算
m基于CCSDS标准的LDPC编码器的FPGA实现,包含testbench,码长1024,码率0.5
在Vivado 2019.2中进行的LDPC码仿真展示了算法的良好效果。LDPC码是一种1962年由Gallager提出的稀疏校验矩阵线性分组码,利用Tanner图表示编码解码结构。CCSDS标准定义的LDPC(1024,512)码具有准循环结构,适用于空间通信,其编码通过填充信息比特和校验节点的线性组合实现。Verilog代码示例展示了TEST_encoder_top模块,用于控制LDPC编码过程,包括时钟、复位信号处理和中间数据读取。
25 1
|
19天前
|
算法 数据可视化
圆填充( CIRCLE PACKING)算法圆堆图圆形空间填充算法可视化
圆填充( CIRCLE PACKING)算法圆堆图圆形空间填充算法可视化
|
19天前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到"result.txt"以供MATLAB显示图像分割效果。
|
19天前
|
存储 算法 异构计算
m基于FPGA的多功能信号发生器verilog实现,包含testbench,可以调整波形类型,幅度,频率,初始相位等
使用Vivado 2019.2仿真的DDS信号发生器展示了正弦、方波、锯齿波和三角波的输出,并能调整幅度和频率。DDS技术基于高速累加器、查找表和DAC,通过频率控制字和初始相位调整产生各种波形。Verilog程序提供了一个TEST模块,包含时钟、复位、信号选择、幅度和频率控制输入,以生成不同波形。
47 18
|
19天前
|
算法 计算机视觉 异构计算
基于直方图相似性的图像分类算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容包含了一段关于图像处理算法的摘要,主要包括: 1. 展示了MATLAB和FPGA的测试结果图像,显示了图像读取完成的标志和相似性指标,其中图1与图2有较强相似性,图1与图3相似性较弱。 2. 算法使用的是vivado 2019.2和matlab 2022A版本。 3. 算法原理涉及图像直方图统计和直方图相似性度量,通过计算直方图的差异来衡量图像相似度,FPGA实现包括图像采集、直方图计算、比较和分类决策步骤。 4. 提供了一个部分核心Verilog程序,用于读取图像数据并在FPGA上进行直方图相似性计算。