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中的一样,实战完成。

  • 相关阅读:
    WebSocket客户端连接不上和掉线的问题以及解决方案
    中国(China): 上海地图和经维度
    在程序开发中怎样写SQL语句可以提高数据库的性能
    C# 正则表达式
    asp.net mvc 2.0 【1】
    c#获取相对路径的八种方法
    ASP.NET 常用对象
    Python自动化开发基础和数据类型
    Python自动化开发数据类型之集合
    Python自动化开发数据类型之字符串
  • 原文地址:https://www.cnblogs.com/FPGAer/p/13934167.html
Copyright © 2011-2022 走看看