matlab高斯滤波器

1、使用matlab自带的函数

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;

	img = imread('lena.tif');
	w = fspecial('gaussian',[5,5],1);
	%replicate:图像大小通过赋值外边界的值来扩展
	%symmetric 图像大小通过沿自身的边界进行镜像映射扩展
	I11 = imfilter(img,w,'replicate');
	figure(1);
	imshow(img);title('原图像');
	figure(2);
	imshow(I11);title('matlab高斯滤波后的图像');

结果:可以看到帽子和头发都非常显著的平滑了


2、自己编写的高斯滤波函数

%own gaussian function 
I = imread('lena.tif');
I = double(I);%convert unit8 to double 
myimg = I;
[rows, cols] = size(I);
size = 5;
conv = zeros(size,size);%高斯核
segma = 1;
sum = 0;
center  = 3;
for i=1:size
	for j=1:size
		%%利用高斯函数计算模板的各个参数
		temp = exp ( -((i-center)*(i-center) + (j-center)*(j-center)) / 2*segma*segma );
		conv(i,j) = temp / (2*3.14*segma*segma);
		sum =sum +  conv(i,j);
	end
end
conv = conv ./ sum;
disp('kernel');
display(conv);
%use gaussian kernel to smooth image
for k=1:rows
	for m= 1:cols
	    sum =0;
		%%卷积:模板与图像对应部分相乘再累加
		for i=1:size
			for j=1:size
				if( ( (k-center+i) > 0 && (k-center+i) <= rows ) && ((m-center+j)>0 && (m-center+j)<=cols) )
					sum = sum + conv(i,j) * I(k-center+i, m-center+j);
				end
			end
		end
		%%替换掉原像素
		myimg(k,m) = sum;
	end
end
figure(3);
imshow(myimg,[]);
title('Gaussion Image');
			

结论:使用自己编写的滤波,虽然也起到了平滑效果,但是图像亮度偏高些,还不知道原因,希望大神指点指点。

  • 13
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值