关于局部均方差有着较为广泛的应用,在我博客的基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用使用局部标准差实现图像的局部对比度增强算法中都有谈及,即可以用于去噪也可以用来增强图像,但是直接计算其计算量较大,一般都是通过某种方式进行优化,典型的即通过积分图来处理:

展开:

  上式中两个累积一个是平方积分图,一个是累加积分图,累加积分图在SSE图像算法优化系列六:OpenCv关于灰度积分图的SSE代码学习和改进中曾经谈及,而平方积分图由于数据范围的问题,用int类型的数据来处理的话,只能处理很小很小的图,因此需要使用浮点类型,经过测试,如果使用SSE指令,由于SSE的浮点计算精度实在是低,比FPU的还要低,积分图这种累加性质的算法计算出来的结果会存在很大的误差,特别是在图像比较宽而半径比较小时,会看到明显的错误结果,半径稍微大点时,也会有明显竖条纹出现(小图像好像不会出现什么大问题),如下图所示:

           

            小半径                          大半径                     合理的结果     

  因此,如果使用积分图,考虑各种类型的图像,最好是使用double类型保存中间的积分图数据,这是个很可观的内存消耗,也会导致时间的增加。

  在SSE图像算法优化系列十三:超高速BoxBlur算法的实现和优化(Opencv的速度的五倍)一文中,我们描述了Boxblur的优化,优化后的速度即比传统的快,也占用很少的内存,我们观察下BoxBlur的累加式: 以及像素平方的累加式,他们除理数据不一样外,其他并无本质的区别的,因此也是可以使用类似于Boxblur的方式进行优化和处理的,这样上述算法就变为了2个这种累积算法的同步进行算法,并且同步进行能够减少很多重复数据的加载和处理,比单独进行两个过程其实是要更节省时间的。

  那么需要注意的时,由于是对像素的平方进行累加,还考虑使用int类型来保存列累加值以及水平方向的累加值,那么理论上讲最大的安全半径可以达到90(不会产生溢出),计算如下:

    Sqrt(Int.MaxValue / (Byte.MaxValue * Byte.MaxValue)) / 2 - 1 = Sqrt(2147483647 / 65025) / 2 - 1 = 90

  对于局部均方差相关的算法来说,90的半径已经完全满足了实际的需求。

  使用SSE优化,实际测试表面,对于3000*2000的灰度图求取均方差大约需要13ms(包括了最后的求sqrt过程的时间,是相当快的)。

  另外,局部均方差是像素领域的值减去该领域的平均值的平方累积和,这样的结果在强边缘处均方差会特别强烈,用于某法会出现边缘效应,如果我们对这个稍微改造下,使用像素领域的值减去领域的模糊值,在求累加值,会不会有什么结果呢,此时假如平均值用y表示,则需要计算这个值,同样的y就是上述的Boxblur的值,计算这个的优化方式和Boxblur又是相同的,一环套一环,当然这个时候的速度会比上面的慢一点,因此公共的计算不能重复利用了,大概需要17ms。

  更广泛的讲,还可以用上述方式计算任意两幅图像的局部平方差,速度和效率同样很高。比如计算原图和高斯模糊后的图的局部平法差,会得到什么结果呢?

  使用这种方式优化后,我以前提的磨皮算法针对1080P的图可以做到约20ms每帧,而且效果非常好,完全可以使用到视频处理中。

  参考效果下载:https://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar,见其中的Boxblur - >LeeAddtiveNoiseFilter 以及Enhance ->MakeUp和ImageInfo->Stdfilter等。

 

SSE图像算法优化系列十四:局部均方差及局部平方差算法的优化。的更多相关文章

  1. SSE图像算法优化系列十九:一种局部Gamma校正对比度增强算法及其SSE优化。

    这是一篇2010年比较古老的文章了,是在QQ群里一位群友提到的,无聊下载看了下,其实也没有啥高深的理论,抽空实现了下,虽然不高大上,还是花了点时间和心思优化了代码,既然这样,就顺便分享下优化的思路和经 ...

  2. SSE图像算法优化系列十:简单的一个肤色检测算法的SSE优化。

    在很多场合需要高效率的肤色检测代码,本人常用的一个C++版本的代码如下所示: void IM_GetRoughSkinRegion(unsigned char *Src, unsigned char ...

  3. struts2官方 中文教程 系列十四:主题Theme

    介绍 当您使用一个Struts 2标签时,例如 <s:select ..../>  在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...

  4. SSE图像算法优化系列十五:YUV/XYZ和RGB空间相互转化的极速实现(此后老板不用再担心算法转到其他空间通道的耗时了)。

    在颜色空间系列1: RGB和CIEXYZ颜色空间的转换及相关优化和颜色空间系列3: RGB和YUV颜色空间的转换及优化算法两篇文章中我们给出了两种不同的颜色空间的相互转换之间的快速算法的实现代码,但是 ...

  5. SSE图像算法优化系列十二:多尺度的图像细节提升。

    无意中浏览一篇文章,中间提到了基于多尺度的图像的细节提升算法,尝试了一下,还是有一定的效果的,结合最近一直研究的SSE优化,把算法的步骤和优化过程分享给大家. 论文的全名是DARK IMAGE ENH ...

  6. 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》

    由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...

  7. 学习ASP.NET Core Razor 编程系列十四——文件上传功能(二)

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. MP实战系列(十四)之分页使用

    MyBatis Plus的分页,有插件式的,也有其自带了,插件需要配置,说麻烦也不是特别麻烦,不过觉得现有的MyBatis Plus足以解决,就懒得配置插件了. MyBatis Plus的资料不算是太 ...

  9. SSE图像算法优化系列十六:经典USM锐化中的分支判断语句SSE实现的几种方法尝试。

    分支判断的语句一般来说是不太适合进行SSE优化的,因为他会破坏代码的并行性,但是也不是所有的都是这样的,在合适的场景中运用SSE还是能对分支预测进行一定的优化的,我们这里以某一个算法的部分代码为例进行 ...

随机推荐

  1. Ubuntu 硬盘分区只读,重新挂载为读写分区之后,文件依然创建出错

    原因: 分区只读,可能是windows没有正常关机,或者使用了混合休眠模式. 解决方案: sudo mount -o remount,rw /dev/sdaX 若重新挂载后,创建文件以及文件夹失败: ...

  2. 20165235实验四 Android程序设计

    20165235实验四 Android程序设计 实验课程:JAVA编程设计 实验名称:Android开发 姓名:祁瑛 学号:20165235 实验时间:2018.05.16 指导老师:娄家鹏 Andr ...

  3. OpenJ_Bailian 4017 爬楼梯

    时间限制: 1000 ms  空间限制: 262144 KB 题目描述 树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数.例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一 ...

  4. Activity插件化解决方案

    --摘自<android插件化开发指南> 1.宿主App加载插件中的类 2.最简单的插件化方案就是在宿主的androidmanifest.xml中申明插件中的四大组件 把插件dex合并到宿 ...

  5. HDU 2586 How far away ?(经典)(RMQ + 在线ST+ Tarjan离线) 【LCA】

    <题目链接> 题目大意:给你一棵带有边权的树,然后进行q次查询,每次查询输出指定两个节点之间的距离. 解题分析:本题有多重解决方法,首先,可用最短路轻易求解.若只用LCA解决本题,也有三种 ...

  6. 上海市2019年公务员录用考试第一轮首批面试名单(B类)

    上海市2019年公务员录用考试第一轮首批面试名单(B类) 2019-03-12 设置字体:大 中 小 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 1910565 5 ...

  7. SpringCloud Gateway入门

    本文是介绍一下SpringCloud Gateway简单路由转发使用. SpringCloud Gateway简介 SpringCloud是基于Spring Framework 5,Project R ...

  8. Redis自学笔记:1.简介

    博主教材:李子骅.人民邮电出版社.<redis入门指南> 博主操作系统系统:虚拟机Ubuntu16.04 博主redis版本:3.0.6 第1章:简介 redis是一个开源的.高性能的.基 ...

  9. sql语句(一)— —判断是否有这条数据的优化

    今天发现一个业务上的存储过程写的不够完善,和老板反应后,老板说你来完善吧,我:苦瓜脸~.说实话,我对SQL语句的熟练程度真的是不提也罢[捂脸],大概的判断流程我知道,但是真的让我自己写,还真得上网查查 ...

  10. 潭州课堂25班:Ph201805201 django框架 第十一课 保持登录,注册,登录 (课堂笔记)

    保持登录 在 django 中的内置 sessions 在项目的主目录中的配置文件 在数据库中 在视图函数中写登录 在页面登录后会出现 查看数据库内容 这样就实现保持登录 退出登录 注册: 1,创建模 ...