实验报告_Matlab科学计算_第一次_学号_姓名
集美大学实验报告用纸
课程 MATLAB教程日期 2016 年 4 月 15 日
班级信计1313 学号 201321143064 姓名吴珊珊
实验项目Matlab编程基础及数值计算
实验目的
通过本实验,掌握Matlab的基本语法,掌握数组的输入输出,掌握脚本、
函数文件创建及使用,掌握基本的编程技巧。
实验平台Matlab2012a
实验要求完成如下功能:
1、完成一维、二维高斯滤波器的设计;
2、完成信号(一维和二维)的高斯滤波过程;
3、完成给信号加入高斯白噪声的过程;
4、自己制作一个一维信号,使用高斯白噪声对其污染(噪声程度要适中),然后
使用高斯滤波器进行滤波处理,最后比较滤波后的信号与原信号,并观察高斯滤波器的标准差σ对滤波效果的影响;
5、自己制作一个二维信号(可以使用单通道灰度图像),使用高斯白噪声对其污
染(噪声程度要适中),然后使用高斯滤波器进行滤波处理,最后比较滤波后的信号与原信号,并观察高斯滤波器的标准差σ对滤波效果的影响。
完成情况
实验成绩
实验代码及测试结果分析
一、实验代码:
1.function p =gauss_64(x,o)
p=exp(-x^2/(2*o^2))/(sqrt(2*pi)*o)%高斯函数
end
2.function [p,h]=generate_gauss_filter_64(l,o)%实现一维二维滤波器的设计p=zeros(1,l); %初始化向量p
x=-floor(l/2);%对x取整对称
for i=1:l
p(i)=gauss_64(x,o);
x=x+1;
end
p=p/sum(p); %归一化
h=kron(p,p'); %克罗内克积
end
3.function y=gauss_filter_1D_64(l,x,o)
[p,h]=generate_gauss_filter_64(l,o); %实现一维高斯滤波器的函数n=length(x); %获取一维信号的长度
y=zeros(1,n); %初始化
m=floor(l/2); %确定添加0的个数
for k=1:m %在信号前后添0
x=[0,x,0];
end
for i=1:n %求滤波后的信号
for j=1:l
y(i)=y(i)+p(j)*x(i+j-1);
end
end
4.function y=gauss_filter_2D_64(l,x,o)
[p h]=generate_gauss_filter_64(l,o); %实现二维高斯滤波器的函数[n,m]=size(x); %获取二维信号的大小
H=zeros(n+2,m+2);
H(2:n+1,2:m+1)=x(1:n,1:m);
y=zeros(n,m); %初始化
for i=1:n %滤波后的信号
for j=1:m
y(i,j)=sum(sum(H(i:i+l-1,j:j+l-1).*h));
end
end
end
5.x=[1,2,3,4,5];
p1=gauss_filter_1D_64(3,x,1)
p1=gauss_filter_1D_64(3,x,5)
p1=gauss_filter_1D_64(3,x,10)
6.clear;clc;
x=imread('huise.bmp'); %读取图片
subplot(2,2,1);imshow(x); %显示图片
x=double(x); %转换成double类型
[n,m]=size(x); %获取x信号的大小
g=wgn(n,m,0); %产生高斯白噪声,均值为0
x=x+g;
p1=uint8(gauss_filter_2D_64(3,x,1)); %对比不同的o值得滤波结果subplot(2,2,2);imshow(p1);
p2=uint8(gauss_filter_2D_64(3,x,5));
subplot(2,2,3);imshow(p2);
p3=uint8(gauss_filter_2D_64(3,x,10)); subplot(2,2,4);imshow(p3);
二.实验结果
1.一维信号不同σ的大小对滤波效果的影响
>> exer_1D
p =0.2420
p = 0.3989
p = 0.2420
p1 =1.0000 2.0000 3.0000 4.0000 3.3556 p = 0.0782
p =0.0798
p = 0.0782
p2 = 1.0000 2.0000 3.0000 4.0000 3.0134 p = 0.0397
p = 0.0399
p = 0.0397
p3 = 1.0000 2.0000 3.0000 4.0000 3.0033 2.二维信号不同σ的大小对滤波效果的影响
原图: