工程及源代码:快速模糊.rar
     
 
 
         
 
     图像模糊算法有很多种,我们最常见的就是均值模糊,即取一定半径内的像素值之平均值作为当前点的新的像素值,在一般的工业应用中常取3*3的模板,这种小模板为了提高速度,可以直接把两层小的循环展开为表达式。但是在图像的艺术处理上,常用到比较大的半径,这时一来展开计算不现实,而来用两层循环会大大降低速度,三则半径越大,计算速度也就越慢,因此,必须寻找到一种快速实现这种效果的算法,在均值模糊这种比较特殊的情况下,用懒惰算法也许是非常有效而又简单的实现手段了。
    
     在均值模糊中,在计算前一个像素点结果的过程中,涉及到了其周围r*r个像素的累计和,而在计算下一个像素点的过程中,将会有 (r-1)*(r-1)个周围点和前一次的重合(不考虑边缘点),因此,如果我们能恰当利用这些重合的信息,则在计算的过程中就可以有效的降低计算量,并且这种特性使得模糊计算的时间和半径的关系基本不敏感了。
    
     考虑到边缘像素的一些情况,我们的计算可以分为三个阶段。
    
     第一步:计算图像最左上角的像素的结果值,并记录下记录下各颜色分量的累加和以及有效像素数。
     
For X = 0 To Rad    '循环无需从-Rad to Rad ,因为我们明确知道在-Rad到0处图像无数据
        For y = 0 To Rad   '计算左上角第一个像素的模糊化值,记录下各颜色分量和有效像素数
            pDataArrC(0) = mPtrc + mWidthBytes * y + X * 4      '指向我们需要的数句在备份数据中的地址(首地址+高度*扫描行宽度+宽度*每像素字节数)
            SumRed(0) = SumRed(0) + DataArrC(2)                '累加值
            SumGreen(0) = SumGreen(0) + DataArrC(1)
            SumBlue(0) = SumBlue(0) + DataArrC(0)
            SumNum(0) = SumNum(0) + 1                          '计数器加一
        Next
    Next
 
     第二步:  计算第一行像素除中除(0,0)点外其他像素的模糊值,这一步就要充分利用第一步的信息。
 
     这一步的代码详见工程。
   
    第三步,在计算出图像中第一行的基础上,一次计算出下面各行的模糊值,这里有一些信息的移出和移入的操作,还有边缘操作的一些事项要注意。
 
      注意,我的工程中把图像数据的起点修正为屏幕的左上角,这样做是为了和GDI的坐标系统一,在很多时候这样做都会带来方便的。
 
      在高斯模糊中,我们也可以用类似的方法对算法进行优化,这个可以参考paint.net的代码。

paper 104: 彩色图像高速模糊的懒惰算法的更多相关文章

  1. 模糊C均值算法

    Fuzzy C-Means读书笔记 一.算法简介 很显然,图中的数据集可分为两个簇.借鉴K-Means算法的思想,利用单个特殊的点(质心)表示一个簇.因此,我们用\(C_1\)和\(C_2\)分别表示 ...

  2. paper 105: 《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果及其他

    在图像去雾这个领域,几乎没有人不知道<Single Image Haze Removal Using Dark Channel Prior>这篇文章,该文是2009年CVPR最佳论文.作者 ...

  3. 《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果(速度可实时)

    最新的效果见 :http://video.sina.com.cn/v/b/124538950-1254492273.html 可处理视频的示例:视频去雾效果 在图像去雾这个领域,几乎没有人不知道< ...

  4. Single Image Haze Removal Using Dark Channel Prior

    <Single Image Haze Removal Using Dark Channel Prior>一文中图像去雾算法的原理.实现.效果及其他. Posted on 2013-08-2 ...

  5. SSE图像算法优化系列十三:超高速BoxBlur算法的实现和优化(Opencv的速度的五倍)

    在SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现) 一文中,我曾经说过优化后的ExpBlur比BoxBlur还要快,那个时候我比较的BoxBlur ...

  6. 一种可实时处理 O(1)复杂度图像去雾算法的实现。

    在我博文的一系列的文章,有不少算法都于去雾有关,比如限制对比度自适应直方图均衡化算法原理.实现及效果.局部自适应自动色阶/对比度算法在图像增强上的应用这两个增强算法都有一定的去雾能力,而最直接的就是& ...

  7. paper 100:何恺明经典去雾算法

    一:由简至美的最佳论文(作者:何恺明  视觉计算组) [视觉机器人:个人感觉学习他的经典算法固然很重要,但是他的解决问题的思路也是非常值得我们学习的] 那是2009年4月24日的早上,我收到了一封不同 ...

  8. KNN邻近分类算法

    K邻近(k-Nearest Neighbor,KNN)分类算法是最简单的机器学习算法了.它采用测量不同特征值之间的距离方法进行分类.它的思想很简单:计算一个点A与其他所有点之间的距离,取出与该点最近的 ...

  9. 【学习笔记】分类算法-k近邻算法

    k-近邻算法采用测量不同特征值之间的距离来进行分类. 优点:精度高.对异常值不敏感.无数据输入假定 缺点:计算复杂度高.空间复杂度高 使用数据范围:数值型和标称型 用例子来理解k-近邻算法 电影可以按 ...

随机推荐

  1. VS2010与水晶报表V13的打包集成小结

    感谢孟子E章提供的技术咨询. 系统配置: Windows 7 + VS2010 , WinForm + DotNet4 + 水晶报表 这里说的打包集成,指的用VS2010的制作的安装包,在安装的时候可 ...

  2. Js实现MD5加密

    在页面中引用md5.js文件,调用方法为 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8&qu ...

  3. About_MySQL Select--来自copy_03

    MySQL Select   查询分类 单表查询:简单查询 多表查询:连接查询 联合查询:多个查询结果汇总 查询的组成 投影查询:挑选要显示的字段 select array1,array2,... f ...

  4. 李洪强iOS经典面试题129

    1. 怎么解决缓存池满的问题(cell) ios中不存在缓存池满的情况,因为通常我们ios中开发,对象都是在需要的时候才会创建,有种常用的说话叫做懒加载,还有在UITableView中一般只会创建刚开 ...

  5. [LintCode] Submatrix Sum 子矩阵之和

    Given an integer matrix, find a submatrix where the sum of numbers is zero. Your code should return ...

  6. 30.编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。

    package zuoye8; public abstract class Shape { private double zhouchang ; private double mianji ; pub ...

  7. 将普通工程转为mvn标准工程(main resources)

    It is sometimes required to change the default source folder working on the java project. One best e ...

  8. ThinkPHP留后门技巧

    原文链接:https://www.leavesongs.com/PENETRATION/thinkphp-callback-backdoor.html 90sec上有人问,我说了还有小白不会用.去年我 ...

  9. 使用Fiddler截断更改Request数据

    0x01 Fiddler介绍 Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据.(百度百科) 0x ...

  10. JSON与DataTable(DataSet)相互转化

    public static string CreateJsonParameters(DataTable dt)        {            /* /******************** ...