FPGA图像处理之RGB转YCbCr算法实现

编程入门 行业动态 更新时间:2024-10-27 19:25:57

FPGA<a href=https://www.elefans.com/category/jswz/34/1769353.html style=图像处理之RGB转YCbCr算法实现"/>

FPGA图像处理之RGB转YCbCr算法实现

1. RGB模型介绍

所谓RGB模型,是认为人眼里有三种感光细胞,分别对应红色、绿色和蓝色最敏感。人眼之所以看到各种颜色的光,主要是这三种感光细胞感觉综合的结果,而红、绿、蓝被称为三原色。

2. YCbCr色域介绍

YCbCr在世界数字组织视频标准研制过程中,称为ITU - R BT.601 建议的一部分,其实是YUV经过缩放和偏移的翻版。YCbCr由Y(Luminance)、Cb(Chrominance-Blue)和Cr(Chrominance-Red)组成,其中Y表示颜色的明亮度和浓度,Cb和Cr则分别表示颜色的蓝色浓度偏移量和红色浓度偏移量。
YCbCr格式是一种数字信号,可以细分为两种格式: tv range格式与full range格式,主要区别如下。
1)tv range 格式
Y∈[16,235],Cb∈[16,240],Cr∈[16,240],主要是广播电视采用的数字标准。
2)full range 格式
Y、Cb、Cr∈[0,255],主要是PC端采用的标准,所以也称为pc range格式。

3. RGB与YCbCr转换公式

(1)对标准SDTV(标准清晰度电视),采用ITU - RBT.601数据格式,其中YCbCr为tv range格式,RGB与YCbCr的相互转换公式如下:

(2)(

(2)对full range 或者pc range 的YCbCr格式

FPGA 硬件实现推导

原始公式如下:

首先去掉浮点,把数值扩大256倍,公式如下(舍去小数点,不能四舍五入):

再对上述结果右移8位,相当于除了256

同上,推导Cb/Cr的计算公式如下:

FPGA代码实现

module RGB888_YCbCr444(input clk,input rst_n,//Image data prepred to be processedinput pre_img_vsync,    //Prepared Image data vsync valid signalinput pre_img_href,     //Prepared Image data href valid signalinput [7:0] per_img_red,   //Prepared Image red data to be processedinput [7:0] per_img_green,   //Prepared Image green data to be processedinput [7:0] per_img_blue,   //Prepared Image blue data to be processed//Image data has been processedoutput post_img_vsync,   //Processed Image data vsync valid signaloutput post_img_href,    //Processed Image data href valid signaloutput [7:0] post_img_Y,   //Processed Image brightness outputoutput [7:0] post_img_Cb,   //Processed Image blue shading outputoutput [7:0] post_img_Cr,   //Processed Image red shading output);reg [15:0] img_red_r0,img_red_r1,img_red_r2;reg [15:0] img_green_r0,img_green_r1,img_green_r2;reg [15:0] img_blue_r0,img_blue_r1,img_blue_r2;always@(posedge clk)beginimg_red_r0 <= per_img_red * 8'd76;img_red_r1 <= per_img_red * 8'd43;img_red_r2 <= per_img_red * 8'd128;img_green_r0 <= per_img_green * 8'd150;img_green_r1 <= per_img_green * 8'd84;img_green_r2 <= per_img_green * 8'd107;img_blue_r0 <= per_img_blue * 8'd29;img_blue_r1 <= per_img_blue * 8'd128;img_blue_r2 <= per_img_blue * 8'd20;endreg [15:0] img_Y_r0;reg [15:0] img_Cb_r0;reg [15:0] img_Cr_r0;always@(posedge clk)beginimg_Y_r0 <= img_red_r0 + img_green_r0 + img_blue_r0;img_Cb_r0 <= img_blue_r1 - img_red_r1 - img_green_r1 + 16'd32768;img_Cr_r0 <= img_red_r2 - img_green_r2 - img_blue_r2 + 16'd32768;endreg [7:0] img_Y_r1;reg [7:0] img_Cb_r1;reg [7:0] img_Cr_r1;always@(posedge clk)beginimg_Y_r1 <= img_Y_r0[15:8];img_Cb_r1 <= img_Cb_r1[15:8];img_Cr_r1 <= img_Cr_r1[15:8];endreg [2:0] per_img_vsync_r;reg [2:0] per_img_href_r;always@(posedge clk)beginif(!rst_n)beginper_img_vsync_r <= 0;per_img_href_r <= 0;endelse beginper_img_vsync_r <= {per_img_vsync_r[1:0],per_img_vsync};per_img_href_r <= {per_img_href_r[1:0],pre_img_href};endendassign post_img_vsync = per_img_vsync_r[2];assign post_img_href = per_img_href_r[2];assign post_img_Y = post_img_href ? img_Y_r1 : 8'd0;assign post_img_Cb = post_img_href ? img_Cb_r1 : 8'd0;assign post_img_Cr = post_img_href ? img_Cr_r1 : 8'd0;endmodule

参考资料:基于MATLAB 与FPGA的图像处理教程 (韩彬)

更多推荐

FPGA图像处理之RGB转YCbCr算法实现

本文发布于:2024-02-25 18:40:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1699923.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图像处理   算法   FPGA   YCbCr   RGB

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!