fpga图片灰度处理

 

vga显示静态图品主要分为两个部分,一个是驱动vga,另一部分控制vga显示。

vga驱动部分之前写过,直接例化过来用即可。

另一个是vga显示,从网上找了一个200*200的lena图品,然后用BMP2Mif软件

将图片转换成mif文件,24*40000,24代表rgb三原色,4000代表像素,在200*200

的区域内,一共有40000个像素点,然后把mif文件存进rom里,vga显示出来即可。

/*-----------------------------------------------------------------------

Date                :        2017-XX-XX
Description            :        Design for .

-----------------------------------------------------------------------*/


module vga_control
(
    //global clock
    input                    clk,            //system clock
    input                    rst_n,             //sync reset
    
    //vga interface
    input            [10:0]    value_x,
    input            [10:0]    value_y,
    output            [23:0]    rgb,

    //rom interface

    output    reg        [15:0]    rom_addr,        //
    input            [23:0]    rom_q
); 


//--------------------------------
//Funtion :    display_区域           

wire        display_addr;
assign        display_addr    =    ((value_x >= 8'd100 && value_x < 9'd300) && (value_y >= 8'd100 && value_y < 9'd300)) ? 1'b1 : 1'b0;



//--------------------------------
//Funtion :    rgb

assign        rgb                =    (display_addr == 1'b1) ? rom_q : 1'd0; 

//--------------------------------
//Funtion :    rom_addr

wire        [10:0]        display_x;
wire        [10:0]        display_y;

assign            display_x        =    value_x - 8'd100;
assign            display_y        =    value_y    - 8'd100;


always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        rom_addr <= 1'd0;
    else if(display_addr)
        rom_addr <= display_x  +  display_y*200;
    else
        rom_addr <= 1'd0;
end


endmodule
    

 

将图品进行灰度处理,把图片进行灰度化我搜了一下,一是可以加快运算速度,第二点色彩对于计算本身并没有作用,所以把它舍弃。

彩色转灰度公式 : gray = RX0.299 + GX0.587 + BX0.114;

fpga里面的寄存器都是整数,所以需要对数据进行放大,可能思维固化了吧,第一反应是这样的

因为都是三位小数,我会乘上1000然后除1000,但是除法速度明显不如移位,其实可以这样

把每位都乘上2^16,然后右移16位即可

//--------------------------------
//Funtion :    rgb

//assign        rgb                =    (display_addr == 1'b1) ? rom_q : 1'd0; 
assign        rgb                =    (display_addr == 1'b1) ? {3{gray}} : 1'd0; 


//--------------------------------
//Funtion :    转灰度处理
wire        [7:0]        gray;

assign        gray = (rom_q[23:16]*19595 + rom_q[15:8]*38469 + rom_q[7:0]*7472) >> 16;

这样一看,灰度化其实也挺简单的,没有那么神秘

转载于:https://www.cnblogs.com/bixiaopengblog/p/7462961.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA图像处理中的灰度化是指将彩色图像转换为灰度图像的处理过程。在FPGA的实现中,可以使用Verilog语言来实现彩色图像的灰度化算法,并通过Modelsim进行仿真验证。灰度化的算法通常是基于RGB通道的像素值,按照一定的公式进行转换。其中常用的公式为:GRAY = 0.299R + 0.587G + 0.114B。由于FPGA不方便进行小数运算,可以将公式中的系数放大256倍进行运算,然后右移8位,即GRAY = (77R + 150G + 29B) >> 8。这样可以实现将彩色图像的每个像素点转换为对应的灰度值。为了解决时序问题,可以对该公式进行流水线处理,分为三个阶段:乘法、加法和移位。通过这样的流水线处理,可以实现灰度化的算法在FPGA上的高效实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于 FPGA 的彩色图像灰度化的设计实现](https://blog.csdn.net/wd12306/article/details/130711477)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [FPGA图像处理-灰度化](https://blog.csdn.net/lzl1342848782/article/details/125048818)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [基于FPGA图像处理灰度图像变换](https://download.csdn.net/download/qq_40261818/10611461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值