九江论坛网

标题: 求助,用verilog实现RGB565轉灰度圖 [打印本页]

作者: 若放弃    时间: 2020-4-8 19:41:04     标题: 求助,用verilog实现RGB565轉灰度圖

    文章简介:设计思路:把RGB图像的R、G、B三个分量提取出来,并分别取高5位、高6我觉得这个思路是没问题的,而且网上发布的代码(从RGB888转灰度图)输RGB565转灰度图,Gray=R*0.299+G*0.587+B*0.



要用verilog代码实现RGB565图像转换为灰度图。

     设計思路:把RGB图像的R、G、B三个分量提取出来,并分别取高5位、高6位、高5位,即将RGB888转为RGB565,生成三个coe文件,再存放到三个ram中去。转换时从三个ram中调用数据,按照Gray = R*0.299 + G*0.587 + B*0.114 进行运算,得到结果。
     我覺得这个思路是没问题的,而且网上发布的代码(从RGB888轉灰度图)输出的结果是正确的。我只是修改了一下代码中RGB的位数(部分代码附后)但是输出结果很奇怪,出现了交叠,如下所示。


希望有大神能解答一下我的两点疑惑,由衷感谢。
1、

图像出现混叠的原因和算法有关吗?

2、

RGB565转灰度图,Gray = R*0.299 + G*0.587 + B*0.114这个算法仍然适用吗?(这个算法是参考matlab中的RGB转灰度图的算法)
如果不适用要怎么改呢?

部分代码如下:


   

         

            
always @ ( posedge CLK or negedge RSTn )

  if ( !RSTn ) begin

    i <= 3'd0;

    gray <= 24'd0;

     isDone <= 1'b0;

  end

  else if ( get_pix_vld )

    case ( i )

       0: begin

            gray <= 19595 * red + 38469 * green + 7472 * blue;

          i <= i + 1'b1;

            end

        1: begin isDone <= 1'b1; i <= i + 1'b1; end

        2: begin isDone <= 1'b0; i <= 3'd0; end

    endcase

     

assign oGray = ( gray >> 16 ) ;

assign oDone = isDone ;

   
        

   

    复制代码











欢迎光临 九江论坛网 (http://www.ganzw.com/) Powered by Discuz! X2