关于基于FPGA的图像FFT滤波处理的分析和介绍_第1页
关于基于FPGA的图像FFT滤波处理的分析和介绍_第2页
关于基于FPGA的图像FFT滤波处理的分析和介绍_第3页
关于基于FPGA的图像FFT滤波处理的分析和介绍_第4页
关于基于FPGA的图像FFT滤波处理的分析和介绍_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于基于FPGA的图像FFT滤波处理的分析和介绍基于FPGA的图像FFT滤波处理AT7_Xilinx开发板(USB3.0+LVDS)资料共享1昨天

11:39上传关于傅里叶变换关于傅里叶变换,这么一个神奇的变换,其基本原理和应用在教科书、网络上漫天飞舞,这里就不赘述了,以免有凑字数的嫌疑。前面的例子我们已经使用Matlab和Vivado的FFTIP核进行了初步的验证,掌握的FFT/IFFTIP核的脾气,那么接下来我们要玩点真的了,基于我们STAR/SF-AT7板采集到的MT9V034图像,我们要进行每个行的FFT和IFFT变换,当然,生成的FFT结果我们可以进行必要的滤波,然后再进行IFFT查看滤波效果。2基于Matlab的FFT滤波使用at7_img_ex06matlab文件夹下的Matlab源码image_1D_fft_ifft.m或L1024_of_image_1D_fft_ifft.m(将640个点扩展为1024个点进行FFT变换,扩展的点以0填充,模拟FPGA的FFTIP核实际工作状况),对测试图像test进行FFT变换,进行必要的滤波,然后IFFT逆变换。测试图像为彩色图像,原始图像如下。首先进行彩色转灰度的变换,灰度图像如下。提取出其中1行进行FFT变换后的图像频谱如下。很明显,大部分高频分量集中在前面几个点,而后面的点几乎频率都很小。放大频谱图,看到细节如下。这里绘制了一条取值为300的直线,有将近50%的频谱集中在这条线以下。若是做图像压缩,其实我们可以把这些低频分量忽略了,那么数据量可能会大大降低,当然了,副作用是图像可能会有一定程度的失真,有失必有得嘛。滤除这些低频分量,也会使图像更锐一些。话说做FFT变换的目的可远不止这些,在一些特殊的应用场景中,我们总是希望从原始图像中提取出一些和应用直接相关的特征信息,那么做了FFT后的图像常常非常有益于这些操作。为了演示,这里我们的代码里面就将这些低于300的点都滤除,即取0。从频谱图上看,如图所示,右侧的滤波后明显图像偏黑(很多值取0了)了。我们重新把原图放到这里,和FFT滤波并IFFT以后的图像做比对,图像整体仍然保持不变,但是查看细节,可以发现处理后的图像明显锐了一些。Matlab源码如下:clc;clear`all;closeall;IMAGE_WIDTH=640;IMAGE_HIGHT=480;%loadoriginimage%I=imread('Lena_gray_niose.bmp');

I=imread('test.bmp');

I=rgb2gray(I);%fclose(fid1);%%outputimagedatainhexfileraw_image=reshape(I,IMAGE_HIGHT,IMAGE_WIDTH);raw_image=raw_image';fid2=fopen('image_in_hex.txt','wt');fprintf(fid2,'%04x',raw_image);fid2=fclose(fid2);%showoriginimagefigure,imshow(I);title('Originalimage');%1DfftbaseoneveryimagelineII=zeros(IMAGE_HIGHT,1024);J=zeros(IMAGE_HIGHT,1024);fori=1:IMAGE_HIGHTforj=1:IMAGE_WIDTHII(i,j)=I(i,j);end

J(i,=fft(II(i,);%fft(I(i,);end%show1linefftresultt1=(0:IMAGE_WIDTH);

%Timevectorline=ones(IMAGE_WIDTH)*200;figure;plot(t1(1:IMAGE_WIDTH),abs(J(50,1:IMAGE_WIDTH)),t1(1:IMAGE_WIDTH),line(1:IMAGE_WIDTH))title(['1lineimageintheFrequencyDomain'])%showfftoforiginimagefigure,imshow(log(abs(J)),[]);

title('1Dfftimagebaseoneveryimageline');%colormap(jet(64)),colorbar;%fftfiterJ(abs(J)<300)=0;

%J(abs(J)>1000)=1000;

%showfftoffftfilterimagefigure,imshow(log(abs(J)),[]);

title('1Dfftimageafterfilter');%1DifftbaseoneveryimagelineK=zeros(IMAGE_HIGHT,1024);fori=1:IMAGE_HIGHTK(i,=real(ifft(J(i,));endKK=zeros(IMAGE_HIGHT,IMAGE_WIDTH);fori=1:IMAGE_HIGHTforj=1:IMAGE_WIDTHKK(i,j)=K(i,j);endend%showifftimagefigure,imshow(KK,[])

title('1Difftimage');3FPGA仿真在Sources面板中,展开SimulationSourcesàsim_1,将sim_fft.v文件设置为topmodule。同样是对前面的测试图像,经过FFT和IFFT变换后存储在image_view0.txt文本中(仿真测试结果位于at7_img_ex06at7.simsim_1ehav文件夹下)。为了确认FFT和IFFTIP核运算的精度和效果,这里没有做任何的滤波处理。使用draw_image_from_FPGA_result.m脚本(at7_img_ex06matlab文件夹下)导入image_view0.txt文本的图像,和原始图像比对如下所示。看到图像几乎没有任何失真。4基于FPGA的图像平滑处理工程文件夹at7_img_ex06zstar.srcssources_1ew下的image_fft_filter.v模块以及3个子模块image_fft_controller.v、image_filter.v和image_ifft_controller.v实现了图像的FFT变换、滤波和IFFT变换处理。FPGA设计的功能框图如下。image_fft_controller.v模块例化FFTIP核,将采集的图像留以行为单位输入到FFTIP核,输出FFT频域数据。image_filter.v模块对FFT频域数据计算绝对值并进行必要的滤波处理,假设FFT结果的实部值为a,虚部值为b,那么其绝对值abs=sqrt(a^2+b^2)。如下代码,注释部分可以滤除低频分量,当前例程中为了验证FFT和IFFT变换后精度没有损失,未作滤波。always@(posedgeclkornegedgerst_n)

if(!rst_n)begino_image_filter_data_image<=20'd0;o_image_filter_data_real<=20'd0;end/*elseif(sqrt_fft[19:0]<20'd300)begin

//此处可以做必要的高频或低频滤波处理o_image_filter_data_image<=20'd0;o_image_filter_data_real<=20'd0;end*/elsebegino_image_filter_data_image<=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论