空间里看到一位网友说:最后一周,2016你尽力了吗? 扪心自问,我尽力了吗,逝者如斯,不舍昼夜啊。 [size=14.0000pt]一、项目背景 图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大。如机器视觉、人脸识别、指纹识别、交通控制系统、在卫星图像中定位物体(道路、森林等)、行人检测、医学影像。 而FPGA执行算法的本质是靠 电路并行执行的,在同样的时钟频率下,使用FPGA完成数字信号处理算法要比DSP快的多。Xilinx系列的FPGA有着不可比拟的优势。
相信很多朋友都有出现过 MATLAB死了 busy 面向便携式硬件,MATLAB就不在合适了! [size=14.0000pt]二、流程框图 摄像头的数据由iic协议传给FPGA,FPGA里由MATLAB配置的图像处理的IP核处理,再经网口传给PC显示等。
[size=14.0000pt]三、硬件部分 主要由迪芝伦(http://www.digilent.com.cn/productlist.html) 一个开源FPGA网站--开源--开源--开源,兄弟!里面有很多针对xilinx的板卡的项目、模块,项目源码可以下载,部分模块提供用户手册和原理图下载。 比如板卡上的贴片jtag
四、软件部分 1、修改板卡传感器例程把摄像头部分调通,不再赘述。
固化程序方法: http://blog.csdn.net/phenixyf/article/details/9409337 A、在SDK中,采用菜单命令:Xilinx Tools>>Program FPGA,在弹出的界面中把下面的Software Configuration中,选择*.elf文件(这个文件在工程SDK目录下的项目中的Debug中),然后点击Program。
B、在SDK中,采用菜单命令:Xilinx Tools>>Program Flash,在Image File中选择download.bit文件(该文件在硬件配置文件夹下*_wrapper_hw_platform_0下)
c、选择你板子上的Flash Tybe,然后点击Program,下载结束后,重新给板子上电,OK!
2、MATLAB配置xilinx的IP核 教程网上有很多的,这位兄弟也有搞车牌数字识别! 数字识别算法 感觉算法不是一天两天的事情,FPGA搞来搞去还是综合实力的问题,MATLAB与c++混合编程,或者c++。
贴一个,Simulink的错误报告,哈哈。 ---------------------------------VersionLog-------------------------- Version Path System Generator 2016.2 C:/Xilinx/Vivado/2016.2 Matlab 8.5.0.197613 (R2015a) E:MATLAB Vivado 2016.2 C:/Xilinx/Vivado/2016.2 --------------------------------------------------------------------- Summary of Errors: Error 0001: Illegal parameterization: Input number of bits Block: 'untitled/CMult2' Error 0002: Illegal parameterization: Input number of fraction-bits Block: 'untitled/CMult2' Error 0003: Illegal type on port: a Block: 'untitled/CMult2' --------------------------------------------------------------------- Error 0001: Reported by: 'untitled/CMult2' Details: For floating point operation, number of bits of both the operands should be same. Number of bits is 16 for input port a and 32 for constant operand. Error occurred during "Rate and Type Error Checking". --------------------------------------------------------------------- Error 0001: Reported by: 'untitled/CMult2' Details: For floating point operation, number of fraction-bits of both the operands should be same. Number of fraction-bits is 14 for input port a and 24 for constant operand. Error occurred during "Rate and Type Error Checking". --------------------------------------------------------------------- Error 0001: Reported by: 'untitled/CMult2' Details: The a port has data type Fix_16_14. The a port must be a float signal. Error occurred during "Rate and Type Error Checking". --------------------------------------------------------------------- 解决:把Constant Type改为默认的Fixed-point 从MATLAB打开出现错误 Error evaluating ‘MoveFcn’ callback of Xilinx Adder/Subtracter Block C盘找不到指定模块 解决:从Xilinx Design Tools下启动MATLAB并打开文件
灰度分级代码 function J = regionGrow(I) % 区域生长,需要以交互方式设定初始种子点,具体方法为鼠标单击图像中一点后,按下回车键 % % 输入:I - 原图像 % 输出:J - 输出图像 if isinteger(I) I=im2double(I); end figure,imshow(I),title('原始图像') [M,N]=size(I); [y,x]=getpts; %获得区域生长起始点 x1=round(x); %横坐标取整 y1=round(y); %纵坐标取整 seed=I(x1,y1); %将生长起始点灰度值存入seed中 J=zeros(M,N); %作一个全零与原图像等大的图像矩阵J,作为输出图像矩阵 J(x1,y1)=1; %将J中与所取点相对应位置的点设置为白 sum=seed; %储存符合区域生长条件的点的灰度值的和 suit=1; %储存符合区域生长条件的点的个数 count=1; %记录每次判断一点周围八点符合条件的新点的数目 threshold=0.15; %阈值,注意需要和double类型存储的图像相符合 while count>0 s=0; %记录判断一点周围八点时,符合条件的新点的灰度值之和 count=0; for i=1:M for j=1:N if J(i,j)==1 if (i-1)>0 & (i+1)<(M+1) & (j-1)>0 & (j+1)<(N+1) %判断此点是否为图像边界上的点 for u= -1:1 %判断点周围八点是否符合阈值条件 for v= -1:1 if J(i+u,j+v)==0 & abs(I(i+u,j+v)-seed)<=threshold& 1/(1+1/15*abs(I(i+u,j+v)-seed))>0.8 J(i+u,j+v)=1; %判断是否尚未标记,并且为符合阈值条件的点 %符合以上两条件即将其在J中与之位置对应的点设置为白 count=count+1; s=s+I(i+u,j+v); %此点的灰度之加入s中 end end end end end end end suit=suit+count; %将n加入符合点数计数器中 sum=sum+s; %将s加入符合点的灰度值总合中 seed=sum/suit; %计算新的灰度平均值 end
项目预期效果图,通过网口把处理好的图像传至PC或者pmod转VGA显示吧,显示部分还在完善中。
总结: 首先,感谢“ 电子发烧友论坛” 和“xilinx”举办的这次Artix-7 试用活动,使我有机会接触到了xilinx系列FPGA板卡 ,获得了一系列的体会--从FPGA到数字图像处理,当然我会继续完善项目。 授人以鱼不如授人以渔,微盘里面有很多书籍资源,我也上传一部分。
|