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

  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/FPGAer/p/13934167.html
Copyright © 2011-2022 走看看