1. 程式人生 > >【影象處理】FPGA verilog實現16位RGB的影象的灰度轉換

【影象處理】FPGA verilog實現16位RGB的影象的灰度轉換

專案:FPGA verilog實現16位RGB的影象的轉換為8位寬的灰度圖。

專案需要的模組:呼叫一個RAM,16*22500,灰度處理模組和VGA800X600模組。

         本次用到的FPGA是spartan6  X16。因為資源少,所以先嚐試的做點簡單的影象處理。由於RGB為16位寬的,red,5位寬,green,6位寬,blue,5位寬,故首先將彩色圖片用matlab轉換為16位的資料,生成coe檔案。

下面是將彩色圖片用matlab轉換為coe檔案的程式,是將24位的圖片資訊轉換為16位寬的coe檔案。

clc;
clear all ;
RGB = imread('Lena.png') ;
R =RGB ( : ,: ,1) ;
G =RGB ( : ,: ,2) ;
B =RGB ( : ,: ,3) ;
outdata = zeros(1,150*150) ;
outdata1 = zeros(1,150*150) ;
for i = 1:150 
	for j = 1: 150 
        outdata((i-1)*150+j) = bitand(R(i,j),248)+ bitshift(bitand(G(i,j),224),-5);
        outdata1((i-1)*150+j) = bitand(G(i,j),224)+ bitshift(bitand(G(i,j),248),-3);
        end
end


fid = fopen('Lena.coe','w+');

 fprintf(fid,'memory_initialization_radix=16;\nmemory_initialization_vector=\n');

for k = 1:150*150
      fprintf(fid,'%02x%02x,\n',outdata(k),outdata1(k));
end

fclose(fid);

會生成一個coe檔案,將coe檔案新增到ram當中就可以了。

下面是總框架,一個top圖。

最後的到處理過後的灰度圖顯示在VGA顯示屏上。150*150大小的。

由於程式有點多,我就不一一介紹了,有興趣的同學可以下載一下,只供參考。

本文為原創部落格,未經允許請勿轉載商用,感謝!若轉載學習請標明地址: