工程及源代码:快速模糊.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. jsp实现过滤器的简单例子

    web.xml配置如下: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns=&quo ...

  2. 使用Eclipse构建Maven项目 (step-by-step)

    Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包.本文仅对Eclipse中如何安装.配置和使用Maven进行了介绍.完全step by step. 如果觉得本文 ...

  3. java-常见异常

    一.运行时异常 1.空指针(java.lang.NullPointerException) 2.类型转换() 3.数组下标越界(java.lang.ArrayIndexOutOfBoundsExcep ...

  4. Hive_DDL与DML

    DDL(数据定义语言) create.drop.alter.truncate.show.describe DML(数据控制语言) load.insert.update.delete.import/ex ...

  5. 内网网段划分ciso交换机配置

    内网3750交换机配置: vlan 192 192.168.101.0/24 端口: 1--8vlan 10 10.10.10.0/24 端口: 9--16vlan 172 172.16.172.2/ ...

  6. Android-----搭建开发环境AND模拟器配置AND启动项目

    开发工具我这里用的是eclipse 你也可以用Google最新推出的Android Studio开发工具(不需要配置) 下载地址:https://developer.android.com/sdk/i ...

  7. call与apply基础用法告诉你

    Js用法中还有个极好的但是有些抽象的用法——call与apply,今天我要简单总结一下: var ob1={ //对象ob1 name:"ob1", func1:function( ...

  8. 演示一个使用db vault进行安全控制的示例

    1.确认数据库版本 2.安装db vault组件 通过DBCA配置db vault: 3.创建测试用户及表 4.创建域并加入用户 5.测试演示

  9. 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果

    package com.rui.test; import java.util.Random; /** * @author poseidon * @version 1.0 * @date:2015年10 ...

  10. Windows Server 2003修改远程桌面最大连接数的方法

    Windows Server 2003远程桌面允许的终端连接数默认情况下只有2个线程,也就是2个用户,当我们需要多人同时登录服务器的时候,就需要适当增加远程连接同时在线的用户数. 修改远程桌面最大连接 ...