公司网站开发怎么做,网站设置手机版,网页设计简单教程,门户网站重要性图像降噪处理主要分为2D#xff08;空域#xff09;与3D降噪#xff08;时域/多帧#xff09;#xff0c;而2D降噪由于相关的实现算法丰富#xff0c;效果各异#xff0c;有着丰富的研究价值。理解2D降噪算法的流程#xff0c;也对其他的增强算法有很大的帮助#xff… 图像降噪处理主要分为2D空域与3D降噪时域/多帧而2D降噪由于相关的实现算法丰富效果各异有着丰富的研究价值。理解2D降噪算法的流程也对其他的增强算法有很大的帮助本文将介绍均值滤波到非局部均值滤波算法的原理及实现方式。 细数主要的2D降噪算法如下图所示从最基本的均值滤波到相对最好的BM3D降噪本文将详解这些算法的实现流程并给予一定的FPGA加速实现的实现思路。 一、均值/中值滤波 现所有滤波算法都是通过当前像素周边的像素以一定的权重来计算滤波的像素值。因此主要涉及两个变量窗口的大小以及窗口内像素的权重。以最简单的均值滤波/中值滤波3*3窗口为例计算及优缺点如下 均值滤波 对于FPGA的硬件加速实现过程还好唯一头疼的就是涉及了除法由于除法计算时钟周期长且耗费LE我们需要升级改造下因此优化公式如下sum为9个像素累加的结果将除法巧妙变成乘法 因此实现的流程如下
1sum1P0P1P2; sum2P3P4P5; sum3P6P7P8即先求每行3像素累加
2sumsum1sum2sum3即求三行9像素累加
3sum*144取结果的[17:10]即为均值滤波的结果。
4以上过程流水线最终每个clk输出一个计算结果。
备注这里1024/9取了floor这样保证不会溢出。
中值滤波
对于中值滤波而言本身计算并不复杂就看怎么取巧最快得到中间数网上流传了一个三步法即如下图所示 那么FPGA硬件加速实现流程如下
1计算每行3个像素的最大中、中值、最小值
2计算三个最大值的最小值中间值的中间值以及最小值的最大值。
3对上述三个值求得中间值。
4以上过程流水线最终每个clk输出一个计算结果。
中值滤波计算相对均值滤波稍微复杂一点但是好处是只用了比较器没用乘法器比均值滤波更省资源。
对于椒盐图像的均值滤波、中值滤波计算效果对比如下所示分别为椒盐图像、均值滤波、中值滤波结果。 二、高斯滤波 前面讲的均值/中值滤波对于窗口内每个像素的权重都是一样的噪声在图像当中常表现为一引起较强视觉效果的孤立像素点或像素块那么他必然不是平均分布。 正态分布是最重要的一种概率分布也叫做高斯分布。在正态分布里中间状态是常态过高和过低都属于少数因此正态分布具有相当的普遍性。 因此以概率论及中心极限定理猜想大部分噪声应该也符合正态分布/高斯分布高斯白噪声所以也就有了高斯滤波及根据正态分布进行权重计算的滤波方法。上图曲线是高斯分布的一维函数而图像应该是二维的图解如下二维高斯分布 既然已经得到二维高斯分布函数那么根据窗口到目标像素的距离就可以是计算出周边像素的权重——高斯模板。均值滤波每个像素的权重都是1/9再通过卷积后计算得到结构而高斯滤波就是根据正态分布去计算当前像素相对距离的权重值假定σ1.5σ就是滤波的强度3*3的高斯模板计算计算过程如下 但是这还不够毕竟我们的目标是直接上FPGA那必须顶定点化因此假设扩大1024倍则3*3的高斯模板定点化如下 对于3*3或者5*5选定的σ高斯模板那么现在计算就简单了卷积后再缩小1024倍即可采用FPGA计算过程如下
1计算9个像素的对应卷积参数的乘法
29累加9个乘法结果
3右移10bit或取结果的[17:10]即为高斯滤波的结果。
4以上过程流水线最终每个clk输出一个计算结果。
备注当然实现还可优化比如只用3个乘法器算一行累加一行也就4个时钟算完。
最后暂且盗用别人针对不同σ的3*3高斯滤波效果图如下σ越大越模糊 三、双边滤波 双边滤波是一种非线性滤波器它可以达到保持边缘、降噪平滑的效果。和其他滤波原理一样双边滤波也是采用加权平均的方法用周边像素亮度值的加权平均代表某个像素的强度所用的加权平均基于高斯分布。 但是双边滤波的权重不仅考虑了像素的欧式距离如高斯滤波——核域还考虑了像素范围域中的辐射差异比如像素与中心像素之间相似程度——值域计算时同时考虑这两个权重。 借用上网的一个图如上为同时考虑核域与值域的像素滤波计算公式其中space weight和range weight都符合高斯分布但前者仅靠了距离后者考虑了差值因此两者结合就是同时考虑了space range滤波。上述公式太抽象重新梳理如下其中1/Wp为归一化因子 由于双边滤波同时考虑了空间距离和像素相似度的影响因此尤其在具有边缘梯度的图像中能够有不错的效果。即在平坦区域空间距离占优势在边缘区域像素间相似度占优势可以直观的用下面这个图来表示 根据上图继续进一步细化步骤详解在FPGA中的实现方式如下
1提前计算好高斯模板和用于值域权重计算的256地址数据均已扩大1024倍定点化
2根据3*3原图和中心点差值判断得到值域模板
3将提前准备的高斯模板和上一步的值域模板相乘得到双边权重模板
4将得到的3*3个新的权重累加
5根据累加结果归一化归1024化完成最终权重模板的计算
6最新模板和原始3*3原图卷积得到新的目标像素。
7以上过程流水线最终每个clk输出一个计算结果。
OK搞定巧妙使用1024倍定点化及查找表的方法所有指数相关操作全部解决在允许的误差范围内实现FPGA的加速运算。
双边滤波其实就是个磨皮算法用于美容养颜还是不错所以网上找了一个图给大家参考下如此下 但是这里的归一化还是有不尽人意的地方因为不确定9个权重累加的值是多少因此无法采用乘法来替代除法这一块暂且在后面想好了再追加讨论。
参考文章
https://blog.csdn.net/qinghuaci666/article/details/81737624https://www.cnblogs.com/yoyo-sincerely/p/6058944.htmlhttps://www.jianshu.com/p/73e6ccbd8f3fhttps://blog.csdn.net/abcjennifer/article/details/7616663https://blog.csdn.net/u013066730/article/details/87859184