基于FPGA的图像处理之直方图均衡.docx

上传人:lao****ou 文档编号:841708 上传时间:2024-06-17 格式:DOCX 页数:6 大小:59.99KB
下载 相关 举报
基于FPGA的图像处理之直方图均衡.docx_第1页
第1页 / 共6页
基于FPGA的图像处理之直方图均衡.docx_第2页
第2页 / 共6页
基于FPGA的图像处理之直方图均衡.docx_第3页
第3页 / 共6页
基于FPGA的图像处理之直方图均衡.docx_第4页
第4页 / 共6页
基于FPGA的图像处理之直方图均衡.docx_第5页
第5页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《基于FPGA的图像处理之直方图均衡.docx》由会员分享,可在线阅读,更多相关《基于FPGA的图像处理之直方图均衡.docx(6页珍藏版)》请在第一文库网上搜索。

1、基于FPGA的图像处理之直方图均衡最近一直在用FPGA调图像处理相关的算法,主要是集中在图像增强和增晰方面。现在来介绍一个复杂度不高,但确实也还比较好用的图像增强算法-直方图均衡。直方图均衡的作用,上面也说了,是图像增强,那是增强什么呢?是增强图像的对比度。先来看下在Mat1ab中实现直方图均衡的效果吧。彩色图灰度图A方图均衡化图片比较随意,直接对电脑桌面截了一张图,大家应该能有一个直观的感受,知道直方图均衡的作用和效果了吧!直方图均衡在对一些低照度图像增晰、去雾处理等应用场景,效果还是挺不错的。对于直方图均衡的实现步骤,在网上一搜一大把,大部分讲的都是用MatIab或者箍宣的代码实现。那我们

2、也先来结合Mat1ab代码来介绍一下直方图均衡的实现步骤,之后再说说用FPGA是怎么做的。%第一步统计每个像素值出现次数count=zeros(1,256);fori=1:Rforj=1:Ccount(1,fx(i,j)+1)=count(1,fx(i,j)+1)+1;endend第一步,是对于一整幅图像进行像素值统计,当然咱们这是对灰度图像进行直方图均衡,所以统计的像素值大小范围是0-255o这一步是统计0-255这256个像素点的值,在整幅图像中出现的次数。%第二步统计每个像素值出现的概率,得到概率直方图T=zeros(1,256);T=doub1e(T);count=doub1e(cou

3、nt);fori=1:256T(1,i)二count(1,i)/(R*C);%R和C为图像长和宽end第二步,将像素点统计出来的出现次数除以图像的总像素点,计算出各个灰度值出现的概率。%第三步求累计概率,得到累计直方图fori=2:256T(1,i)=T(1,i-1)+T(1,i);end第三步,单看代码,似乎不太好理解,这一步算的累计概率是怎么算的呢?第1个结果,像素值为O的概率+像素值为1的概率;第2个结果,像素值为O的概率+像素值为1的概率+像素值为2的概率;。第255个结果,像素值为O的概率+像素值为1的概率+像素值为2的概率+.+像素值为255的概率。其实就是等于1。其实这一步,总共

4、会得出256个结果,还要算上像素值为O的概率,因为在第二步中已经算出来了单个像素点的概率,所以就没有再次算了,f。循环里面写的就是2-256了。%第四步完善映射函数fori=1:256T(1,i)=T(1,i)*255;end第四步,是完善映射函数。从原图到直方图均衡化之后的图像,之间肯定存在一个函数f(x),类似的img_out=f(img_in)。也就是从原图进行直方图均衡需要有一个函数表示他们之间的关系。而这一步就是完善这个函数,其实就是对第三步得出的累计概率分布结果*255o注意,这个映射函数其实是一个离散值,总共有256个值。%第五步完成每个像素点的映射fy=doub1e(fx);f

5、ori=1:Rforj=1:Cfy(i,j)=T(1,fy(i,j)+1);endend这是最后一步了,把原图经过第四步的映射函数,得到直方图均衡化之后的图像结果。这一步,给大家再解释一下,其实就是把输入图像的像素值,作为映射函数这个一维数组相应元素的下标,去找到对应下标元素的值。并把这个值作为直方图均衡化的结果输出。对于直方图均衡的处理,从流程上来看,其实是很简单的。当然对于有些书,会给你列出一堆的公式。作为一个毕业多年的老油条,对那些公式早就不敏感了。所以在文章里面,就直接开门见山的给大家说步骤了,这也算是对那些也像我这种对数学公式早已不感冒的朋友的一份爱惜吧!对于原理部分,贴着Mat1a

6、b代码说完了,那就是再说说在FPGA里面的实现步骤吧。用FPGA来实现直方图均衡,我把上面的步骤稍微做了一点改变。第一步,依然统计0-255这256个像素点出现的次数。第二步,没有计算各个像素点出现的概率,而是统计各个像素点出现的累计次数。也是得到256个结果:第1个结果,像素点为0出现的次数;第2个结果,像素点为0出现的次数+像素点为1出现的次数;第3个结果,像素点为0出现的次数+像素点为1出现的次数+素点为2出现的次数;依次类推。第三步,将第二步的结果*255*2,就是比刚刚在Mat1ab中,多乘上了2,这样做的目的,是因为在FPGA里面没有进行小数运算,所以先乘上2,为后面的运算稍稍提高

7、一下精度。第四步,将第三步的结果除以整幅图片的像素点个数。第五步,完成直方图均衡对输入像素点值的映射。这里要注意,因为摄像头那边的数据是连续过来的,如果像Mat1ab那样,先计算好当前图像的映射函数,再把当前图像作为输入,给到映射函数再得出直方图均衡的结果,这个时间是等不起的。所以这里我进行了一定的简化,我是以前一帧图像完善的映射函数作为当前帧图像的映射函数。这种做法,其实是完全可行的,咱们摄像头图像的帧速率一般是30fps,也就是在1秒钟里面可以有30幅图像,只要摄像头采集的画面变化速度在一定范围里面,咱们这样做是完全OK的,而且我用的摄像头是MT9V034,是全局曝光的。是的,这就是我这几

8、天刚刚组装好的MT9V034摄像头,打样了几片迎,装上了CS大镜头,0V5640瞬间变身小弟,哈哈!感觉绿色的板子看着有点1ow,之后再换成黑色阻焊看看!对于图像的增强效果还是很明显的。在调试直方图均衡这个算法的时候,刚开始调的很郁闷。完全搞不明白为啥,极其郁闷。反复检查了代码,也跑了仿真,没发现问题啊。难不成直方图均衡后的效果就是这个鬼样子。然后也在网上搜,看看有没有用FPGA做直方图均衡后的效果图,来比较一下。搜了半天,找到的全都是用MatIab或者其他什么软件语言做的效果图,我要这些效果图干啥,劳资这边多的是!之后又在知网下了好几篇FPGA的直方图均衡的论文,想看看论文里面有没有效果图,

9、大多又是Mat1ab的效果图,无语。设一基于FPGA的CMoS视频图像增强算法蔡勇天图像增强方法究及FPGA实现Xaj其_一种自适应双平台直方图红外图像增强,一基于FPGA的直方图均耋化图像舞轴SW郁闷了一晚上,到第二天上午,把脑袋放空,重新归零。回忆这种现象,想起来在之前调的一个图像增强算法也出现了类似的效果。一时记不起来当时是怎么解决的,非常后悔,要是当时写了一份调试记录该多好。划重点,写调试记录,是非常重要的!想了很久,当时出现这种情况,似乎是VGA显示的数据,对要显示的数据源截位有问题。举个例子,VGA要显示灰度图像的8个bit,但是你要给VGA显示的图像数据有16个bit,理应是把1

10、6bit的高8bit给VGA显示,但是却把12:5这8个bit给了VGA显示。但是这个问题,是在哪个地方出现了截位的问题呢?又想了很久,怀疑是除法器的IPCoreo23div_gen_0uut_div_gen_O(4.ac1k(e1k)/inputwire5.s_axis_divisor_tva1id(div_v1d),/inputwire6.s_axis_divisor_tdata(4,drpixcnt),/inputwire7.s_axis_dividend_tva1id(div_v1d),/inputwire8I*s_axis_dividend_tdata(2,d,divident),/inputwire9.m_axis_dout_tva1id(div_dout_v1d),/outputwir0.m_axis_dout-tdata(div_dout)/outputwxr1);除法器的doutdata,这个端口,包含了商的结果和小数部分,那商的结果也就是整数部分占多少bit,小数部分占多少bit?在代码里面,在对div_dout这个信号去把商的结果拿出来,在这个环节出现了截位的问题。果真,改了之后,结果马上正常了。审核刘清

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服