本帖最后由 FPGA课程 于 2024-10-17 13:23 编辑
软件版本:VIVADO2021.1
操作系统:WIN10 64bit
硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA
实验平台:米联客-MLK-H3-CZ08-7100开发板
板卡获取平台:https://milianke.tmall.com/
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!
1 图像对数变换算法简介
对数变换可以将图像的低灰度值部分扩展,显示出低灰度部分更多的细节,将其高灰度值部分压缩,减少高灰 度值部分的细节,从而达到强调图像低灰度部分的目的。 图像对数变换一般公式为: g = c*log(1 + f) 其中 c 为常数系数,f 为像素值范围 0~255。 如图所示,对数曲线在像素值较低的区域斜率较大,像素值较高的区域斜率比较低,所以图像经过对数变换之 后,在较暗的区域对比度将得到提升,因而能增强图像暗部的细节。
2 设计分析
2.1Matlab代码分析 源代码如下: - clear;clear all;clc;
- % g = c*log(1 + f)
- num = 256;
- f = [0:1:255];
- c =40;
- g = c*log(1+f);
- %=================================================================
- fid = fopen('log_para_256.coe','w');
- fprintf(fid,'memory_initialization_radix = 10;\n');
- fprintf(fid,'memory_initialization_vector =\n');
- for n = 1:num
- log(n) = round(g(n));
- end
- for n = 1: num - 1
- fprintf(fid,'%d, \n',log(n));
- end
- fprintf(fid,'%d;',log(256));
- fclose(fid);
- %=================================================================
- fid1 = fopen('../src/image_rom_log_para.v','w');
- fprintf(fid1,'module image_rom_log_para\n');
- fprintf(fid1,'(\n');
- fprintf(fid1,' input clka,\n');
- fprintf(fid1,' input [7:0] addra,\n');
- fprintf(fid1,' input ena,\n');
- fprintf(fid1,' output [7:0] douta\n');
- fprintf(fid1,');\n');
- fprintf(fid1,'reg [7:0] DATA;\n');
- fprintf(fid1,'assign douta = DATA;\n');
- fprintf(fid1,'always@(*)\n');
- fprintf(fid1,'begin\n');
- fprintf(fid1,' case(addra)\n');
- for n = 1:num
- log(n) = round(g(n));
- end
- for n = 1: num
- fprintf(fid1,'%d : DATA <= %d; \n',n-1,log(n));
- end
- fprintf(fid1,' default: DATA<= 0;\n');
- fprintf(fid1,' endcase\n');
- fprintf(fid1,'end\n');
- fprintf(fid1,'endmodule\n');
- fclose(fid1);
- %=================================================================
- hold on
- plot(f);
- plot(g);
- legend('f','log g');
- hold off
复制代码
2.2Verilog代码分析 由于提前使用 matlab 计算好了log 系数,这里代码很简单直接查表就行。 - //同步输出使能信号
- assign o_hs = i_hsyn; assign o_vs = i_vsyn; assign o_en = i_en;
- image_rom_log_para u i r (
- .clka(i_clk ),
- .addra (i_r ),
- .ena (1'b1 ),
- .douta (o_r )
- );
- image_rom_log_para u_i_g (
- .clka(i_clk ),
- .addra (i_g ),
- .ena (1'b1 ),
- .douta (o_g )
- );
- image_rom_log_para u i b (
- .clka(i_clk ),
- .addra (i_g ),
- .ena (1'b1 ),
- .douta (o_b )
- );
复制代码
3 工程结构分析
4 仿真及结果4.1Matlab实验结果
4.2Modelsim实验结果
5 搭建 Vitis-sdk 工程创建 soc_base sdk platform 和 APP 工程的过程不再重复,可以阅读 3-3-01_sdk_base_app。以下给出创建好 soc_base sdk platform 的截图和对应工程 APP 的截图。 5.1 创建 SDKPlatform工程
5.2SDKAPP工程
6 硬件连接硬件连接如图所示:
7 上板实验结果实验结果如图所示:
|