RGB TO YCBCR

devtools/2024/12/30 21:08:39/

YCBCR基本原理:

部分传感器自己定义:

重点RGB转换YCBCR公式:

 

代码分几个模块分析:

1.RGB565 to RGB 888,但会造成饱和度稍微强一些,用损失图像精度来换取资源消耗

assign rgb888_r         = {img_red  , img_red[4:2]  };
assign rgb888_g         = {img_green, img_green[5:4]};
assign rgb888_b         = {img_blue , img_blue[4:2] };

2.同步输出数据接口信号,处理后的

assign post_frame_vsync = pre_frame_vsync_d[2]      ;
assign post_frame_hsync = pre_frame_hsync_d[2]      ;
assign post_frame_de    = pre_frame_de_d[2]         ;
assign img_y            = post_frame_hsync ? img_y1 : 8'd0;
assign img_cb           = post_frame_hsync ? img_cb1: 8'd0;
assign img_cr           = post_frame_hsync ? img_cr1: 8'd0;

3.加、乘、还原数据

//step1 pipeline mult
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginrgb_r_m0 <= 16'd0;rgb_r_m1 <= 16'd0;rgb_r_m2 <= 16'd0;rgb_g_m0 <= 16'd0;rgb_g_m1 <= 16'd0;rgb_g_m2 <= 16'd0;rgb_b_m0 <= 16'd0;rgb_b_m1 <= 16'd0;rgb_b_m2 <= 16'd0;endelse beginrgb_r_m0 <= rgb888_r * 8'd77 ;rgb_r_m1 <= rgb888_r * 8'd43 ;rgb_r_m2 <= rgb888_r << 3'd7 ;rgb_g_m0 <= rgb888_g  * 8'd150;rgb_g_m1 <= rgb888_g * 8'd85 ;rgb_g_m2 <= rgb888_g * 8'd107;rgb_b_m0 <= rgb888_b * 8'd29 ;rgb_b_m1 <= rgb888_b << 3'd7 ;rgb_b_m2 <= rgb888_b * 8'd21 ;end
end//step2 pipeline add
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginimg_y0  <= 16'd0;img_cb0 <= 16'd0;img_cr0 <= 16'd0;endelse beginimg_y0  <= rgb_r_m0 + rgb_g_m0 + rgb_b_m0;img_cb0 <= rgb_b_m1 - rgb_r_m1 - rgb_g_m1 + 16'd32768;img_cr0 <= rgb_r_m2 - rgb_g_m2 - rgb_b_m2 + 16'd32768;endend//step3 pipeline div 右移8位
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginimg_y1  <= 8'd0;img_cb1 <= 8'd0;img_cr1 <= 8'd0;endelse beginimg_y1  <= img_y0 [15:8];img_cb1 <= img_cb0[15:8];img_cr1 <= img_cr0[15:8];end
end

4.延时3拍以同步数据信号,同步信号,输出图像到输入图像有3ns的延迟

assign post_frame_vsync = pre_frame_vsync_d[2]      ;
assign post_frame_hsync = pre_frame_hsync_d[2]      ;
assign post_frame_de    = pre_frame_de_d[2]         ;
assign img_y            = post_frame_hsync ? img_y1 : 8'd0;
assign img_cb           = post_frame_hsync ? img_cb1: 8'd0;
assign img_cr           = post_frame_hsync ? img_cr1: 8'd0;always@(posedge clk or negedge rst_n) beginif(!rst_n) beginpre_frame_vsync_d <= 3'd0;pre_frame_hsync_d <= 3'd0;pre_frame_de_d    <= 3'd0;endelse beginpre_frame_vsync_d <= {pre_frame_vsync_d[1:0], pre_frame_vsync};pre_frame_hsync_d <= {pre_frame_hsync_d[1:0], pre_frame_hsync};pre_frame_de_d    <= {pre_frame_de_d[1:0]   , pre_frame_de   };end
end


http://www.ppmy.cn/devtools/146207.html

相关文章

【Linux】Centos7下载npm

Index of /dist/v16.20.2/ (nodejs.org) 下载 wget https://nodejs.org/dist/v16.20.2/node-v16.20.2-linux-x64.tar.gz解压 sudo tar -zxvf node-v16.20.2-linux-x64.tar.gz 配置环境变量 sudo vim /etc/profile export NODE_HOME/usr/local/node-v16.20.2-linux-x64 ex…

服务器反应慢,秒杀设计

目录 服务器反应慢 线上服务器cup飙升&#xff0c;如果定位Java代码&#xff1f; 服务器变慢如何诊断处理&#xff1f; 线上接口负载剧增&#xff0c;快扛不住了&#xff0c;解决方法是什么&#xff1f; 秒杀设计 从全局角度如何设计一个秒杀系统 秒杀活动里遇到的问题 …

Unity中UGUI的Button动态绑定引用问题

Unity中UGUI的Button动态绑定引用问题 问题代码修改代码如下总结 问题代码 Button动态绑定几个连续的按钮事件时使用for循环的i做按钮的id发现按钮点击对应不上。如下代码 for (int i 0; i < 10; i) {btn[i].onClick.AddListener(() >{Click(i);}); }/// <summary&…

数字后端培训项目Floorplan常见问题系列专题续集1

今天继续给大家分享下数字IC后端设计实现floorplan阶段常见问题系列专题。这些问题都是来自于咱们社区IC后端训练营学员提问的问题库。目前这部分问题库已经积累了4年了&#xff0c;后面会陆续分享这方面的问题。 希望对大家的数字后端学习和工作有所帮助。 数字后端项目Floor…

KOI技术-事件驱动编程(前端)

1 “你日渐平庸&#xff0c;甘于平庸&#xff0c;将继续平庸。”——《以自己喜欢的方式过一生》 2. “总是有人要赢的&#xff0c;那为什么不能是我呢?”——科比布莱恩特 3. “你那么憎恨那些人&#xff0c;和他们斗了那么久&#xff0c;最终却要变得和他们一样&#xff0c;…

策略模式

一、定义 策略模式&#xff1a;该模式定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;且算 法的变化不会影响使用算法的客户。 二、实际应用 当前有一个抽象类 鸭子 &#xff08;Duck &#xff09;&#xff0c;其中有叫声&#…

git revert

git revert 是 Git 中的一个命令&#xff0c;用于创建一个新的提交&#xff0c;该提交会撤销&#xff08;或“反转”&#xff09;之前某个特定提交所做的更改。这个命令非常有用&#xff0c;因为它允许你在不改变项目历史的情况下&#xff0c;撤销某个提交的更改效果。 git re…

【乐企文件生成工程】根据特定要素动态选择需要生成的发票板式文件实现

乐企版式文件生成工程,涉及到多个票种,不乏特殊票种的生成,如果每个特殊票种都单独写逻辑,那整个代码写起来体量就不得了,如何实现代码逻辑的同时也更优雅的实现代码扩展性呢,您接着往下看。 使用设计模式 工厂模式 1、定义接口InvoiceFileService public interface Inv…