没怎么看过双边滤波的具体思路,动手写一写,看看能不能突破一下。

最后,感觉算法还是要分开 水平 与 垂直 方向进行分别处理,才能把速度提上去。

没耐性写下去了,发上来,给大伙做个参考好了。

先上几张效果图。

半径参数为10.

见图,磨皮降噪效果还不错。

具体代码如下:

void bilateralFilter(unsigned char* pSrc, unsigned char* pDest, int width, int height, int radius)
{
float delta = 0.1f;
float eDelta = 1.0f / (2 * delta * delta); int colorDistTable[256 * 256] = { 0 };
for (int x = 0; x < 256; x++)
{
int * colorDistTablePtr = colorDistTable + (x * 256);
for (int y = 0; y < 256; y++)
{
int mod = ((x - y) * (x - y))*(1.0f / 256.0f);
colorDistTablePtr[y] = 256 * exp(-mod * eDelta);
}
}
for (int Y = 0; Y < height; Y++)
{
int Py = Y * width;
unsigned char* LinePD = pDest + Py;
unsigned char* LinePS = pSrc + Py;
for (int X = 0; X < width; X++)
{
int sumPix = 0;
int sum = 0;
int factor = 0; for (int i = -radius; i <= radius; i++)
{
unsigned char* pLine = pSrc + ((Y + i + height) % height)* width;
int cPix = 0;
int * colorDistPtr = colorDistTable + LinePS[X] * 256;
for (int j = -radius; j <= radius; j++)
{
cPix = pLine[ (X + j+width)%width];
factor = colorDistPtr[cPix];
sum += factor;
sumPix += (factor *cPix);
}
}
LinePD[X] = (sumPix / sum);
}
}
}

 抛砖引玉一下,算法思路比较清晰。

懒得描述细节,代码很短,看代码吧。

双边滤波算法的简易实现bilateralFilter的更多相关文章

  1. o(1)复杂度之双边滤波算法的原理、流程、实现及效果。

    一.引言     双边滤波在图像处理领域中有着广泛的应用,比如去噪.去马赛克.光流估计等等,最近,比较流行的Non-Local算法也可以看成是双边滤波的一种扩展.自从Tomasi et al等人提出该 ...

  2. 快速双边滤波 附完整C代码

    很早之前写过<双边滤波算法的简易实现bilateralFilter>. 当时学习参考的代码来自cuda的样例. 相关代码可以参阅: https://github.com/johng12/c ...

  3. opencv-12-高斯滤波-双边滤波(附C++代码实现)

    开始之前 这几天由于自己的原因没有写, 一个是因为自己懒了, 一个是感觉这里遇到点问题不想往下写了, 我们先努力结束这个章节吧, 之前介绍了比较常用而且比较好理解的均值和中值滤波, 但是呢,在例程Sm ...

  4. 利用联合双边滤波或引导滤波进行升采样(Upsampling)技术提高一些耗时算法的速度。

    这十年来,在图像处理领域提出了很多新的图像分析和处理方法,包括是自动的以及一些需要有人工参与的,典型的比如stereo depth computations.image colorization.to ...

  5. cv2.bilateralFilter 双边滤波

    双边滤波bilateralFilter 双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折衷处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单.非迭代.局部处 ...

  6. opencv —— boxFilter、blur、GaussianBlur、medianBlur、bilateralFilter 线性滤波(方框滤波、均值滤波、高斯滤波)与非线性滤波(中值滤波、双边滤波)

    图像滤波,指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像与处理中不可缺少的操作. 邻域算子,指利用给定像素及其周围的像素值,决定此像素的最终输出值的一种算子.线性邻域滤波器就是一种常 ...

  7. [学习opencv]高斯、中值、均值、双边滤波

    http://www.cnblogs.com/tiandsp/archive/2013/04/20/3031862.html [学习opencv]高斯.中值.均值.双边滤波 四种经典滤波算法,在ope ...

  8. OPENCV基本滤波算法

    图像滤波的主要目的是为了在保留图像细节的情况下尽量的对图像的噪声进行消除,从而是后来的图像处理变得更加的方便. 图像的滤波效果要满足两个条件:1.不能损坏图像的轮廓和边缘这些重要的特征信息.2.图像的 ...

  9. OpenCV计算机视觉学习(4)——图像平滑处理(均值滤波,高斯滤波,中值滤波,双边滤波)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice &q ...

随机推荐

  1. 《统计学习方法》P89页IIS的中间步骤Zw+δ(X)/Zw(X)的推导

    共有两个方法:

  2. 利用jmeter进行数据库测试

    1.首先,用jmeter进行数据库测试之前,要把oracle和mysql的JDBC驱动jar包放到jmeter安装路径的lib目录下,否则会提示错误 2.添加一个线程组,如下图 3.接下来添加一个JD ...

  3. C语言第五次作业--数据类型

    7-2 区位码输入法: 1. 本题PTA提交列表: 2.设计思路: 1.simple定义输入数,character1和character2分别定义低字节和高字节区位码,digit存储取余后的数,sum ...

  4. 201621123060《JAVA程序设计》第十二周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...

  5. 【iOS】swift 74个Swift标准库函数

    本文译自 Swift Standard Library: Documented and undocumented built-in functions in the Swift standard li ...

  6. MyBatis 中使用数据库查询别名进行映射

    方法1 XXMapper.xml <mapper namespace="com.hfepc.dao.andon.AndonExceptionKanbanVOMapper" & ...

  7. php抽象类和接口的区别

    php抽象类和接口的区别 tags:抽象类 接口 抽象类和接口 php 引言:这是一个面试经常被问到的问题,也是一个经典问题.我们尽量引用官方权威的说明或者经过实验来证明本文所说的内容准确性. 抽象类 ...

  8. 构建自己的 PHP 框架

    这是一个系列的文章,项目地址在这里,欢迎大家star. 这个框架前一部分比较像Yii,后一部分比较像Laravel,因为当时正在看相应框架的源码,所以会有不少借鉴参考.捂脸- 这个框架千万不要直接应用 ...

  9. 图数据库orientDB(1-2)例子

    http://gog.orientdb.com/index.html#/infotab 小朱25岁,出生在教师家庭并且有个姐姐小田,他现在奋斗在帝都.  那么SQL是这样滴!!! CREATE VER ...

  10. Couchbase忘记登录密码怎么办

    以下都为root用户操作: 1.先关闭couchbase /opt/couchbase/etc/couchbase_init.d stop 2.切换到下面的路径,删除这个目录下除logs的所有文件,按 ...