Ycbcr图像

这里不解释过多,引荐一片论文。参考《基于FPGA的一种色空间转换算法的设计与实现_丁博文》,这篇论文里面讲的很清楚,还有其他的概念和算法的展示。

这里我使用Y分量实现显示的效果。可以自己对比与灰度转换的效果。主要前面都有,这里就是就是没有什么问题,可以很简单的实现功能。初始化的时候可以直接给一张图片,这样仿真可以看出一个大致的结果了。

算法见代码,代码中这里只展示计算模块。使用时我将模块的其他两个变量注释掉了。但是这里我将其他计算没有注释,为了仿真效果。

代码展示

`timescale 1ns / 1ps
module ram_control(//system singnalsinput                   sclk            ,input                  s_rst_n         ,//communicate with  VGA_moduleinput                    vga_clk         ,input                  ram_rd_en       ,output          [7:0]      pixel_data      ,//communicate with uart_module input                   uart_flag       ,input      [15:0]      uart_data       );
localparam RD_ADDR_END = 150*150 - 1'b1       ;
//---------------------------计算模块---------------------------------------第一级流水线计算所有乘法;
wire    [15:0]      doutb               ;reg    [31:0]      Y_data_line_1r      ;//这里的数据长度一定要够!!!!
reg     [31:0]      Y_data_line_1g      ;//这里的数据长度一定要够!!!!
reg     [31:0]      Y_data_line_1b      ;//这里的数据长度一定要够!!!!always @ (posedge vga_clk or negedge s_rst_n)
beginif(!s_rst_n)beginY_data_line_1r <= 'd0;Y_data_line_1g <= 'd0;Y_data_line_1b <= 'd0;endelse beginY_data_line_1r <= {doutb[15:11],doutb[13:11]}   *   77      ;Y_data_line_1g <= {doutb[10:5 ],doutb[6:5]}        *   150     ;Y_data_line_1b <= {doutb[4:0  ],doutb[2:0]}        *   29      ;end
endreg  [31:0]      Cb_data_line_1r     ;//这里的数据长度一定要够!!!!
reg     [31:0]      Cb_data_line_1g     ;//这里的数据长度一定要够!!!!
reg     [31:0]      Cb_data_line_1b     ;//这里的数据长度一定要够!!!!always @ (posedge vga_clk or negedge s_rst_n)
beginif(!s_rst_n)beginCb_data_line_1r <= 'd0;Cb_data_line_1g <= 'd0;Cb_data_line_1b <= 'd0;endelse beginCb_data_line_1r <= {doutb[15:11],doutb[13:11]}   *   43      ;//-Cb_data_line_1g <= {doutb[10:5 ],doutb[6:5]}    *   85      ;//-Cb_data_line_1b <= {doutb[4:0  ],doutb[2:0]}    *   128     ;//+end
endreg  [31:0]      Cr_data_line_1r     ;//这里的数据长度一定要够!!!!
reg     [31:0]      Cr_data_line_1g     ;//这里的数据长度一定要够!!!!
reg     [31:0]      Cr_data_line_1b     ;//这里的数据长度一定要够!!!!always @ (posedge vga_clk or negedge s_rst_n)
beginif(!s_rst_n)beginCr_data_line_1r <= 'd0;Cr_data_line_1g <= 'd0;Cr_data_line_1b <= 'd0;endelse beginCr_data_line_1r <= {doutb[15:11],doutb[13:11]}   *   128     ;//+Cr_data_line_1g <= {doutb[10:5 ],doutb[6:5]}   *   107     ;//-Cr_data_line_1b <= {doutb[4:0  ],doutb[2:0]}    *   21      ;//-end
end
//---------------------------计算模块---------------------------------------第二级流水线计算所有加法,把正的和负的分开进行加法;
reg [31:0] Y_data_r;
always @ (posedge vga_clk or negedge s_rst_n)
beginif(!s_rst_n)Y_data_r <= 'd0;else Y_data_r <= ((Y_data_line_1r + Y_data_line_1g + Y_data_line_1b) >> 8);
end
assign pixel_data = ( (Y_data_r >= 'd255) ? 'd255 : Y_data_r[7:0] );
reg [31:0] Cb_data_r_minus              ;
reg [31:0] Cb_data_r_positive           ;
always @ (posedge vga_clk or negedge s_rst_n)
beginif(!s_rst_n)beginCb_data_r_minus       <=  'd0        ;Cb_data_r_positive     <=  'd0        ;endelse beginCb_data_r_minus <= ((Cb_data_line_1r + Cb_data_line_1g) >> 8);//-Cb_data_r_positive <= (Cb_data_line_1b >> 8)            ;//+end
end
reg [31:0] Cr_data_r_minus              ;
reg [31:0] Cr_data_r_positive           ;
always @ (posedge vga_clk or negedge s_rst_n)
beginif(!s_rst_n)beginCr_data_r_minus       <=  'd0        ;Cr_data_r_positive     <=  'd0        ;endelse beginCr_data_r_minus <= ((Cr_data_line_1b + Cr_data_line_1g) >> 8);//-Cr_data_r_positive <= (Cr_data_line_1r >> 8)            ;//+end
end
// ---------------------------计算模块---------------------------------------第三级流水线计算最终的和,若为负数取 0wire sign_cb;
wire sign_cr;
assign sign_cb = (Cb_data_r_positive + 'd128 >= (Cb_data_r_minus));
assign sign_cr = (Cr_data_r_positive + 'd128 >= (Cr_data_r_minus));
reg [15:0] Cb_data_r;
reg [15:0] Cr_data_r;
always @ (posedge vga_clk or negedge s_rst_n)
beginif(!s_rst_n)beginCb_data_r <= 'd0;Cr_data_r <= 'd0;endelse beginCb_data_r <= sign_cb ? (Cb_data_r_positive - Cb_data_r_minus + 'd128) : 18'd0;Cr_data_r <= sign_cr ? (Cr_data_r_positive - Cr_data_r_minus + 'd128) : 18'd0;end
end
wire  [7:0] Cb_data;
wire  [7:0] Cr_data;
assign Cb_data = (Cb_data_r >= 'd255) ? 'd255 : Cb_data_r[7:0];
assign Cr_data = (Cr_data_r >= 'd255) ? 'd255 : Cr_data_r[7:0];
//-----------------------------地址控制模块-------------------------------------
reg     [14:0]      addwr   ;
reg     [14:0]      addrd   ;
always @ (posedge sclk or negedge s_rst_n)
beginif(!s_rst_n)addwr <= 'd0;else if(addwr == RD_ADDR_END && uart_flag)addwr <= 'd0;else if(uart_flag)addwr <= addwr + 1'b1;else addwr <= addwr;
end
always @ (posedge vga_clk or negedge s_rst_n)
beginif(!s_rst_n)addrd <= 'd0;else if(addrd == RD_ADDR_END && ram_rd_en)addrd <= 'd0;else if(ram_rd_en)addrd <= addrd + 1'b1;else addrd <= addrd;
end
ram_150_16 ram_contr (.clka(sclk), // input clka.wea(uart_flag), // input [0 : 0] wea.addra(addwr), // input [14 : 0] addra.dina(uart_data), // input [15 : 0] dina.clkb(vga_clk), // input clkb.addrb(addrd), // input [14 : 0] addrb.doutb(doutb) // output [15 : 0] doutb
);
endmodule

这里我初始化数据,这里面有数据。仿真截图如下

基于FPGA的RGB图像转 Ycbcr图像实现 gray图像相关推荐

  1. rgb转yuv422 matlab,基于FPGA的RGB到YUV422的数字视频转换.pdf

    基于FPGA的RGB到YUV422的数字视频转换.pdf Parts & applications 文章编号: ( ) 1002-8692 2009 S2-0105-02 实用技术 基于FPG ...

  2. 基于FPGA的嵌入式图像处理笔记——图像增强的特例(图像反转)

    文章目录 点操作 对比度与亮度调节 通过加减一个常量来调整亮度. 通过改变映射函数的斜率来调整对比度. 反转图像 非线性映射 灰度图反转与彩色图反转 灰度图反转 彩色图反转 点操作 首先介绍单幅图像上 ...

  3. 【FPGA教程案例48】图像案例8——基于FPGA的RGB图像转化为HSV图像的实现,通过MATLAB进行辅助验证

    FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...

  4. 基于FPGA的实时图像边缘检测系统设计(上)

    今天给大侠带来基于FPGA的实时图像边缘检测系统设计,由于篇幅较长,分三篇.今天带来第一篇,上篇,话不多说,上货. 导读 随着科学技术的高速发展,FPGA在系统结构上为数字图像处理带来了新的契机.图像 ...

  5. Matlab与FPGA图像处理系列——基于FPGA的实时边缘检测系统设计,sobel边缘检测流水线实现

    注:下载链接的资源是图片存 ROM 后读取进行 Sobel 检测显示在 VGA上,可供参考. 摘要:本文设计了一种基于 FPGA 的实时边缘检测系统,使用OV5640 摄像头模块获取实时的视频图像数据 ...

  6. 基于FPGA的图像浮雕效果实现

    基于FPGA的图像浮雕效果实现 项目简述 算法原理及MATLAB实现 浮雕效果的FPGA实现 FPGA工程代码 下板效果 参考文献 总结 项目简述 为什么要做这个小项目,因为最近正在在学习FPGA开源 ...

  7. FPGA 实现 RGB 图像转 Gray

    项目需求 这个实验主要是实现了图像灰度的转换,将原来的RGB565通过串口发送到FPGA开发板,然后通过算法转换实现数据的处理. 方案思路 首先通过串口发送图片数据到FPGA开发板,写入RAM中,最后 ...

  8. halcon旋转后坐标_基于FPGA的图像旋转设计

    该项目是参加2019届全国大学生FPGA大赛的作品,系统主要实现视频任意角度旋转.利用国产的紫光同创公司的FPGA芯片作为开发平台,视频图像从摄像头实时采集,经过算法旋转后,通过hdmi接口显示.该项 ...

  9. ML之Hog_HammingDistance:基于Hog特征提取“RGB”图像的768个值的单向vector利用汉明距离算法进行判别

    ML之Hog_HammingDistance:基于Hog特征提取"RGB"图像的768个值的单向vector利用汉明距离算法进行判别 目录 输出结果 代码实现 相关文章 ML之相似 ...

最新文章

  1. Oracle左右全连接总结
  2. 满足 Google Play 目标 API 等级 (targetSdkLevel) 的要求
  3. ci mysql pdo_CI框架中pdo的使用方法
  4. Google BBR拥塞控制算法模型初探
  5. oracle 序列赋值变量,Oracle变量的定义、赋值及使用
  6. python交互式方式、代码文件方式_涨见识了,在终端执行 Python 代码的 6 种方式
  7. 图片缩放与目标值的规范
  8. java上传、下载、删除ftp文件
  9. 台式计算机读取不了移动硬盘,电脑识别不了硬盘的原因
  10. Java实现校园论坛系统
  11. [源码]VB6.0操作注册表
  12. winrar压缩软件弹出广告解决办法
  13. 甘特图首选解决方案-世界级甘特图控件(XGANTT) - XGantt甘特图中文官方网站
  14. 电脑看斗鱼html5卡,win10浏览器观看斗鱼卡怎么修复_win10浏览器打开斗鱼卡死如何解决...
  15. linux kvm切换器,PS2系列KVM切换器
  16. 周易六十四卦——同人卦
  17. 地图比例尺的计算(转)
  18. 企业级网络架构—云平台高可用网络的修炼之道
  19. ecshop ajax无刷新登陆
  20. css路径自动加上了路径_CSS和关键路径

热门文章

  1. 【VUE】vue在vue-cli3环境下基于axios解决跨域问题
  2. mint-ui Infinite scroll 重复加载、加载无效的原因及解决方案
  3. 解决Eclipse无法添加Tomcat服务器的问题
  4. 解决新电脑的系统安装问题:针对BIOS的UEFI模式
  5. 如何在GitHub上搜索提交消息?
  6. “else if”是否比“switch()case”更快? [重复]
  7. 评论.gitignore?
  8. 在Python中模拟do-while循环?
  9. glassfish 是oracle的,GlassFish“百天”小版本 彰显Oracle的大功力
  10. 使用windows 10 安装中文版语言