最近一直在做版面分析,其中文本行检测方面,许多文章涉及到了Anigauss也就是各向异性高斯滤波。

顾名思义,简单的理解就是参数不同的二维高斯滤波。

在文章Fast Anisotropic Gauss Filtering中阐明了Anisotropic Gauss Filter可以分解成想,y两个方向不同的一维高斯滤波,其中x,y不必垂直。

下面我们来看一下分解过程。

一个简单的各向同性二维高斯卷积滤波一般如下式

当x,y方向缩放比例不同时我们便得到了各向异性二维高斯滤波如图

当然也可以做其他方向的滤波,我们设旋转角度为θ如图,则旋转后坐标与x,y坐标关系为

因此可以得到一个通用的表达式

其中u轴为θ方向,v轴为垂直于θ方向。

根据傅里叶变换我们知道,空域卷积等于频域相乘

所以如果一个线性滤波的傅里叶变换可以写成两个分别关于Wx,Wy方程相乘的形式,那么在空域他可以写成两个子项的卷积

因此我们可以将 的傅里叶变换写成如下形式:

(7)

也就是

然而我们只对x,y感兴趣,因此我们将分解为

 (10)

然后我们可以得到a11,a12,a13的表达式

再一次明确我们的目标是将各向异性高斯滤波分解成一个x方向与一个延方向的一维滤波。

便于分解,我们(10)式写成所有与Wy无关和Wy有关的相加形式

并放入(10)式后得到

根据指数的性质也可写为

然后做傅里叶逆变换后得到

第一项表示x方向的滤波

第二项表示滤波

其中

至此分解完成:

文中作者应用了recursive filter去做了实现,具体需要参考源代码anigauss.c

具体效果如图

Anisotropic gauss filter的更多相关文章

  1. 二维高斯滤波器(gauss filter)的实现

    我们以一个二维矩阵表示二元高斯滤波器,显然此二维矩阵的具体形式仅于其形状(shape)有关: def gauss_filter(kernel_shape): 为实现二维高斯滤波器,需要首先定义二元高斯 ...

  2. opencl gauss filter优化(三)

    1.根据前两次的最终结果: 使用普通buffer,Horizontal 5ms, Vertical 17 ms 使用image buffer:Horizontal 9.4ms, Vertical 6. ...

  3. opencl gauss filter优化(二)

    1.buffer使用image的方式:Horizontal 与 Vertical 算法一样, 共需30ms,wait time 19ms. const sampler_t sampler = CLK_ ...

  4. opencl gauss filter优化(一)

    Platform: LG G3, Adreno 330 ,img size 3264x2448 C code neon GPU 300 60 29 单位:ms 1. 目前按如下行列分解的方式最快29m ...

  5. Texture Filter中的Bilinear、Trilinear以及Anistropic Filtering

    1. 为什么在纹理采样时需要texture filter(纹理过滤)?我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixel不一定对应texture ...

  6. 各项异性滤波简单介绍Anisotropic Filtering(AF)

    本文主要整理简绍来自互联网的各项异性滤波的知识. 原文链接:http://www.linuxgraphics.cn/graphics/using_anisotropic_texture_filteri ...

  7. {ICIP2014}{收录论文列表}

    This article come from HEREARS-L1: Learning Tuesday 10:30–12:30; Oral Session; Room: Leonard de Vinc ...

  8. anisotropy texture filtering

    http://www.extremetech.com/computing/51994-the-naked-truth-about-anisotropic-filtering 1. 为什么在纹理采样时需 ...

  9. 【学习笔记】Learning OpenCV3——Ch8 working with video

    Reading Video with the cv::VideoCapture Object 对象创建的三种方法: // 1. Input filename cv::VideoCapture::Vid ...

随机推荐

  1. 关于C51的中断函数要注意的几个问题

    转载自:http://blog.21ic.com/user1/531/archives/2006/16909.html 最近在虾潭逛,发现一些小虾米对C51中断函数有些不了解,今天周末,抽空发个技术帖 ...

  2. yum 使用说明

    linux如何安装yum 使用YUM来安装软件,就可以不用去到处找依赖关系的RPM了.很方便. 第一步:安装yum  第二步:下载createrepo包并安装 下载地址: ftp://195.220. ...

  3. 【HDOJ】1011 Starship Troopers

    第一道树形DP.很容易理解. #include <cstdio> #include <cstring> #include <cstdlib> #define MAX ...

  4. COJ 0036 数数happy有多少个?

    数数happy有多少个? 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 图图是个爱动脑子.观察能力很强的好学生.近期他正学英语 ...

  5. UML建模之状态图(Statechart Diagram)

     状态图目录: 一.状态图简介(Brief introduction) 二.状态图元素(State Diagram Elements) 1.状态(States) 2.转移(Transitions) 3 ...

  6. MSSQL 生成有意义的PROC

    MSSQL 生成有意义的PROC --MSSQL  用PROC 生成有意义的单号:如WP200011101 GO/****** 对象:  Table [dbo].[tbl_SequenceNum]   ...

  7. openstack neutron debugs lists

  8. java中protect属性用法总结

    测试代码: pojo类: package com.lky.h1; public class Base { private Integer id; protected String name; publ ...

  9. 预处理、const与sizeof相关面试题

    1.用预处理指令#define 声明一个常数,用以表明一年中有多少秒(忽略闰年问题) #define语法知识: (1) 不能以分号结束,括号的使用防止宏定义展开后的二义性. (2) 预处理器将为你计算 ...

  10. Eclipse设置保存时自动给变量加final

    也是针对checkstyle的,在代码检查规范时,所有的变量必须是final.为了解决这个问题,通过以下的设置可以在eclipse保存时,自动给没有加final的变量加上final. Window-& ...