Photoshop入门学习之PhotoShop算法实现进阶-模糊滤镜-高斯滤波
小标 2018-09-13 来源 : 阅读 1209 评论 0

摘要:本文主要向大家介绍了Photoshop入门学习之PhotoShop算法实现进阶-模糊滤镜-高斯滤波,通过具体的内容向大家展现,希望对大家Photoshop入门学习有所帮助。

本文主要向大家介绍了Photoshop入门学习之PhotoShop算法实现进阶-模糊滤镜-高斯滤波,通过具体的内容向大家展现,希望对大家Photoshop入门学习有所帮助。

高斯模糊(Gaus Blur)采用二维高斯模板对图像进行模糊处理,用于图像模糊化(去除细节和噪声),它的处理效果给人一种更佳柔和的感觉。
一维高斯:
二维高斯:
理论上,高斯分布在所有定义域上都有非负值,这就需要一个无限大的卷积核。实际上,仅需要取均值周围3倍标准差内的值,以外部份直接去掉即可。 如下图为一个标准差为1.0的整数值高斯核:



在有些场合,可以用下面的模块来对高斯核进行近似:


本文实现算法根据用户输入的核尺寸和方差来计算高斯核,实现高斯滤波,高斯核创建算法如下:

// 创建高斯核
// kSize:卷积核的大小3、5、7等(3×3、5×5、7×7)
// sigma:方差
void PhotoShop::CreateGaussKernel(float **pdKernel, int kSize, float sigma)
{
 float dDis;  //数组中一点到中心点距离 
 float dCenter = (kSize-1)/2;

 float dSum = 0;  
 float dValue;

 int i, j; 

 //生成高斯数据  
 for ( i=0; i<kSize; i++)
 {  
  for ( j=0; j<kSize; j++)
  {
   dDis = fabsf(i-dCenter) + fabsf(j-dCenter);  // 用和来近似平方和的开方
   dValue = exp(-dDis*dDis/(2*sigma*sigma+DBL_EPSILON));
   pdKernel[i][j] = dValue;  
   dSum+=dValue; 
  }
 }

 //归一化  
 for ( i=0; i<kSize; i++)
 {  
  for ( j=0; j<kSize; j++)
  {
   pdKernel[i][j] /= (dSum+DBL_EPSILON);  
  }
 }
}高斯滤波算法:


void PhotoShop::GaussianBlur(cv::Mat &img, cv::Mat &dst, int kSize, float sigma)
{
 int height = img.rows;
 int width = img.cols;
 int chns = img.channels();

 int i, j, k,p, q;

 // 分配高斯核空间
 float **pKernel = new float*[kSize];
 for ( i=0; i<kSize; i++)
 {
  pKernel[i] = new float[kSize];
  ZeroMemory(pKernel[i], kSize*sizeof(float));
 }
 CreateGaussKernel(pKernel, kSize, sigma);  // 创建高斯核

 if ( dst.empty())
  dst.create(height, width, img.type());

 float sum = 0;
 int border = (kSize-1)/2;

 for ( i =border; i<height-border; i++)
 {
  unsigned char* dstData = (unsigned char*)dst.data + dst.step*i;
  for ( j=border; j<width-border; j++)
  {
   for ( k=0; k<chns; k++)
   {
    sum = 0;   
    for ( p = -border; p<=border; p++)
    {
     for ( q = -border; q<=border; q++)
     {
      sum += getPixel(img, i+p, j+q, k)*pKernel[p+border][q+border];      
     }
    }

    dstData[j*chns+k] = saturate_cast<uchar>(sum+0.5);    
   } // for k 
  }
 } // for i
}       算法测试:




        高斯滤波由于其线性和良好的去噪效果,在很多算法中得到了广泛的应用,如Canny算子的预处理就采用了高斯滤波,OpenCV中的Sobel算子的实现也采用高斯滤波作为预处理步骤,还是闻名古今的SIFT算子采用了高斯金字塔和高斯差分来进行候选特征点的提取,有兴趣的朋友可以进一步深入了解高斯滤波的应用。    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注常用软件Photoshop频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程