赞
踩
白平衡,基本意义是不管任何光源下,都能将白色物体还原为白色,对特定光源下拍摄时出现的偏色现象,通过对应的补色进行补偿。日光灯下图像偏绿,钨丝灯下发黄,自然光下偏蓝。
世界灰度法:该假设认为对于一幅有着大量色彩的图片,RGB三个分量的平均值趋向于同一个灰度K。首先求出图片RGB三个颜色分量的平均值Rmean、 Gmean 、Bmean,再求出图片的平均值,Fmean = (Rmean+ Gmean +Bmean)/3,kr = Fmean/ Rmean既是红色分量的增益,R = r *kr即是白平衡后的图片的红色分量。绿色与蓝色同理。
算法总体来说还是比较简单的,MATLAB实现也不困难,对比两图,发现左边的原图确实有点发黄,右边处理过后确实白色更白一点,更接近真实的颜色。
芯片:A7100t
屏幕分辨率:1080P
图片分辨率:312*415
接口:HDMI
FPGA实现这个算法也不难,估计就是一个小时的时间,但是调试过程中发现如下几个问题:
1、在算法转换过程中数据溢出。
表现就是颜色错误,比如白色部分为黄色,蓝色颜色溢出。比如强度为255的颜色分量,图片的强度是100,颜色的强度是90,那么根据算法255*100/90 = 283,明显大于255,但是我在RGB888显示过程会忽略高位数据,那么283在显示中其实只有28,那么就会莫名其妙颜色不对。处理方法也很简单、粗暴,如果大于255就截断取255,小于255就取原值。
2、时序不收敛。
由于数学算法需要从脚本语言即MATLAB翻译成verilog语言,verilog是硬件描述语言,描述出的电路不同会影响时序。例如我一开始全部使用assign wire描述算法过程,setup slack最差-30多纳秒,总体有3000多纳秒的slack,直接导致屏幕都点不亮,后面改用流水线,发现setup slack下降到-16ns,屏幕能点亮,但是图片上有一些莫名其妙的颜色。通过查验时序报告,发现setup slack最差的时序路径是由kr = Fmean/ Rmean这个除法器带来的,这个就很尴尬了,因为除法是算法必需的过程,除法用减法来实现也是一个思路,但是比较麻烦、不直接。我是采用VIVADO自带的除法IP核,最后把setup slack降到了-2 ns,这个时候效果比较好了,这个-2 ns其实是Fmean = (Rmean+ Gmean +Bmean)/3过程的除法器带来了的。不过不影响整体效果,而且原因是同样的,就无所谓了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。