zoukankan      html  css  js  c++  java
  • 4基于fpga的彩色图像灰度化(ROM)

    学习文章:https://www.cnblogs.com/xianyufpga/p/12407716.html

    实战功能:通过fpga将RGB图像转换成Gray灰度图像。

    RGB分量转灰度的原理:彩色图像是由RGB三基色构成的,根据三个分量的数值不同而显示不一样的彩色。RGB565格式的像素排列为R[15:11]、G[10:5]、B[4:0],因此这里利用保存其中一个分量的数值,其他两个分量被这个分量填补即可实现彩色图像灰度化。

    这里的图片是RGB565格式:用两个字节,即16位来描述一个像素。5+6+5。


     在Matlab上实现,用于检验fpga实现的正确性:

    Matlab代码:

    clc;
    clear all;
    RGB = imread('G:shizhan4 gray_imagedocimage.jpg'); %读取图像
    
    R_gray = RGB(:,:,1);        %提取R分量后的灰度图
    G_gray = RGB(:,:,2);        %提取G分量后的灰度图
    B_gray = RGB(:,:,3);        %提取B分量后的灰度图
    
    subplot(2,2,1);imshow(RGB);   title('原图');
    subplot(2,2,2);imshow(R_gray);title('R分量灰度图');
    subplot(2,2,3);imshow(G_gray);title('G分量灰度图');
    subplot(2,2,4);imshow(B_gray);title('B分量灰度图');

    实现结果:


     fpga实现中通过按键,切换原图和三个不同提取分量的图片。

    彩色转灰度的关键代码:

    module RGB_Gray(
    input clk_33M,
    input sys_rst_n,
    input [15:0]image,
    input [2:0]key_cnt,  
    output reg[15:0]data
    );
    
    always @(posedge clk_33M or negedge sys_rst_n)begin
    if(!sys_rst_n)
    data<=16'd0;
    else begin
    case(key_cnt)
    3'd0:data<=image;
    3'd1:data <= {image[15:11],image[15:11],1'b0,image[15:11]};
    3'd2:data <= {image[10:6],image[10:5],image[10:6]};
    3'd3:data <= {image[4:0],image[4:0],1'b0,image[4:0]};
    endcase
    end
    end
    
    endmodule

    显示在TFT中的图片结果与Matlab中的一样,实战完成。

  • 相关阅读:
    webpack进阶(二)
    webpack的loader和plugin的区别
    接口和面向接口编程
    设计原则与编程技巧汇总
    W3C的盒子模型和IE的盒子模型
    React的组件
    React的路由react-router
    三种编程命名规则:驼峰命名法,帕斯卡命名法,匈牙利命名法
    gulp 构建 demo
    antd 表单的两种校验方式
  • 原文地址:https://www.cnblogs.com/FPGAer/p/13934167.html
Copyright © 2011-2022 走看看