数字图像处理实验二:直方图及其均衡化小组成员:1.实验目的1.了解空域滤波增强的Matlab实现方法;2.掌握噪声模拟和图像滤波函数的使用方法;3.掌握均值滤波器、中值滤波器噪声进行滤波处理的方法;4.理解sobel算子和laplacian算子对图像增强的理解。2.实验原理1.基本原理:空间滤波:空域滤波是在图像空间借助模板进行邻域操作完成的。根据特点分:线性滤波器(常基于傅立叶变换来设计)和非线性滤波器(一般直接对邻域进行操作)。根据功能来分平滑和锐化。平滑用低通滤波器实现,平滑的目的可分为两类:(1)模糊:在提取较大目标前去除太小的细节或将目标内的小间断连接起来。(2)消除噪声锐化用高通滤波器来实现,目的是增强被模糊的细节。空间滤波器增强方法分为线性平滑(低通)滤波器、非线性平滑(低通滤波器、线性锐化(高通)滤波器、非线性锐化(高通)滤波器。空间滤波器的工作原理都可借助频域进行分析,基本特点是:让图像在傅立叶空间某个范围内的分量受抑制,而让其他分量不受影响,以改变输出图的频率分布达到增强的目的。图像平滑:图像在传输过程中,由于传输信道、采样系统质量较差,或受各种干扰的影响,而造成图像毛糙,此时,就需对图象进行平滑处理。直接在空间域上对图像进行平滑处理。该方法便于实现,计算速度快,结果也比较令人满意。均值滤波:均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个象素,构成一个滤波模板,即去掉目标象素本身)。再用模板中的全体像素的平均值来代替原来像素值。均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点,选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点,作为处理后图像在该点上的灰度值,即,为该模板中包含当前像素在内的像素总个数。中值滤波:中值滤波是一种非线性滤波,由于它在实际运算过程中并不需要图像的统计特性,所以比较方便。中值滤波首先是被应用在一维信号处理技术中,后来被二维图像信号处理技术所应用。在一定的条件下,可以克服线性滤波器所带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声最为有效。中值滤波的目的是保护图像边缘的同时去除噪声。在一维的情况下,中值滤波器是一个含有奇数个像素的窗口,在处理之后,将窗口正中的像素灰度值用窗口内各像素灰度值的中值来代替。设有一个维序列,取窗口长度为奇数,对此序列进行中值滤波,就是从输入序列中相续抽出个数,,其中为窗口的中心值,再将这个点的数值按其数值大小排列,取其序号为正中间的那个数作为滤波输出。对二维序列的中值滤波,滤波窗口也是二维的,但这种二维窗口可以有各种不同的形状,如线状、方形、圆形、十字形、圆环形等。由于中值滤波是非线性运算,在输入和输出之间的频率上不存在一一对应关系,故不能用一般线性滤波器频率特性的研究方法。设为输入信号频谱,为输出信号频谱,定义为中值滤波器的频率响应特性,呈不规则波动不大的曲线,其均值比较平坦,可以认为信号经中值滤波后,传输函数近似为,即中值滤波对信号的频域影响不大,频谱基本不变。Sobel算子:其主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值,缺点是Sobel算子并没有将图像的主题与背景严格地区分开来,换言之就是Sobel算子并没有基于图像灰度进行处理,由于Sobel算子并没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意,算法具体实现很简单,就是3*3的两个不同方向上的模板运算。4.Laplacian算子:拉普拉斯算子是一种二阶微分算子,若只考虑边缘点的位置而不考虑周围的灰度差时可用该算子进行检测。对于阶跃状边缘,其二阶导数在边缘点出现零交叉,并且边缘点两旁的像素的二阶导数异号。2.相关函数:(1)imnoise()功能:加入高斯噪声。用法:J1=imnoise(T,'gaussian',0,0.02);原始图像T中加入均值为0,方差为0.02的高斯噪声。J2=imnoise(T,'salt&pepper',0.02);;原始图像T中加入椒盐躁声。(2)medfilt2()功能:中值滤波函数。用法:medfilt2(I,[m,n])对矩阵I,用nxm的模板进行中值滤波。(3)cat()功能:用来联结数组用法:C=cat(dim,A1,A2,A3,...)按dim联结所有输入的数组。(4)median()功能:提取矩阵的中值用法:median(I),对矩阵I中的元素进行从小到大的三、实验内容1.利用matlab函数进行噪声模拟,并利用matlab函数对彩色图像进行滤波处理。(利用彩色图像效果更为明显)。代码如下:closeall;clearall;clc;T=imread('lena.jpg');subplot(3,3,1);imshow(T);title('lena原图');J1=imnoise(T,'gaussian',0,0.02);%加入均值为0,方差为0.02的高斯噪声subplot(3,3,2);imshow(J1);title('加高斯噪声后');J2=imnoise(T,'salt&pepper',0.02);%加入椒盐躁声subplot(3,3,3);imshow(J2);%%加入椒盐躁声后显示图像title('加椒盐噪声后');g1=medfilt2(J1(:,:,1));%%红g2=medfilt2(J1(:,:,2));%%绿g3=medfilt2(J1(:,:,3));%%蓝g=cat(3,g1,g2,g3);%对高斯躁声中值滤波subplot(3,3,4);imshow(g);title('高斯中值滤波');h1=medfilt2(J2(:,:,1));%%红h2=medfilt2(J2(:,:,2));%%绿h3=medfilt2(J2(:,:,3));%%蓝h=cat(3,h1,h2,h3);%对椒盐躁声中值滤波subplot(3,3,5);imshow(h);title('椒盐中值滤波');I=ones(3);%生成3*3矩阵I=I/9;%z1=conv2(J1(:,:,1),I);%%红%z2=conv2(J1(:,:,2),I);%%绿%z3=conv2(J1(:,:,3),I);%%蓝%z=cat(3,z1,z2,z3);%此处必须将double转化conv2只能处理灰度图z1=uint8(conv2(J1(:,:,1),I));%%红z2=uint8(conv2(J1(:,:,2),I));%%绿z3=uint8(conv2(J1(:,:,3),I));%%蓝z=cat(3,z1,z2,z3);subplot(3,3,6);imshow(z);title('对高斯躁声算术均值滤波');w1=uint8(conv2(J2(:,:,1),I));%%红w2=uint8(conv2(J2(:,:,2),I));%%绿w3=uint8(conv2(J2(:,:,3),I));%%蓝w=cat(3,w1,w2,w3);subplot(3,3,7);%对椒盐躁声算术均值滤波imshow(w);title('对椒盐躁声算术均值滤波');2.结果如图1.1:图1.12.1利用给定图像编程实现使用均值滤波器代码如下:clearall;closeall;clc;%%自己编程实现均值滤波器I=imread('实验三(1).tif');%I=imread('circuitboardNoise-gaussian.tif');%I=imread('circuitboardNoise-salt.tif');%读入三幅有不同噪声的图像figure,imshow(I),title('原始图像')[height,width]=size(I);%源图像点I(x,y)x1=double(I);x2=x1;%%***3*3模板***n=3;a(1:n,1:n)=1;%a即n×n模板,元素全是1forx=1:height-n+1fory=1:width-n+1c=x1(x:x+(n-1),y:y+(n-1)).*a;%取出x1中从(i,j)开始的n行n列元素与模板相乘s=sum(sum(c));%求c矩阵中各元素之和x2(x+(n-1)/2,y+(n-1)/2)=s/(n*n);%将与模板运算后的各元素的均值赋给模板中心位置的元素endendd=uint8(x2);figure,imshow(d),title('3*3模板')%%***5*5模板***n=5;a(1:n,1:n)=1;%a即n×n模板,元素全是1forx=1:height-n+1fory=1:width-n+1c=x1(x:x+(n-1),y:y+(n-1)).*a;%取出x1中从(i,j)开始的n行n列元素与模板相乘s=sum(sum(c));%求c矩阵中各元素之和x2(x+(n-1)/2,y+(n-1)/2)=s/(n*n);%将与模板运算后的各元素的均值赋给模板中心位置的元素endendd=uint8(x2);figure,imshow(d),title('5*5模板')%%***7*7模板***n=7;a(1:n,1:n)=1;%a即n×n模板,元素全是1forx=1:height-n+1fory=1:width-n+1c=x1(x:x+(n-1),y:y+(n-1)).*a;%取出x1中从(i,j)开始的n行n列元素与模板相乘s=sum(sum(c));%求c矩阵中各元素之和x2(x+(n-1)/2,y+(n-1)/2)=s/(n*n);%将与模板运算后的各元素的均值赋给模板中心位置的元素endendd=uint8(x2);figure,imshow(d),title('7*7模板')%%***9*9模板***,效果最佳n=9;a(1:n,1:n)=1;%a即n×n模板,元素全是1forx=1:height-n+1fory=1:width-n+1c=x1(x:x+(n-1),y:y+(n-1)).*a;%取出x1中从(i,j)开始的n行n列元素与模板相乘s=sum(sum(c));%求c矩阵中各元素之和x2(x+(n-1)/2,y+(n-1)/2)=s/(n*n);%将与模板运算后的各元素的均值赋给模板中心位置的元素endendd=uint8(x2);figure,imshow(d),title('9*9模板')图2.1均值滤波器对高斯噪声进行滤波其中3*3模板的效果最好2.2.利用给定图像编程实现使用中值滤波器对不同强度的高斯噪和椒盐噪声进行滤波处理。代码如下:I=imread('实验三(1).tif');原始图像3*35*57*79*9%I=imread('circuitboardNoise-gaussian.tif');%I=imread('circuitboardNoise-salt.tif');figure,imshow(I),title('原始图像')[height,width]=size(I);%掩模w(s,t),源图像点I(x,y)%%***3*3模板***%边界复制原函数J=[I(:,1:2),I,I(:,width-1:width)];J=[J(1:2,:);J;J(height-1:height,:)];forx=2:height+1fory=2:width+1C=J(x-1:x+1,y-1:y+1);B=sort(C(:));O3(x,y)=B(5);endend%***边界处理***O3=O3(2:height+1,2:width+1);figure,imshow(O3),title('3*3模板')%%***5*5模板***%边界复制原函数J=[I(:,1:4),I,I(:,width-3:width)];J=[J(1:4,:);J;J(height-3:height,:)];forx=3:hei