# 高斯滤波

1.通过调整高斯函数的标准差(sigma)来控制平滑程度；
2.滤波窗口大小取为[6*sigma-1]/2*2+1[.]表示取整；
3.利用二维高斯函数的行列可分离性进行加速；
•先对每行进行一维高斯滤波，再对结果的每列进行同样的一维高斯滤波；

clear;
tic;
P=imread('H:/数字图像处理/13_input.jpg');
%subplot(131);
imshow(P),title('原图像');
P=imnoise(P,'salt & pepper',0.02);
%subplot(132);b9g
figure;
imshow(P),title('加入高斯噪声后的图片');
P=double(P);
[nrows ncols p]=size(P);
OUT = uint8(zeros(nrows,ncols,p));%输出图像
sigma=str2double(inputdlg('请输入高斯滤波器的标准差', 'INPUT scale factor', 1, {'2.5'}));
c=floor(6*sigma-1)/2*2+1;
k=floor((c+1)/2);%计算图象中心
a=zeros(c);
sum=0;
for i=1:c
a(i)= exp(-((i-k).^2)/(2*sigma^2))/(sqrt(2*3.1415926*sigma));
sum=sum+a(i);
end
for m=1:c  %归一化
a(m)=a(m)/sum;
end

nLen=(c-1)/2;
if p==1 %处理灰度图像
%x方向滤波
for y=1:ncols
for x=1-nLen:nrows-nLen
dDotMul = 0;
dWeightSum = 0;
for i=-nLen:nLen
%判断是否在图像内部
if((i+x)>=1 && (i+x)<nrows)
dDotMul=dDotMul+(P(i+x,y) * a(nLen+i+1));
dWeightSum =dWeightSum+ a(nLen+i+1);
end
end
OUT(i+x,y) = dDotMul/dWeightSum;
end
end
%y方向滤波
for x=1:nrows
for y=1-nLen:ncols-nLen
dDotMul = 0;
dWeightSum = 0;
for i=-nLen:nLen
%判断是否在图像内部
if((i+y)>=1 && (i+y)<ncols)
dDotMul=dDotMul+(OUT(x,i+y) * a(nLen+i+1));
dWeightSum =dWeightSum+ a(nLen+i+1);
end
end
P(x,i+y) = dDotMul/dWeightSum;
end
end
OUT=P;
end

if p==3  %处理真彩色
R = P(:,:,1);
G = P(:,:,2);
B = P(:,:,3);
RR = uint8(zeros(nrows,ncols));
GG = uint8(zeros(nrows,ncols));
BB = uint8(zeros(nrows,ncols));
%x方向滤波
for y=1:ncols
for x=1-nLen:nrows-nLen
dDotMul_R = 0;
dDotMul_G = 0;
dDotMul_B = 0;
dWeightSum = 0;
for i=-nLen:nLen
%判断是否在图像内部
if((i+x)>=1 && (i+x)<=nrows)
dDotMul_R=dDotMul_R+(R(i+x,y) * a(nLen+i+1));
dDotMul_G=dDotMul_G+(G(i+x,y) * a(nLen+i+1));
dDotMul_B=dDotMul_B+(B(i+x,y) * a(nLen+i+1));
dWeightSum =dWeightSum+ a(nLen+i+1);
end
end
RR(i+x,y) = dDotMul_R/dWeightSum;
GG(i+x,y) = dDotMul_G/dWeightSum;
BB(i+x,y) = dDotMul_B/dWeightSum;
end
end
%y方向滤波
for x=1:nrows
for y=1-nLen:ncols-nLen
dDotMul_R = 0;
dDotMul_G = 0;
dDotMul_B = 0;
dWeightSum = 0;
for i=-nLen:nLen
%判断是否在图像内部
if((i+y)>=1 && (i+y)<=ncols)
dDotMul_R=dDotMul_R+(RR(x,i+y) * a(nLen+i+1));
dDotMul_G=dDotMul_G+(GG(x,i+y) * a(nLen+i+1));
dDotMul_B=dDotMul_B+(BB(x,i+y) * a(nLen+i+1));
dWeightSum =dWeightSum+ a(nLen+i+1);
end
end
R(x,i+y) = dDotMul_R/dWeightSum;
G(x,i+y) = dDotMul_G/dWeightSum;
B(x,i+y) = dDotMul_B/dWeightSum;
end
end
OUT(:,:,1) = R;
OUT(:,:,2) = G;
OUT(:,:,3) = B;
end
%subplot(133);
figure;
imshow(OUT);
title('高斯滤波去噪结果');
toc;

• 本文已收录于以下专栏：

## Qt5.7OpenCV249高斯滤波

• 2017年01月12日 14:41
• 5KB
• 下载

## 自编高斯滤波

• 2014年10月18日 08:04
• 365B
• 下载

## 3X3高斯滤波，模糊等图像处理

• 2010年01月22日 15:37
• 1.53MB
• 下载

## 高斯滤波的简介

• 2015年12月22日 16:38
• 6KB
• 下载

## 高斯滤波递归实现

• 2016年01月20日 21:33
• 530KB
• 下载

## 高斯滤波

• 2015年06月10日 17:06
• 31KB
• 下载

## OpenCV自己实现的高斯滤波，sobel边缘检测

• 2014年05月20日 11:12
• 5KB
• 下载

举报原因： 您举报文章：高斯滤波 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)