热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一维信号双边滤波器_双边滤波器文献总结(一)

因为最后的dde算法中,最核心的就是滤波器模块,由于做之前是没有好好攻读相关硬件文献,加上相关背景写的不好导师一顿痛批,搞得
490e6bab11a9c18b3dc081667e4bc580.png

因为最后的dde算法中,最核心的就是滤波器模块,由于做之前是没有好好攻读相关硬件文献,加上相关背景写的不好导师一顿痛批,搞得现在要本末倒置,拿结果去找自己值得这么做的理由。但其实从研究角度来说应该是一件好事的。

(小吐个槽:说起来之前也不算是没好好读文献,实在是调研的时候方向偏差太大,红外图像增强的VLSI或FPGA实现?要么没有,要么都停留在很简单的加速方式,比如已经被做成ip的直方图均衡类算法,甚至有人拿C转verilog来凑数的!有参考价值的都只是单单说算法而不是太讲实现的。也都是做rtl设计的时候遇着坑了,才想到主要问题可能要去分析滤波器,而搜滤波器的硬件实现才是真的一搜吓一跳,果然很多时候,我们思维都容易固化在顶层了,毕竟做VLSI或者FPGA设计很多时候是没办法细份在某个具体应用领域的,都是越通用越好,而用它们加速本身也是一种底层思维,迭代成本很高,更需要我们具有这种底层的意识)。

今天就主要聊聊双边滤波器的硬件实现。

首先感觉比较新并且比较系统的应该算是这一篇了

Tseng Y C , Hsu P H , Chang T S . A 124 Mpixels/s VLSI Design for Histogram-Based Joint Bilateral Filtering[J]. IEEE Transactions on Image Processing, 2011, 20(11):3231-3241.

他最好的一点是对很多处理这种滤波器的思路进行了归类总结,并对时间复杂度和存储消耗做了整理。

4a3116b8be30ecb420ce0671c4ff4468.png
论文中的归类表

Support Pixel First Approach

我最后的采用的设计方法,也是非常相似于Durand的方法,所以我先对这种类型做一说明。双边滤波器拥有更多的应用场景就是因为他比一般的空间滤波器(文中称spatial filter)有更好的边缘保持性(edge-preserving),理解一下就是边缘(也可以理解为轮廓)越多的地方,平滑的程度相对于非边缘区域小一点。一般的空间滤波器,在FPGA和VLSI应用中,已经有了很好办法了,就是用寄存器组,搭建一个卷积核,并且利用S行缓冲把zig-zag(写Z字母的顺序)的顺序,变成S行并行。(图画的很丑,大家理解)

884fe0238f09116b0f8125bedda29161.png

那么能不能把f(|c-q|),g(|Ic-Iq|)也写到这个卷积核里呢?答案是不能的,由于位置确定,计算f其实输入都是常量,但是g的输入可不是常量,他需要中心像素点,而这个卷积核每移动一下(整个运算操作可以等效为卷积核按Z型移动),中心像素点都会变。g需要一个单输入超越函数运算模型,在硬件实现中,方法有3,一种是多项式分解,一种是cordic算法,一种就是LUT(查找表)。前两个这个表中没有,就不说了,LUT顾名思义,就是有限输入情况,你拿着输入翻译成地址到RAM里找,1个周期就能实现,特别适合现在的情况:时间短、吞吐率一致,而且数字图像处理的灰度级本身也是有限的。但是套的时候就发现问题了,我为了简单只话了一个3x3的卷积核,如果大了,对于RAM面积就是几何倍的增长,如何能让这个增长不太大就是去缩减Ic-Iq的灰度级(subsample),或者用线性插值(piecewise-linear)去进一步简化LUT(y=c--->y=ax+b)。当然也有人直接避开这种计算,比如Paris的方法是直接用近似的方法把二维卷积化成了三维卷积(比较怪异不细说)。memory cost应该没有表里这样,就basic而言我觉得应该是这样的,不少于S*(N-1)+(S*(h+1))^2,第一项是行缓冲,第二项是查找表加寄存器组(查找表深度h)。

Target Pixel First Approach

我理解的这样的归类方法应该是不做卷积核了,把整个拆解成一维卷积,Pham的方法里简要论证了一下,直接一维卷积做行不行,但也是说是approximation,效果咋样见仁见智,

2e3ad64dc1db735c3f8a0015c917a9b9.png
Pham的方法,先x方向上滤波,再y方向上滤波

但是一维以后复杂度可是降了很多个层次,能用上盒子滤波器就再好不过了(box-filter)。可能是受这个启发,表里后面的几种方法都在简化维度的同时,让这个approximation做的更接近一点。本文作者也就是主要借鉴了Porikli的方法,文中称IH(intergral histogram),我很细致的去阅读了一下这篇文章,其本质还是去用多项式分解的形式化解g的运算,只是不依赖卷积核了,用内存把所有位置直方图积分结果存储起来,卷积核(kernel)内的直方图,直接可以用四个位置的结果计算出来,利用他的分解方式套入计算g。令我比较疑惑的一点,直方图化以后,他便无法考量卷积核内的位置了,但是按照双边滤波器定义,即便两个像素相等,一个若在左侧(3x3举例),一个在右上侧,他们的权值应该是不等的,文章里好像是直接按相等做近似了。。。那也差的太多了。优点就在于只用存直方图积分结果,和原图。复杂度上降低了很多。



推荐阅读
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • ArcBlock 发布 ABT 节点 1.0.31 版本更新
    2020年11月9日,ArcBlock 区块链基础平台发布了 ABT 节点开发平台的1.0.31版本更新,此次更新带来了多项功能增强与性能优化。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • 本文详细介绍了如何在Android应用中实现重复报警功能。示例代码可在以下路径找到:https://developer.android.com/samples/RepeatingAlarm/index.html。首先,我们将从Manifest文件开始分析。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 本文详细介绍了 Node.js 中 OS 模块的 arch 方法,包括其功能、语法、参数以及返回值,并提供了具体的使用示例。 ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文详细介绍了如何在Spring框架中设置事件发布器、定义事件监听器及响应事件的具体步骤。通过实现ApplicationEventPublisherAware接口来创建事件发布器,利用ApplicationEvent类定义自定义事件,并通过ApplicationListener接口来处理这些事件。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
author-avatar
job2672488
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有