RGB---YCbCr图像转换------图像处理
RGB—YCbCr图像转换------图像处理
介绍
通过MATLAB把RGB888的图像转换为RGB332的图像数据,然后通过MATLAB保存到TXT文本当中(因为332格数据为8bit正好一个字节,串口正好一次发送一个像素点,怎么转换之前写过 哈哈)。然后通过将RGB332转换为RGB565格式数据存入到SDRAM中,然后通过VGA驱动模块读出数据进行RGB—YCbCr图像转换最后通过VGA显示,需要注意的是在RGB—YCbCr图像转换过程中有数据计算需要打拍同步行场信号。
整体流程
首先通过串口接收端接收上位机发送的640 *480大小的图片数据,然后存入到SDRAM中,通过VGA驱动模块读取数据,然后进行RGB—YCbCr图像转换,最后通过VGA显示。具体RTL视图如下所示。
RGB—YCbCr图像转换原理
RGB—YCbCr图像转换公式如下所示。
Y = 0.299R +0.587G + 0.114BCb = 0.568(B-Y) + 128 = -0.172R-0.339G + 0.511B + 128CR = 0.713(R-Y) + 128 = 0.511R-0.428G -0.083B + 128
因为FPGA不能进行浮点数运算所以将上式中带有小数部分扩大256倍然后再右移8bit,如下式所示
Y = (77 *R + 150*G + 29 *B)>>8Cb = (-43*R - 85 *G + 128*B)>>8 + 128Cr = (128*R - 107*G - 21 *B)>>8 + 128
为防止负数出现把128加入到括号内,如下式所示。
Y = (77 *R + 150*G + 29 *B )>>8Cb = (-43*R - 85 *G + 128*B + 32768)>>8Cr = (128*R - 107*G - 21 *B + 32768)>>8
具体步骤
步骤(1)
因为RGB—YCbCr图像转换过程中数据都是以8bit位宽进行的,所以现将RGB565数据转换成RGB888格式数据,代码如下所示。
//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)
进行公式中的全部相乘操作代码如下所示
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 * 8'd128;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 * 8'd128;rgb_b_m2 <= rgb888_b * 8'd21 ;end
end
步骤(3)
进行公示中的全部相加操作代码如下所示
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
步骤(4)
进行公示中的移位操作代码如下所示
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 >> 8;img_cb1 <= img_cb0 >> 8;img_cr1 <= img_cr0 >> 8;end
end
步骤(5)
打三拍进行行场同步代码如下所示
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
endassign 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] ;
将Y分量高5位、高6位、高5位数据作为VGA显示的红、绿、蓝三通道输入数据代码如下所示
assign vga_rgb = {img_y_w[7:3],img_y_w[7:2],img_y_w[7:3]} ;
最后通过VGA显示结果如下所示
原图
YCbCr格式图片
RGB---YCbCr图像转换------图像处理相关推荐
- MATLAB(完备)之图像.tif到真彩色图像、索引色图像、灰度图像、 真彩色图像RGB、YIQ图像、HSV图像、YCbCr图像转换代码
I=imread('flower.tif');%读入图片 whos I imfinfo('flower.tif') imshow(I);title('原始tif图像') %%真彩图像.转索图像.灰度图 ...
- ffmpeg 保存图片 将rgb数据_FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)...
FFMPEG中的swscale提供了视频原始数据(YUV420,YUV422,YUV444,RGB24...)之间的转换,分辨率变换等操作,使用起来十分方便,在这里记录一下它的用法. swscale主 ...
- 【性能优化】优化笔记之一:图像RGB与YUV转换优化
本文主要介绍如何优化您自己的CODE,实现软件的加速.我们一个图象模式识别的项目,需要将RGB格式的彩色图像先转换成黑白图像.图像转换的公式如下: Y = 0.299 * R + 0.587 * G ...
- 基于FPGA的RGB图像转 Ycbcr图像实现 gray图像
Ycbcr图像 这里不解释过多,引荐一片论文.参考<基于FPGA的一种色空间转换算法的设计与实现_丁博文>,这篇论文里面讲的很清楚,还有其他的概念和算法的展示. 这里我使用Y分量实现显示的 ...
- 图像处理(三)——中国传统工艺画风格的图像转换应用
中国传统工艺画风格的图像转换应用 1. 项目介绍 希望做一个应用,输入为普通RGB或HSI图像,输出为带有中国特色的蛋壳粘贴画.使用的技术有Matlab.superpixel算法等. ...
- C语言运行时变成灰色,C语言实现RGB图像转换成灰(Gray)度图像
以前实现RGB图像转换成灰度图像都是直接调用OpenCV的库函数RGB2GRAY(IplImage* src);最近老板让我们除了读入输出图像实时用OpenCV的函数,其余的最好都是自己写,所以我自己 ...
- RGB 与 (RGB转 YCbCr再转为 RGB)的图像
RGB 与 (RGB转 YCbCr再转为 RGB)的图像 不可逆,可以从 矩阵的逆运算看出来. 附上 matlab 代码: clc,clear; Source=imread('1.jpg');%读 ...
- [2021 CVPR] 可逆网络实现 RAW 和 RGB 图像转换:Invertible Image Signal Processing
Invertible Image Signal Processing [pdf] 目录 Abstract Introduction Traditional ISP Analysis Method Ab ...
- OpenCV的图像处理——iOS与OpenCV之间图像转换
前言 1.OpenCV有专门的iOS平台的包,可以真接下载导入工程,也可以用cmake把OpenCV源码编成.a文件,以静态库的形式导入工程. 2.我这里用的Xcode11,OpenCV用的是最4.2 ...
最新文章
- python的image读取的图片是什么类型的-opencv python 读取图像/显示图像/保存图像...
- 三维点集拟合:平面拟合、RANSAC、ICP算法
- HDU - 2444——The Accomodation of Students(判断二分图,二分图最大匹配)
- if分支语句(JS)
- js 如何在浏览器中获取当前位置的经纬度
- tornado autoreload 模式
- 用Python爬虫爬取“女神吧”上的照片。
- 关于“如何使用FFT计算天线阵列方向图”的学习资料总结
- 解决Python爬取百度页面出现中文乱码问题
- R语言入门——rep函数
- 13.包装类和字符串
- 点歌系统源码 android,安卓盒子点歌系统代码
- c语言-链表-贪吃蛇
- Linux中如何安装特定的gcc版本
- PHP导出Excel,亲测有用
- EOS测试链加入流程(代码版本与主网同步)
- Codeforces711C 【DP】
- node-sass安装失败的解决方法
- 《程序员十二时辰》,居然是这样的!内容过于真实 ...
- 一个拼图软件项目Demo
热门文章
- java gui怎么做游戏_Java中关于GUI实现贪吃蛇游戏的简单方法
- Oracle 存储过程,Hibernate 调用存储过程,JDBC调用存储过程,Oracle 动态SQL
- 机器学习算法-PageRank(排序)
- 计算机英语会话实用电脑英语,关于购买电脑的4人英语对话范文
- 计算机网络实验室申请报告,实验室经费申请书范文
- 浅谈:企业IT信息化的两个阶段
- (B站云e办)SpringBoot开发项目实战记录(七)(员工管理(分页知识))
- a8 内存 华硕k550d_华硕k550d价格以及相关介绍【图解】
- 愁没项目?来看看这些人是怎么赚钱的
- php fopen 路径拼接,PHP 拼凑 URL 的问题!