工程及源代码:快速模糊.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. Red KV数据 庫设計模式

    转:http://blog.nosqlfan.com/html/3033.html NoSQL带给我们的东西很多,高性能,水平扩展性,还有不一样的思维方式.本文来自@hoterran的个人博客运维与开 ...

  2. 纪念逝去的岁月——C/C++字符串旋转

    几年前,我还不会写这个 例如: 1.向右→旋转5个字符 输入:HelloWorld 输出:WorldHello 2.向右→旋转3个字符 输入:HelloWorld 输出:rldHelloWo 代码 # ...

  3. HTTP头部解析

    当我们打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器根据HTTP请求头的内容生成当次请求的内容发送给浏览器.你明白HTTP请求头的具体含意吗?下面一条条的为你详细解读,先看 ...

  4. android-数据存储之外部file存储(sdcard)

    一.基础概要 1.说明: 1>应用程序运行用到的数据文件可以保存到sd卡中 2>文件类型:任意 3>数据保存路径: 路径1:/storage/sdcard/Android/data/ ...

  5. win10添加打印机--无法访问指定设备,路径或文件。。

    win10添加打印机无法访问指定设备,路径或文件..后来发现很多按钮点击多说无法访问指定设备,路径或文件.. 解决添加打印机问题: 在搜索栏中搜索:print (从这里添加) 彻底解决: 添加环境变量 ...

  6. border-radius

  7. Linux服务器中木马(肉鸡)手工清除方法

    由于自己也碰到过这种情况,刚好看到这篇文章,先转载过来.的确蛮有用的哦. 首先剧透一下后门木马如下: (当然这是事后平静下来后慢慢搜出来的,那个时候喝着咖啡感觉像个自由人) 木马名称 Linux.Ba ...

  8. VB鼠标指针

    vbDefault 0 (缺省值)形状由对象决定. VbArrow 1 箭头. VbCrosshair 2 十字线(crosshair 指针). VbIbeam 3 I 型 VbIconPointer ...

  9. Android课程---Oracle VM VirtualBox出现不能为虚拟机打开一个新任务

    因工作需要在Win7下增添了Win7虚拟系统,随着VirtualBox 4.326的版本更新,用户们也开始升级.一用户在升级后发现原来创建的虚拟机无法打开,提示信息为:不能为虚拟电脑win7打开一个新 ...

  10. MBR(Master Boot Record)主引导记录分析

    root@ubuntu1404:/home/chen# fdisk -l /dev/sda1 Disk /dev/sda1: MB, bytes heads, sectors/track, cylin ...