热门标签 | 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举例),一个在右上侧,他们的权值应该是不等的,文章里好像是直接按相等做近似了。。。那也差的太多了。优点就在于只用存直方图积分结果,和原图。复杂度上降低了很多。



推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
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社区 版权所有