ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:441.49KB ,
资源ID:9999193      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9999193.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(高斯模糊实现小结.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

高斯模糊实现小结.docx

1、高斯模糊实现小结高斯模糊实现小结高斯模糊是一种图像滤波器,它使用正态分布(高斯函数)计算模糊模板,并使用该模板与原图像做卷积运算,达到模糊图像的目的。N维空间正态分布方程为:其中,是正态分布的标准差,值越大,图像越模糊(平滑)。r为模糊半径,模糊半径是指模板元素到模板中心的距离。如二维模板大小为m*n,则模板上的元素(x,y)对应的高斯计算公式为:在二维空间中,这个公式生成的曲面的等高线是从中心开始呈正态分布的同心圆。分布不为零的像素组成的卷积矩阵与原始图像做变换。每个像素的值都是周围相邻像素值的加权平均。原始像素的值有最大的高斯分布值,所以有最大的权重,相邻像素随着距离原始像素越来越远,其权

2、重也越来越小。这样进行模糊处理比其它的均衡模糊滤波器更高地保留了边缘效果。理论上来讲,图像中每点的分布都不为零,这也就是说每个像素的计算都需要包含整幅图像。在实际应用中,在计算高斯函数的离散近似时,在大概3距离之外的像素都可以看作不起作用,这些像素的计算也就可以忽略。通常,图像处理程序只需要计算(6+1)*(6+1)的矩阵就可以保证相关像素影响。1、使用给定高斯模板平滑图像函数=0.84089642的7行7列高斯模糊矩阵为:现使用该模板对源图像做模糊处理,其函数如下:cppviewplaincopy1. /高斯平滑2. /未使用sigma,边缘无处理3. voidGaussianTemplat

3、eSmooth(constMat&src,Mat&dst,doublesigma)4. 5. /高斯模板(7*7),sigma=0.84089642,归一化后得到6. staticconstdoublegaussianTemplate77=7. 8. 0.00000067,0.00002292,0.00019117,0.00038771,0.00019117,0.00002292,0.00000067,9. 0.00002292,0.00078633,0.00655965,0.01330373,0.00655965,0.00078633,0.00002292,10. 0.00019117,0.

4、00655965,0.05472157,0.11098164,0.05472157,0.00655965,0.00019117,11. 0.00038771,0.01330373,0.11098164,0.22508352,0.11098164,0.01330373,0.00038771,12. 0.00019117,0.00655965,0.05472157,0.11098164,0.05472157,0.00655965,0.00019117,13. 0.00002292,0.00078633,0.00655965,0.01330373,0.00655965,0.00078633,0.00

5、002292,14. 0.00000067,0.00002292,0.00019117,0.00038771,0.00019117,0.00002292,0.0000006715. ;16. 17. dst.create(src.size(),src.type();18. uchar*srcData=src.data;19. uchar*dstData=dst.data;20. 21. for(intj=0;jsrc.cols-7;j+)22. 23. for(inti=0;isrc.rows-7;i+)24. 25. doubleacc=0;26. doubleaccb=0,accg=0,a

6、ccr=0;27. for(intm=0;m7;m+)28. 29. for(intn=0;n0?sigma:0;8. /高斯核矩阵的大小为(6*sigma+1)*(6*sigma+1)9. /ksize为奇数10. intksize=cvRound(sigma*3)*2+1;11. 12. /dst.create(src.size(),src.type();13. if(ksize=1)14. 15. src.copyTo(dst);16. return;17. 18. 19. dst.create(src.size(),src.type();20. 21. /计算高斯核矩阵22. doub

7、le*kernel=newdoubleksize*ksize;23. 24. doublescale=-0.5/(sigma*sigma);25. constdoublePI=3.141592653;26. doublecons=-scale/PI;27. 28. doublesum=0;29. 30. for(inti=0;iksize;i+)31. 32. for(intj=0;jksize;j+)33. 34. intx=i-(ksize-1)/2;35. inty=j-(ksize-1)/2;36. kerneli*ksize+j=cons*exp(scale*(x*x+y*y);37

8、. 38. sum+=kerneli*ksize+j;39. /coutkerneli*ksize+j;40. 41. /cout=0;i-)45. 46. *(kernel+i)/=sum;47. 48. /图像卷积运算,无边缘处理49. for(intj=0;jsrc.cols-ksize;j+)50. 51. for(inti=0;isrc.rows-ksize;i+)52. 53. doubleacc=0;54. 55. for(intm=0;mksize;m+)56. 57. for(intn=0;nksize;n+)58. 59. acc+=*(srcData+src.step*(

9、i+n)+src.channels()*(j+m)*kernelm*ksize+n;60. 61. 62. 63. 64. *(dstData+dst.step*(i+(ksize-1)/2)+(j+(ksize-1)/2)=(int)acc;65. 66. 67. deletekernel;68. 利用该函数,取=0.84089642即可得到上例中7*7的模板,该模板数据存在kernel中。利用该函数计算的归一化后的3*3,5*5阶高斯模板如表2,3所示:由上表可以看出,高斯模板是中心对称的。模糊效果如图2所示。对图2中边缘的处理:cppviewplaincopy1. .cppviewpla

10、incopy1. intcenter=(ksize-1)/2;2. /图像卷积运算,处理边缘3. for(intj=0;jsrc.cols;j+)4. 5. for(inti=0;isrc.rows;i+)6. 7. doubleacc=0;8. 9. for(intm=-center,c=0;m=center;m+,c+)10. 11. for(intn=-center,r=0;n=0&(i+n)=0&(j+m)0?sigma:-sigma;8. /高斯核矩阵的大小为(6*sigma+1)*(6*sigma+1)9. /ksize为奇数10. intksize=ceil(sigma*3)*2

11、+1;11. 12. /coutksize=ksizeendl;13. /dst.create(src.size(),src.type();14. if(ksize=1)15. 16. src.copyTo(dst);17. return;18. 19. 20. /计算一维高斯核21. double*kernel=newdoubleksize;22. 23. doublescale=-0.5/(sigma*sigma);24. constdoublePI=3.141592653;25. doublecons=1/sqrt(-scale/PI);26. 27. doublesum=0;28. i

12、ntkcenter=ksize/2;29. inti=0,j=0;30. for(i=0;iksize;i+)31. 32. intx=i-kcenter;33. *(kernel+i)=cons*exp(x*x*scale);/一维高斯函数34. sum+=*(kernel+i);35. 36. /cout*(kernel+i);37. 38. /coutendl;39. /归一化,确保高斯权值在0,1之间40. for(i=0;iksize;i+)41. 42. *(kernel+i)/=sum;43. /cout*(kernel+i);44. 45. /coutendl;46. 47.

13、dst.create(src.size(),src.type();48. Mattemp;49. temp.create(src.size(),src.type();50. 51. uchar*srcData=src.data;52. uchar*dstData=dst.data;53. uchar*tempData=temp.data;54. 55. /x方向一维高斯模糊56. for(inty=0;ysrc.rows;y+)57. 58. for(intx=0;xsrc.cols;x+)59. 60. doublemul=0;61. sum=0;62. doublebmul=0,gmul=

14、0,rmul=0;63. for(i=-kcenter;i=0&(x+i)src.cols)66. 67. if(src.channels()=1)68. 69. mul+=*(srcData+y*src.step+(x+i)*(*(kernel+kcenter+i);70. 71. else72. 73. bmul+=*(srcData+y*src.step+(x+i)*src.channels()+0)*(*(kernel+kcenter+i);74. gmul+=*(srcData+y*src.step+(x+i)*src.channels()+1)*(*(kernel+kcenter+i);75. rmul+=*(srcData+y*src.step+(x+i)*src.channels()+2)*(*(kernel+kcenter+i);76. 77. sum+=(*(kernel+kcenter+i);78. 79. 80. if(src.channels()=1)81. 82. *(tempData+y*temp.step+x)=mul/sum;83. 84. else85. 86. *(tempData+y*te

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1