问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 69 人浏览分享

开启左侧

FPGA图像处理-图像Gamma伽马变换

[复制链接]
69 0
安路-FPGA课程
安路课程: 图像算法 » 图像新手入门实验
安路系列: EG4
本帖最后由 UT发布 于 2025-3-31 17:02 编辑

软件版本:Anlogic -TD5.6.1-64bit
操作系统:WIN10 64bit
硬件平台:适用安路(Anlogic)FPGA
登录米联客”FPGA社区-www.uisrc.com视频课程、答疑解惑!
1概述

本文简述了图像Gamma伽马变换的算法,讲解如何进行Verilog的算法实现,并进行上板实验。

2算法原理简介

伽马变换主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。变换公式就是对原图像上每一个像素值做乘积运算:

g=c*r^y

其中c为常数系数,r为图像像素值,取值范围0~255为伽马变换因子,值以1为分界,值越小,对图像低灰度部分的扩展作用就越强,值越大,对图像高灰度部分的扩展作用就越强,通过不同的值,就可以达到增强低灰度或高灰度部分细节的作用。伽马变换对于图像对比度偏低,并且整体亮度值偏高(对于于相机过曝)情况下的图像增强效果明显。

伽马变换对图像的修正作用其实就是通过增强低灰度或高灰度的细节实现的,从伽马曲线可以直观理解:

image.jpg
3算法仿真
3.1Matlab算法仿真
3.1.1Matlab算法代码分析

源代码如下:

  1. clear;clear all;clc;
  2. image_in = imread('lena_1280x720.jpg');
  3. [row,col,n] = size(image_in);
  4. image_out =imadjust(image_in,[],[],0.75);
  5. image_out1=imadjust(image_in,[],[],1.5);
  6. figure
  7. subplot(131);
  8. imshow(image_in), title('the original image');
  9. subplot(132);
  10. imshow(image_out), title('the translated image ');
  11. subplot(133);
  12. imshow(image_out1), title('the translated image 1');
复制代码

使用matlab生成伽马变换后系数的代码如下:

  1. clear;clear all;clc;
  2. num = 256;
  3. r = [0:1:255];
  4. c =16;
  5. g = c*sqrt(r);
  6.   
  7. %=================================================================
  8. fid = fopen('gamma_sqrt_para_256.coe','w');
  9. fprintf(fid,'memory_initialization_radix = 10;\n');
  10. fprintf(fid,'memory_initialization_vector =\n');
  11. for n = 1:num
  12.         gamma(n) = round(g(n));
  13. end
  14. for n = 1: num - 1
  15.     fprintf(fid,'%d, \n',gamma(n));
  16. end
  17. fprintf(fid,'%d;',gamma(256));
  18. fclose(fid);
  19. %=================================================================
  20. fid1 = fopen('../src/image_rom_gamma_sqrt_para.v','w');
  21. fprintf(fid1,'module image_rom_gamma_sqrt_para\n');
  22. fprintf(fid1,'(\n');
  23. fprintf(fid1,'        input                    clka,\n');
  24. fprintf(fid1,'        input                [7:0]        addra,\n');
  25. fprintf(fid1,'        input                                ena,\n');
  26. fprintf(fid1,'        output                [7:0]        douta\n');
  27. fprintf(fid1,');\n');
  28. fprintf(fid1,'reg [7:0] DATA;\n');
  29. fprintf(fid1,'assign        douta = DATA;\n');
  30. fprintf(fid1,'always@(*)\n');
  31. fprintf(fid1,'begin\n');
  32. fprintf(fid1,'        case(addra)\n');
  33. for n = 1:num
  34.         gamma(n) = round(g(n));
  35. end
  36. for n = 1: num
  37.     fprintf(fid1,'%d : DATA <= %d; \n',n-1,gamma(n));
  38. end
  39. fprintf(fid1,'         default:   DATA<= 0;\n');
  40. fprintf(fid1,'        endcase\n');
  41. fprintf(fid1,'end\n');
  42. fprintf(fid1,'endmodule\n');
  43. fclose(fid1);
  44. %=================================================================
  45. g1 = (r.^2)/255;
  46. %=================================================================
  47. fid = fopen('gamma_square_para_256.coe','w');
  48. fprintf(fid,'memory_initialization_radix = 10;\n');
  49. fprintf(fid,'memory_initialization_vector =\n');
  50. for n = 1:num
  51.         gamma(n) = round(g1(n));
  52. end
  53. for n = 1: num - 1
  54.     fprintf(fid,'%d, \n',gamma(n));
  55. end
  56. fprintf(fid,'%d;',gamma(256));
  57. fclose(fid);
  58. %=================================================================
  59. fid1 = fopen('../src/image_rom_gamma_square_para.v','w');
  60. fprintf(fid1,'module image_rom_gamma_square_para\n');
  61. fprintf(fid1,'(\n');
  62. fprintf(fid1,'        input                    clka,\n');
  63. fprintf(fid1,'        input                [7:0]        addra,\n');
  64. fprintf(fid1,'        input                                ena,\n');
  65. fprintf(fid1,'        output                [7:0]        douta\n');
  66. fprintf(fid1,');\n');
  67. fprintf(fid1,'reg [7:0] DATA;\n');
  68. fprintf(fid1,'assign        douta = DATA;\n');
  69. fprintf(fid1,'always@(*)\n');
  70. fprintf(fid1,'begin\n');
  71. fprintf(fid1,'        case(addra)\n');
  72. for n = 1:num
  73.         gamma(n) = round(g1(n));
  74. end
  75. for n = 1: num
  76.     fprintf(fid1,'%d : DATA <= %d; \n',n-1,gamma(n));
  77. end
  78. fprintf(fid1,'         default:   DATA<= 0;\n');
  79. fprintf(fid1,'        endcase\n');
  80. fprintf(fid1,'end\n');
  81. fprintf(fid1,'endmodule\n');
  82. fclose(fid1);
  83. %================================================================
  84. hold on
  85. plot(r);
  86. plot(g);
  87. plot(g1);
  88. legend('f','gamma g','gamma g1');
  89. hold off
复制代码
3.1.2Matlab实验结果
image.jpg
3.2
Verilog算法仿真

3.2.1Modelsim仿真
3.2.1.1仿真执行

在件夹Algorithm_simulation下进行算法的仿真,分为simsrctb三个子文件夹。在sim文件夹下有win系统的快捷执行文件sim.bat,可以一键进行仿真,src文件下放的是Verilog的核心图像算法及其顶层与输入图像激励,tb文件下放的是测试激励文件及输出图像的保存。

双击执行sim文件夹下sim.bat,自动打开Modelsim仿真,自动添加仿真波形,执行完成后自动保存图像,仿真波形如图所示:

image.jpg

图像数据通过摄像头采集进来,先缓存在fifo中,然后通过写状态机,将图像数据送进DDR进行缓存,缓存后的图像数据从DDR中取出,通过读状态机送出到fifo中,然后算法处理模块在fifo中取出数据,完成数据处理后送到LCD进行显示输出。

3.2.1.2仿真关键部分代码解析

Sim.do执行仿真代码,文件内容如下:

  1. #
  2. # Create work library
  3. #
  4. vlib work
  5. #
  6. # Compile sources
  7. #
  8. vlog "../src/*.v"
  9. vlog "../tb/*.v"
  10. #
  11. # Call vsim to invoke simulator
  12. #
  13. vsim -voptargs=+acc work.top_tb
  14. #
  15. # Add waves
  16. #
  17. do wave.do
  18. #
  19. # Run simulation
  20. #
  21. run -all
  22. #
  23. # End
  24.    
复制代码

图像输入代码部分:

  1. reg                 en;
  2. reg [12:0]         h_syn_cnt = 'd0;
  3. reg [12:0]         v_syn_cnt = 'd0;
  4. reg [23:0]         image [0 : H_ACTIVE*V_ACTIVE-1];
  5. reg [31:0]         image_cnt = 'd0;
  6. //读取txt文件到image数组中
  7. initial begin
  8.         $readmemh("../../matlab_src/image_720_1280_3.txt", image);
  9. end
  10. // 行扫描计数器
  11. always@(posedge i_clk)
  12. begin
  13.         if(h_syn_cnt == H_TOTAL_TIME-1)
  14.         h_syn_cnt <= 0;
  15.     else
  16.         h_syn_cnt <= h_syn_cnt + 1;
  17. end
  18. // 列扫描计数器
  19. always@(posedge i_clk)
  20. begin
  21.         if(h_syn_cnt == H_TOTAL_TIME-1)
  22.         begin
  23.         if(v_syn_cnt == V_TOTAL_TIME-1)
  24.             v_syn_cnt <= 0;
  25.         else
  26.             v_syn_cnt <= v_syn_cnt + 1;
  27.         end
  28. end
  29. // 行同步控制
  30. always@(posedge i_clk)
  31. begin
  32.     if(h_syn_cnt < H_SYNC_TIME)
  33.         o_hsyn <= 0;
  34.     else
  35.         o_hsyn <= 1;
  36. end
  37. // 场同步控制
  38. always@(posedge i_clk)
  39. begin
  40.     if(v_syn_cnt < V_SYNC_TIME)
  41.         o_vsyn <= 0;
  42.     else
  43.         o_vsyn <= 1;
  44. end
  45. // 坐标使能.
  46. always@(posedge i_clk)
  47. begin
  48.     if(v_syn_cnt >= V_SYNC_TIME + V_BACK_PORCH && v_syn_cnt < V_SYNC_TIME + V_BACK_PORCH + V_ACTIVE)
  49.     begin
  50.         if(h_syn_cnt >= H_SYNC_TIME + H_BACK_PORCH && h_syn_cnt < H_SYNC_TIME + H_BACK_PORCH + H_ACTIVE)
  51.             en <= 1;
  52.         else
  53.             en <= 0;
  54.     end
  55.     else
  56.         en <= 0;
  57. end
  58. always@(posedge i_clk)
  59. begin
  60.     if(en)
  61.         begin
  62.                 o_r                 <= image[image_cnt][23:16];
  63.                 o_g                 <= image[image_cnt][15:8];
  64.                 o_b                 <= image[image_cnt][7:0];
  65.             image_cnt         <= image_cnt + 1;
  66.         end
  67.         else if(image_cnt == H_ACTIVE*V_ACTIVE)
  68.         begin
  69.                 o_r                 <= 8'h00;
  70.                 o_g                 <= 8'h00;
  71.                 o_b                 <= 8'h00;
  72.             image_cnt         <= 'd0;
  73.         end        
  74.     else
  75.         begin
  76.                 o_r                 <= 8'h00;
  77.                 o_g                 <= 8'h00;
  78.                 o_b                 <= 8'h00;
  79.             image_cnt         <= image_cnt;
  80.         end        
  81. end
  82. always@(posedge i_clk)
  83. begin
  84.         o_en <= en;
  85. end
复制代码

图形输出保存代码部分:

  1. reg             clk;
  2. reg             rst_n;
  3. integer                 image_txt;
  4. reg [31:0]                 pixel_cnt;
  5. wire[23:0]          data;
  6. wire            de;
  7. top u_top
  8. (
  9.     .i_clk                              (clk                ),
  10.     .i_rst_n                      (rst_n              ),
  11.     .o_gray_data             (data               ),
  12.     .o_gray_de               (de                 )
  13. );
  14. always #(1) clk = ~clk;
  15. initial
  16. begin
  17.         clk   = 1;
  18.     rst_n = 0;         
  19.         #100
  20.     rst_n = 1;
  21.         
  22. end
  23. initial
  24. begin
  25.     image_txt = $fopen("../matlab_src/image_720_1280_3_out.txt");
  26. end
  27. always@(posedge clk or negedge rst_n)
  28. begin
  29.     if(!rst_n)
  30.         begin
  31.         pixel_cnt <= 0;
  32.     end
  33.     else if(de)
  34.         begin
  35.         pixel_cnt = pixel_cnt + 1;
  36.         $fwrite(image_txt,"%h\n",data);
  37.     end
  38. end
  39. always@(posedge clk )
  40. begin
  41.         if(pixel_cnt == 720*1280)
  42.         begin
  43.                 $display("*******************************************************************************");               
  44.                 $display("*** Success:image_720_1280_3_out.txt is output complete! %t", $realtime, "ps***");
  45.                 $display("*******************************************************************************");
  46.                         $fclose(image_txt);
  47.                 $stop;
  48.         end        
  49. end
  50. endmodule
复制代码
3.2.2Modelsim实验结果

matlab查看输入输出的图像代码部分:

  1. clear;clear all;clc;
  2. row = 720;  
  3. col = 1280;  
  4. n   = 3;   
  5. image_sim_pass = uint8(zeros(row,col,n));
  6. fid = fopen('image_720_1280_3_out.txt','r');
  7. for x = 1:row
  8.     for y = 1:col
  9.         RGB = fscanf(fid,'%s',1);
  10.         image_sim_pass(x,y,1) = uint8(hex2dec(RGB(1:2)));
  11.         image_sim_pass(x,y,2) = uint8(hex2dec(RGB(3:4)));
  12.         image_sim_pass(x,y,3) = uint8(hex2dec(RGB(5:6)));              
  13.     end
  14. end
  15. fclose(fid);
  16. image_1 = imread('lena_1280x720.jpg');
  17. subplot(121);
  18. imshow(image_1), title('The original image');
  19. subplot(122);
  20. imshow(image_sim_pass),title('After processing images');
  21. imwrite(image_sim_pass,'lena_1280x720_sim_pass.jpg');  
复制代码

4工程实现
4.1Verilog代码分析

参数声明

  1. parameter GAMMA_ALGORITHM = "GAMMA_SQRT";//"GAMMA_SQUARE"
  2. //同步输出使能信号
  3.         assign o_hs = i_hsyn;
  4.         assign o_vs = i_vsyn;
  5.         assign o_en = i_en;
  6.         参数选择综合
  7. generate        
  8.         if (GAMMA_ALGORITHM == "GAMMA_SQUARE")
  9.         begin
  10.                 image_rom_gamma_square_para u_i_r
  11.                 (
  12.                         .clka        (i_clk                ),
  13.                         .addra        (i_r                ),
  14.                         .ena        (1'b1                ),
  15.                         .douta        (o_r                )
  16.                 );
  17.                 image_rom_gamma_square_para u_i_g
  18.                 (
  19.                         .clka        (i_clk                ),
  20.                         .addra        (i_g                ),
  21.                         .ena        (1'b1                ),
  22.                         .douta        (o_g                )
  23.                 );
  24.                 image_rom_gamma_square_para u_i_b
  25.                 (
  26.                         .clka        (i_clk                ),
  27.                         .addra        (i_b                ),
  28.                         .ena        (1'b1                ),
  29.                         .douta        (o_b                )
  30.                 );        
  31.         end
  32.         else if(GAMMA_ALGORITHM == "GAMMA_SQRT")        
  33.         begin
  34.                 image_rom_gamma_sqrt_para u_i_r
  35.                 (
  36.                         .clka        (i_clk                ),
  37.                         .addra        (i_r                ),
  38.                         .ena        (1'b1                ),
  39.                         .douta        (o_r                )
  40.                 );
  41.                 image_rom_gamma_sqrt_para u_i_g
  42.                 (
  43.                         .clka        (i_clk                ),
  44.                         .addra        (i_b                ),
  45.                         .ena        (1'b1                ),
  46.                         .douta        (o_g                )
  47.                 );
  48.                 image_rom_gamma_sqrt_para u_i_b
  49.                 (
  50.                         .clka        (i_clk                ),
  51.                         .addra        (i_g                ),
  52.                         .ena        (1'b1                ),
  53.                         .douta        (o_b                )
  54.                 );
  55.         end
  56. endgenerate
  57. sqrt_para查表数据
  58. module image_rom_gamma_sqrt_para
  59. (
  60.         input                    clka,
  61.         input                [7:0]        addra,
  62.         input                                ena,
  63.         output                [7:0]        douta
  64. );
  65. reg [7:0] DATA;
  66. assign        douta = DATA;
  67. always@(*)
  68. begin
  69.         case(addra)
  70. 0 : DATA <= 0;
  71. 1 : DATA <= 16;
  72. 2 : DATA <= 23;
  73. 3 : DATA <= 28;
  74. 4 : DATA <= 32;
  75. 5 : DATA <= 36;
  76. 6 : DATA <= 39;
  77. 7 : DATA <= 42;
  78. 8 : DATA <= 45;
  79. 9 : DATA <= 48;
  80. 10 : DATA <= 51;
  81. 11 : DATA <= 53;
  82. 12 : DATA <= 55;
  83. 13 : DATA <= 58;
  84. 14 : DATA <= 60;
  85. 15 : DATA <= 62;
  86. 16 : DATA <= 64;
  87. 17 : DATA <= 66;
  88. 18 : DATA <= 68;
  89. 19 : DATA <= 70;
  90. 20 : DATA <= 72;
  91. 21 : DATA <= 73;
  92. 22 : DATA <= 75;
  93. 23 : DATA <= 77;
  94. 24 : DATA <= 78;
  95. 25 : DATA <= 80;
  96. 26 : DATA <= 82;
  97. 27 : DATA <= 83;
  98. 28 : DATA <= 85;
  99. 29 : DATA <= 86;
  100. 30 : DATA <= 88;
  101. 31 : DATA <= 89;
  102. 32 : DATA <= 91;
  103. 33 : DATA <= 92;
  104. 34 : DATA <= 93;
  105. 35 : DATA <= 95;
  106. 36 : DATA <= 96;
  107. 37 : DATA <= 97;
  108. 38 : DATA <= 99;
  109. 39 : DATA <= 100;
  110. 40 : DATA <= 101;
  111. 41 : DATA <= 102;
  112. 42 : DATA <= 104;
  113. 43 : DATA <= 105;
  114. 44 : DATA <= 106;
  115. 45 : DATA <= 107;
  116. 46 : DATA <= 109;
  117. 47 : DATA <= 110;
  118. 48 : DATA <= 111;
  119. 49 : DATA <= 112;
  120. 50 : DATA <= 113;
  121. 51 : DATA <= 114;
  122. 52 : DATA <= 115;
  123. 53 : DATA <= 116;
  124. 54 : DATA <= 118;
  125. 55 : DATA <= 119;
  126. 56 : DATA <= 120;
  127. 57 : DATA <= 121;
  128. 58 : DATA <= 122;
  129. 59 : DATA <= 123;
  130. 60 : DATA <= 124;
  131. 61 : DATA <= 125;
  132. 62 : DATA <= 126;
  133. 63 : DATA <= 127;
  134. 64 : DATA <= 128;
  135. 65 : DATA <= 129;
  136. 66 : DATA <= 130;
  137. 67 : DATA <= 131;
  138. 68 : DATA <= 132;
  139. 69 : DATA <= 133;
  140. 70 : DATA <= 134;
  141. 71 : DATA <= 135;
  142. 72 : DATA <= 136;
  143. 73 : DATA <= 137;
  144. 74 : DATA <= 138;
  145. 75 : DATA <= 139;
  146. 76 : DATA <= 139;
  147. 77 : DATA <= 140;
  148. 78 : DATA <= 141;
  149. 79 : DATA <= 142;
  150. 80 : DATA <= 143;
  151. 81 : DATA <= 144;
  152. 82 : DATA <= 145;
  153. 83 : DATA <= 146;
  154. 84 : DATA <= 147;
  155. 85 : DATA <= 148;
  156. 86 : DATA <= 148;
  157. 87 : DATA <= 149;
  158. 88 : DATA <= 150;
  159. 89 : DATA <= 151;
  160. 90 : DATA <= 152;
  161. 91 : DATA <= 153;
  162. 92 : DATA <= 153;
  163. 93 : DATA <= 154;
  164. 94 : DATA <= 155;
  165. 95 : DATA <= 156;
  166. 96 : DATA <= 157;
  167. 97 : DATA <= 158;
  168. 98 : DATA <= 158;
  169. 99 : DATA <= 159;
  170. 100 : DATA <= 160;
  171. 101 : DATA <= 161;
  172. 102 : DATA <= 162;
  173. 103 : DATA <= 162;
  174. 104 : DATA <= 163;
  175. 105 : DATA <= 164;
  176. 106 : DATA <= 165;
  177. 107 : DATA <= 166;
  178. 108 : DATA <= 166;
  179. 109 : DATA <= 167;
  180. 110 : DATA <= 168;
  181. 111 : DATA <= 169;
  182. 112 : DATA <= 169;
  183. 113 : DATA <= 170;
  184. 114 : DATA <= 171;
  185. 115 : DATA <= 172;
  186. 116 : DATA <= 172;
  187. 117 : DATA <= 173;
  188. 118 : DATA <= 174;
  189. 119 : DATA <= 175;
  190. 120 : DATA <= 175;
  191. 121 : DATA <= 176;
  192. 122 : DATA <= 177;
  193. 123 : DATA <= 177;
  194. 124 : DATA <= 178;
  195. 125 : DATA <= 179;
  196. 126 : DATA <= 180;
  197. 127 : DATA <= 180;
  198. 128 : DATA <= 181;
  199. 129 : DATA <= 182;
  200. 130 : DATA <= 182;
  201. 131 : DATA <= 183;
  202. 132 : DATA <= 184;
  203. 133 : DATA <= 185;
  204. 134 : DATA <= 185;
  205. 135 : DATA <= 186;
  206. 136 : DATA <= 187;
  207. 137 : DATA <= 187;
  208. 138 : DATA <= 188;
  209. 139 : DATA <= 189;
  210. 140 : DATA <= 189;
  211. 141 : DATA <= 190;
  212. 142 : DATA <= 191;
  213. 143 : DATA <= 191;
  214. 144 : DATA <= 192;
  215. 145 : DATA <= 193;
  216. 146 : DATA <= 193;
  217. 147 : DATA <= 194;
  218. 148 : DATA <= 195;
  219. 149 : DATA <= 195;
  220. 150 : DATA <= 196;
  221. 151 : DATA <= 197;
  222. 152 : DATA <= 197;
  223. 153 : DATA <= 198;
  224. 154 : DATA <= 199;
  225. 155 : DATA <= 199;
  226. 156 : DATA <= 200;
  227. 157 : DATA <= 200;
  228. 158 : DATA <= 201;
  229. 159 : DATA <= 202;
  230. 160 : DATA <= 202;
  231. 161 : DATA <= 203;
  232. 162 : DATA <= 204;
  233. 163 : DATA <= 204;
  234. 164 : DATA <= 205;
  235. 165 : DATA <= 206;
  236. 166 : DATA <= 206;
  237. 167 : DATA <= 207;
  238. 168 : DATA <= 207;
  239. 169 : DATA <= 208;
  240. 170 : DATA <= 209;
  241. 171 : DATA <= 209;
  242. 172 : DATA <= 210;
  243. 173 : DATA <= 210;
  244. 174 : DATA <= 211;
  245. 175 : DATA <= 212;
  246. 176 : DATA <= 212;
  247. 177 : DATA <= 213;
  248. 178 : DATA <= 213;
  249. 179 : DATA <= 214;
  250. 180 : DATA <= 215;
  251. 181 : DATA <= 215;
  252. 182 : DATA <= 216;
  253. 183 : DATA <= 216;
  254. 184 : DATA <= 217;
  255. 185 : DATA <= 218;
  256. 186 : DATA <= 218;
  257. 187 : DATA <= 219;
  258. 188 : DATA <= 219;
  259. 189 : DATA <= 220;
  260. 190 : DATA <= 221;
  261. 191 : DATA <= 221;
  262. 192 : DATA <= 222;
  263. 193 : DATA <= 222;
  264. 194 : DATA <= 223;
  265. 195 : DATA <= 223;
  266. 196 : DATA <= 224;
  267. 197 : DATA <= 225;
  268. 198 : DATA <= 225;
  269. 199 : DATA <= 226;
  270. 200 : DATA <= 226;
  271. 201 : DATA <= 227;
  272. 202 : DATA <= 227;
  273. 203 : DATA <= 228;
  274. 204 : DATA <= 229;
  275. 205 : DATA <= 229;
  276. 206 : DATA <= 230;
  277. 207 : DATA <= 230;
  278. 208 : DATA <= 231;
  279. 209 : DATA <= 231;
  280. 210 : DATA <= 232;
  281. 211 : DATA <= 232;
  282. 212 : DATA <= 233;
  283. 213 : DATA <= 234;
  284. 214 : DATA <= 234;
  285. 215 : DATA <= 235;
  286. 216 : DATA <= 235;
  287. 217 : DATA <= 236;
  288. 218 : DATA <= 236;
  289. 219 : DATA <= 237;
  290. 220 : DATA <= 237;
  291. 221 : DATA <= 238;
  292. 222 : DATA <= 238;
  293. 223 : DATA <= 239;
  294. 224 : DATA <= 239;
  295. 225 : DATA <= 240;
  296. 226 : DATA <= 241;
  297. 227 : DATA <= 241;
  298. 228 : DATA <= 242;
  299. 229 : DATA <= 242;
  300. 230 : DATA <= 243;
  301. 231 : DATA <= 243;
  302. 232 : DATA <= 244;
  303. 233 : DATA <= 244;
  304. 234 : DATA <= 245;
  305. 235 : DATA <= 245;
  306. 236 : DATA <= 246;
  307. 237 : DATA <= 246;
  308. 238 : DATA <= 247;
  309. 239 : DATA <= 247;
  310. 240 : DATA <= 248;
  311. 241 : DATA <= 248;
  312. 242 : DATA <= 249;
  313. 243 : DATA <= 249;
  314. 244 : DATA <= 250;
  315. 245 : DATA <= 250;
  316. 246 : DATA <= 251;
  317. 247 : DATA <= 251;
  318. 248 : DATA <= 252;
  319. 249 : DATA <= 252;
  320. 250 : DATA <= 253;
  321. 251 : DATA <= 253;
  322. 252 : DATA <= 254;
  323. 253 : DATA <= 254;
  324. 254 : DATA <= 255;
  325. 255 : DATA <= 255;
  326.          default:   DATA<= 0;
  327.         endcase
  328. end
  329. endmodule
  330. square_para查表数据
  331. module image_rom_gamma_square_para
  332. (
  333.         input                    clka,
  334.         input                [7:0]        addra,
  335.         input                                ena,
  336.         output                [7:0]        douta
  337. );
  338. reg [7:0] DATA;
  339. assign        douta = DATA;
  340. always@(*)
  341. begin
  342.         case(addra)
  343. 0 : DATA <= 0;
  344. 1 : DATA <= 0;
  345. 2 : DATA <= 0;
  346. 3 : DATA <= 0;
  347. 4 : DATA <= 0;
  348. 5 : DATA <= 0;
  349. 6 : DATA <= 0;
  350. 7 : DATA <= 0;
  351. 8 : DATA <= 0;
  352. 9 : DATA <= 0;
  353. 10 : DATA <= 0;
  354. 11 : DATA <= 0;
  355. 12 : DATA <= 1;
  356. 13 : DATA <= 1;
  357. 14 : DATA <= 1;
  358. 15 : DATA <= 1;
  359. 16 : DATA <= 1;
  360. 17 : DATA <= 1;
  361. 18 : DATA <= 1;
  362. 19 : DATA <= 1;
  363. 20 : DATA <= 2;
  364. 21 : DATA <= 2;
  365. 22 : DATA <= 2;
  366. 23 : DATA <= 2;
  367. 24 : DATA <= 2;
  368. 25 : DATA <= 2;
  369. 26 : DATA <= 3;
  370. 27 : DATA <= 3;
  371. 28 : DATA <= 3;
  372. 29 : DATA <= 3;
  373. 30 : DATA <= 4;
  374. 31 : DATA <= 4;
  375. 32 : DATA <= 4;
  376. 33 : DATA <= 4;
  377. 34 : DATA <= 5;
  378. 35 : DATA <= 5;
  379. 36 : DATA <= 5;
  380. 37 : DATA <= 5;
  381. 38 : DATA <= 6;
  382. 39 : DATA <= 6;
  383. 40 : DATA <= 6;
  384. 41 : DATA <= 7;
  385. 42 : DATA <= 7;
  386. 43 : DATA <= 7;
  387. 44 : DATA <= 8;
  388. 45 : DATA <= 8;
  389. 46 : DATA <= 8;
  390. 47 : DATA <= 9;
  391. 48 : DATA <= 9;
  392. 49 : DATA <= 9;
  393. 50 : DATA <= 10;
  394. 51 : DATA <= 10;
  395. 52 : DATA <= 11;
  396. 53 : DATA <= 11;
  397. 54 : DATA <= 11;
  398. 55 : DATA <= 12;
  399. 56 : DATA <= 12;
  400. 57 : DATA <= 13;
  401. 58 : DATA <= 13;
  402. 59 : DATA <= 14;
  403. 60 : DATA <= 14;
  404. 61 : DATA <= 15;
  405. 62 : DATA <= 15;
  406. 63 : DATA <= 16;
  407. 64 : DATA <= 16;
  408. 65 : DATA <= 17;
  409. 66 : DATA <= 17;
  410. 67 : DATA <= 18;
  411. 68 : DATA <= 18;
  412. 69 : DATA <= 19;
  413. 70 : DATA <= 19;
  414. 71 : DATA <= 20;
  415. 72 : DATA <= 20;
  416. 73 : DATA <= 21;
  417. 74 : DATA <= 21;
  418. 75 : DATA <= 22;
  419. 76 : DATA <= 23;
  420. 77 : DATA <= 23;
  421. 78 : DATA <= 24;
  422. 79 : DATA <= 24;
  423. 80 : DATA <= 25;
  424. 81 : DATA <= 26;
  425. 82 : DATA <= 26;
  426. 83 : DATA <= 27;
  427. 84 : DATA <= 28;
  428. 85 : DATA <= 28;
  429. 86 : DATA <= 29;
  430. 87 : DATA <= 30;
  431. 88 : DATA <= 30;
  432. 89 : DATA <= 31;
  433. 90 : DATA <= 32;
  434. 91 : DATA <= 32;
  435. 92 : DATA <= 33;
  436. 93 : DATA <= 34;
  437. 94 : DATA <= 35;
  438. 95 : DATA <= 35;
  439. 96 : DATA <= 36;
  440. 97 : DATA <= 37;
  441. 98 : DATA <= 38;
  442. 99 : DATA <= 38;
  443. 100 : DATA <= 39;
  444. 101 : DATA <= 40;
  445. 102 : DATA <= 41;
  446. 103 : DATA <= 42;
  447. 104 : DATA <= 42;
  448. 105 : DATA <= 43;
  449. 106 : DATA <= 44;
  450. 107 : DATA <= 45;
  451. 108 : DATA <= 46;
  452. 109 : DATA <= 47;
  453. 110 : DATA <= 47;
  454. 111 : DATA <= 48;
  455. 112 : DATA <= 49;
  456. 113 : DATA <= 50;
  457. 114 : DATA <= 51;
  458. 115 : DATA <= 52;
  459. 116 : DATA <= 53;
  460. 117 : DATA <= 54;
  461. 118 : DATA <= 55;
  462. 119 : DATA <= 56;
  463. 120 : DATA <= 56;
  464. 121 : DATA <= 57;
  465. 122 : DATA <= 58;
  466. 123 : DATA <= 59;
  467. 124 : DATA <= 60;
  468. 125 : DATA <= 61;
  469. 126 : DATA <= 62;
  470. 127 : DATA <= 63;
  471. 128 : DATA <= 64;
  472. 129 : DATA <= 65;
  473. 130 : DATA <= 66;
  474. 131 : DATA <= 67;
  475. 132 : DATA <= 68;
  476. 133 : DATA <= 69;
  477. 134 : DATA <= 70;
  478. 135 : DATA <= 71;
  479. 136 : DATA <= 73;
  480. 137 : DATA <= 74;
  481. 138 : DATA <= 75;
  482. 139 : DATA <= 76;
  483. 140 : DATA <= 77;
  484. 141 : DATA <= 78;
  485. 142 : DATA <= 79;
  486. 143 : DATA <= 80;
  487. 144 : DATA <= 81;
  488. 145 : DATA <= 82;
  489. 146 : DATA <= 84;
  490. 147 : DATA <= 85;
  491. 148 : DATA <= 86;
  492. 149 : DATA <= 87;
  493. 150 : DATA <= 88;
  494. 151 : DATA <= 89;
  495. 152 : DATA <= 91;
  496. 153 : DATA <= 92;
  497. 154 : DATA <= 93;
  498. 155 : DATA <= 94;
  499. 156 : DATA <= 95;
  500. 157 : DATA <= 97;
  501. 158 : DATA <= 98;
  502. 159 : DATA <= 99;
  503. 160 : DATA <= 100;
  504. 161 : DATA <= 102;
  505. 162 : DATA <= 103;
  506. 163 : DATA <= 104;
  507. 164 : DATA <= 105;
  508. 165 : DATA <= 107;
  509. 166 : DATA <= 108;
  510. 167 : DATA <= 109;
  511. 168 : DATA <= 111;
  512. 169 : DATA <= 112;
  513. 170 : DATA <= 113;
  514. 171 : DATA <= 115;
  515. 172 : DATA <= 116;
  516. 173 : DATA <= 117;
  517. 174 : DATA <= 119;
  518. 175 : DATA <= 120;
  519. 176 : DATA <= 121;
  520. 177 : DATA <= 123;
  521. 178 : DATA <= 124;
  522. 179 : DATA <= 126;
  523. 180 : DATA <= 127;
  524. 181 : DATA <= 128;
  525. 182 : DATA <= 130;
  526. 183 : DATA <= 131;
  527. 184 : DATA <= 133;
  528. 185 : DATA <= 134;
  529. 186 : DATA <= 136;
  530. 187 : DATA <= 137;
  531. 188 : DATA <= 139;
  532. 189 : DATA <= 140;
  533. 190 : DATA <= 142;
  534. 191 : DATA <= 143;
  535. 192 : DATA <= 145;
  536. 193 : DATA <= 146;
  537. 194 : DATA <= 148;
  538. 195 : DATA <= 149;
  539. 196 : DATA <= 151;
  540. 197 : DATA <= 152;
  541. 198 : DATA <= 154;
  542. 199 : DATA <= 155;
  543. 200 : DATA <= 157;
  544. 201 : DATA <= 158;
  545. 202 : DATA <= 160;
  546. 203 : DATA <= 162;
  547. 204 : DATA <= 163;
  548. 205 : DATA <= 165;
  549. 206 : DATA <= 166;
  550. 207 : DATA <= 168;
  551. 208 : DATA <= 170;
  552. 209 : DATA <= 171;
  553. 210 : DATA <= 173;
  554. 211 : DATA <= 175;
  555. 212 : DATA <= 176;
  556. 213 : DATA <= 178;
  557. 214 : DATA <= 180;
  558. 215 : DATA <= 181;
  559. 216 : DATA <= 183;
  560. 217 : DATA <= 185;
  561. 218 : DATA <= 186;
  562. 219 : DATA <= 188;
  563. 220 : DATA <= 190;
  564. 221 : DATA <= 192;
  565. 222 : DATA <= 193;
  566. 223 : DATA <= 195;
  567. 224 : DATA <= 197;
  568. 225 : DATA <= 199;
  569. 226 : DATA <= 200;
  570. 227 : DATA <= 202;
  571. 228 : DATA <= 204;
  572. 229 : DATA <= 206;
  573. 230 : DATA <= 207;
  574. 231 : DATA <= 209;
  575. 232 : DATA <= 211;
  576. 233 : DATA <= 213;
  577. 234 : DATA <= 215;
  578. 235 : DATA <= 217;
  579. 236 : DATA <= 218;
  580. 237 : DATA <= 220;
  581. 238 : DATA <= 222;
  582. 239 : DATA <= 224;
  583. 240 : DATA <= 226;
  584. 241 : DATA <= 228;
  585. 242 : DATA <= 230;
  586. 243 : DATA <= 232;
  587. 244 : DATA <= 233;
  588. 245 : DATA <= 235;
  589. 246 : DATA <= 237;
  590. 247 : DATA <= 239;
  591. 248 : DATA <= 241;
  592. 249 : DATA <= 243;
  593. 250 : DATA <= 245;
  594. 251 : DATA <= 247;
  595. 252 : DATA <= 249;
  596. 253 : DATA <= 251;
  597. 254 : DATA <= 253;
  598. 255 : DATA <= 255;
  599.          default:   DATA<= 0;
  600.         endcase
  601. end
  602. endmodule
复制代码
4.2工程结构

工程结构如图所示:

image.jpg

图像数据通过摄像头采集进来,先缓存在fifo中,然后通过写状态机,将图像数据送进DDR进行缓存,缓存后的图像数据从DDR中取出,通过读状态机送出到fifo中,然后算法处理模块在fifo中取出数据,完成数据处理后送到LCD进行显示输出。

5上板实验
image.jpg

点击下载后,可以看到正常的输出如下所示,摄像头的分辨率为640x480

image.jpg




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

269

主题
精彩推荐
热门资讯
网友晒图
图文推荐

  • 微信公众平台

  • 扫描访问手机版