博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从GIMP的Retinex算法里发现了一种高斯模糊的快速实现方法【开发记录】。
阅读量:5956 次
发布时间:2019-06-19

本文共 1730 字,大约阅读时间需要 5 分钟。

     这段时间在研究Retinex 技术,看例程代码时翻到了GIMP的源代码,结果却找到了一种简单而又快速的高斯模糊的实现方式。

     这种高斯模糊的实现同GIMP内嵌的高斯模糊算法也有所不同,并且速度上还有一定的优势,具体的代码可以参考GIMP下的contrast-retinex.c里面的代码。

     GIMP自带的高斯模糊的代码在 blur-gauss里。

     不过使用Retinex里的高斯模糊的代码会有一个小问题,就是多次模糊会发现图像像素整体向右下角或某个方向偏移,这个问题的解决很简单,有朋友遇到的时候在来问问,这里先卖个关子。

      具体的算法论文可以再百度搜索 : Recursive Implementation of the gaussian filter.

      贴一段核心代码:

View Code
static voidgausssmooth (gfloat *in, gfloat *out, gint size, gint rowstride, gauss3_coefs *c){  /*   * Papers:  "Recursive Implementation of the gaussian filter.",   *          Ian T. Young , Lucas J. Van Vliet, Signal Processing 44, Elsevier 1995.   * formula: 9a        forward filter   *          9b        backward filter   *          fig7      algorithm   */  gint i,n, bufsize;  gfloat *w1,*w2;  /* forward pass */  bufsize = size+3;  size -= 1;  w1 = (gfloat *) g_try_malloc (bufsize * sizeof (gfloat));  w2 = (gfloat *) g_try_malloc (bufsize * sizeof (gfloat));  w1[0] = in[0];  w1[1] = in[0];  w1[2] = in[0];  for ( i = 0 , n=3; i <= size ; i++, n++)    {      w1[n] = (gfloat)(c->B*in[i*rowstride] +                       ((c->b[1]*w1[n-1] +                         c->b[2]*w1[n-2] +                         c->b[3]*w1[n-3] ) / c->b[0]));    }  /* backward pass */  w2[size+1]= w1[size+3];  w2[size+2]= w1[size+3];  w2[size+3]= w1[size+3];  for (i = size, n = i; i >= 0; i--, n--)    {      w2[n]= out[i * rowstride] = (gfloat)(c->B*w1[n] +                                           ((c->b[1]*w2[n+1] +                                             c->b[2]*w2[n+2] +                                             c->b[3]*w2[n+3] ) / c->b[0]));    }  g_free (w1);  g_free (w2);}

      这段代码的优化还有很大的空间, 并且高斯模糊算法很容易并行化。 

转载于:https://www.cnblogs.com/Imageshop/archive/2013/01/07/2849782.html

你可能感兴趣的文章
php面向对象基础
查看>>
web crawling(plus1)
查看>>
CATransform3D 特效详解
查看>>
《浪潮之巅》读书笔记3
查看>>
PL/SQL Developer连接本地Oracle 11g 64位数据库
查看>>
判断手机滑动事件
查看>>
NERDTree 快捷键辑录
查看>>
Python数据分析Numpy库方法简介(一)
查看>>
javaWeb:相关监听方法汇总
查看>>
JSP 实现 之 读取数据库显示图片
查看>>
JS——特效秀
查看>>
在 Windows 上安装Rabbit MQ 指南
查看>>
【mybatis】mybatis使用java实体中定义的常量,或静态方法
查看>>
7.Git的版本退回
查看>>
第十周作业
查看>>
springboot系列(三) 启动类中关键注解作用解析
查看>>
LeetCode - Maximum Frequency Stack
查看>>
附加数据库后登陆报错
查看>>
冲刺总结
查看>>
事后诸葛亮
查看>>