高斯模糊实现小结Word下载.docx
- 文档编号:5820302
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:19
- 大小:441.49KB
高斯模糊实现小结Word下载.docx
《高斯模糊实现小结Word下载.docx》由会员分享,可在线阅读,更多相关《高斯模糊实现小结Word下载.docx(19页珍藏版)》请在冰点文库上搜索。
6.
static
const
gaussianTemplate[7][7]
7.
{
8.
{0.00000067,
0.00002292,
0.00019117,
0.00038771,
0.00000067},
9.
{0.00002292,
0.00078633,
0.00655965,
0.01330373,
0.00002292},
10.
{0.00019117,
0.05472157,
0.11098164,
0.00019117},
11.
{0.00038771,
0.22508352,
0.00038771},
12.
13.
14.
0.00000067}
15.
};
16.
17.
dst.create(src.size(),
src.type());
18.
uchar*
srcData
src.data;
19.
dstData
dst.data;
20.
21.
for(int
j
0;
<
src.cols-7;
j++)
22.
23.
i
src.rows-7;
i++)
24.
25.
acc
26.
accb
0,
accg
accr
27.
m
7;
m++)
28.
29.
n
n++)
30.
31.
if(src.channels()
==
1)
32.
+=
*(srcData
+
src.step
*
(i+n)
src.channels()
(j+m))
gaussianTemplate[m][n];
33.
else
34.
35.
(j+m)
0)
36.
37.
2)
38.
}
39.
40.
41.
42.
*(dstData
dst.step
(i+3)
dst.channels()
(j+3))=(int)acc;
43.
44.
45.
(j+3)
0)=(int)accb;
46.
1)=(int)accg;
47.
2)=(int)accr;
48.
49.
50.
51.
52.}
其效果如图1所示,7*7的高斯模板与源图像做卷积运算时,会产生半径为3的边缘,在不精确的图像处理中,可用源图像像素填充,或者去掉边缘。
2、二维高斯模糊函数
上述的例子中,如何求得高斯模糊矩阵是高斯模糊的关键。
根据高斯函数的性质,图像处理程序只需要计算(6σ+1)*(6σ+1)的矩阵就可以保证相关像素影响。
因此,可根据σ的值确定高斯模糊矩阵的大小。
高斯矩阵可利用公式(1-2)计算,并归一化得到。
归一化是保证高斯矩阵的值在[0,1]之间,
其处理函数如下:
1.void
GaussianSmooth2D(const
2.{
3.
!
4.
return;
//确保sigma为正数
sigma
>
0
?
:
//高斯核矩阵的大小为(6*sigma+1)*(6*sigma+1)
//ksize为奇数
int
ksize
cvRound(sigma
3)
2
1;
12.//
if(ksize
src.copyTo(dst);
//计算高斯核矩阵
*kernel
new
double[ksize*ksize];
scale
-0.5/(sigma*sigma);
PI
3.141592653;
cons
-scale/PI;
sum
ksize;
x
i-(ksize-1)/2;
y
j-(ksize-1)/2;
kernel[i*ksize
j]
exp(scale
(x*x
y*y));
kernel[i*ksize+j];
39.//
cout
"
j];
41.//
endl;
//归一化
ksize*ksize-1;
=0;
i--)
*(kernel+i)
/=
sum;
//图像卷积运算,无边缘处理
src.cols-ksize;
src.rows-ksize;
52.
53.
54.
55.
56.
57.
58.
59.
kernel[m*ksize+n];
60.
61.
62.
63.
64.
(i
(ksize
-
1)/2)
(j
-1)/2))
(int)acc;
65.
66.
67.
delete
[]kernel;
68.}
利用该函数,取σ=0.84089642即可得到上例中7*7的模板,该模板数据存在kernel中。
利用该函数计算的归一化后的3*3,5*5阶高斯模板如表2,3所示:
由上表可以看出,高斯模板是中心对称的。
模糊效果如图2所示。
对图2中边缘的处理:
1....
1.int
center
(ksize-1)
/2;
2.//图像卷积运算,处理边缘
3.for(int
src.cols;
src.rows;
-center,
c
center;
m++,
c++)
r
n++,
r++)
if((i+n)
=0
src.rows
src.cols)
kernel[r*ksize+c];
(i)
(j))
25.}
结果图为:
如上图所示,边缘明显变窄,但是存在黑边。
3、改进的高斯模糊函数
上述的二维高斯模糊函数GaussianSmooth2D达到了高斯模糊图像的目的,但是如图2所示,会因模板的关系而造成边缘图像缺失,σ越大,缺失像素越多,额外的边缘处理会增加计算量。
并且当σ变大时,高斯模板(高斯核)和卷积运算量将大幅度提高。
根据高斯函数的可分离性,可对二维高斯模糊函数进行改进。
高斯函数的可分离性是指使用二维矩阵变换得到的效果也可以通过在水平方向进行一维高斯矩阵变换加上竖直方向的一维高斯矩阵变换得到。
从计算的角度来看,这是一项有用的特性,因为这样只需要O(n*M*n)+O(m*M*N)次计算,而二维不可分的矩阵则需要O(m*n*M*n)次计算,其中,m,n为高斯矩阵的维数,M,N为二维图像的维数。
另外,两次一维的高斯卷积将消除二维高斯矩阵所产生的边缘。
改进的高斯模糊函数如下:
GaussianSmooth(const
1
//
-sigma;
ceil(sigma
//cout
ksize="
ksize<
//计算一维高斯核
double[ksize];
1/sqrt(-scale
/
PI);
kcenter
ksize/2;
for(i
kcenter;
exp(x
scale);
//一维高斯函数
*(kernel+i);
36.//
38.//
//归一化,确保高斯权值在[0,1]之间
43.//
45.//
temp;
temp.create(src.size(),
tempData
temp.data;
//x方向一维高斯模糊
y++)
x++)
mul
bmul
gmul
rmul
-kcenter;
if((x+i)
(x+i)
68.
69.
*(srcData+y*src.step+(x+i))*(*(kernel+kcenter+i));
70.
71.
72.
73.
*(srcData+y*src.step+(x+i)*src.channels()
0)*(*(kernel+kcenter+i));
74.
1)*(*(kernel+kcenter+i));
75.
2)*(*(kernel+kcenter+i));
76.
77.
(*(kernel+kcenter+i));
78.
79.
80.
81.
82.
*(tempData+y*temp.step+x)
mul/sum;
83.
84.
85.
86.
*(tempData+y*te
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模糊 实现 小结