数字图像处理_平均滤波与中值滤波(含MATLAB代码)
利用Matlab进行图像处理的常用方法
![利用Matlab进行图像处理的常用方法](https://img.taocdn.com/s3/m/cce8a250571252d380eb6294dd88d0d233d43c6a.png)
利用Matlab进行图像处理的常用方法概述:图像处理是数字信号处理的一个重要分支,也是计算机视觉领域的核心内容之一。
随着计算机技术的不断发展,利用Matlab进行图像处理的方法变得越来越重要。
本文将介绍一些常用的Matlab图像处理方法,包括图像的读取与显示、图像的预处理、图像的滤波处理、基本的图像增强方法以及图像的分割与检测等。
一、图像的读取与显示在Matlab中,可以使用imread函数直接读取图像。
通过指定图像的路径,我们可以将图像读取为一个矩阵,并且可以选择性地将其转换为灰度图像或彩色图像。
对于灰度图像,可以使用imshow函数将其显示出来,也可以使用imwrite函数将其保存为指定格式的图像文件。
对于彩色图像,可以使用imshow函数直接显示,也可以使用imwrite函数保存为指定格式的图像文件。
此外,还可以使用impixel函数获取图像中指定像素点的RGB值。
二、图像的预处理图像的预处理是指在进一步处理之前对图像进行调整和修复以消除图像中的噪声和不良的影响。
常用的图像预处理方法包括图像的平滑处理、图像增强和图像修复等。
1. 图像平滑处理:常用的图像平滑方法有均值滤波、中值滤波和高斯滤波等。
其中,均值滤波将每个像素点的值替换为其周围像素点的平均值,中值滤波将每个像素点的值替换为其周围像素点的中值,高斯滤波则通过加权平均的方式平滑图像。
2. 图像增强:图像增强是指通过一些方法提高图像的质量和信息内容。
常用的图像增强方法包括直方图均衡化、对比度拉伸和锐化等。
直方图均衡化通过调整图像的灰度分布,以提高图像的对比度和细节。
对比度拉伸是通过将图像的像素值线性拉伸到整个灰度范围内,以增强图像的对比度。
锐化则是通过增强图像的边缘和细节,使图像更加清晰。
三、图像的滤波处理图像的滤波处理是指通过对图像进行一系列滤波操作,来提取图像中的特征和信息。
常用的图像滤波方法包括模板滤波、频域滤波和小波变换等。
1. 模板滤波:模板滤波是基于局部像素邻域的滤波方法,通过定义一个滤波模板,将其与图像进行卷积操作,从而实现图像的滤波。
数字图像处理及matlab实现源代码【1】
![数字图像处理及matlab实现源代码【1】](https://img.taocdn.com/s3/m/e5a6aef44693daef5ef73d16.png)
% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-*%{% (一)图像文件的读/写A=imread('drum.jpg'); % 读入图像imshow(A); % 显示图像imwrite(A,'drum.jpg');info=imfinfo('drum.jpg') % 查询图像文件信息% 用colorbar函数将颜色条添加到坐标轴对象中RGB=imread('drum.jpg');I=rgb2gray(RGB); % 把RGB图像转换成灰度图像h=[1 2 1;0 0 0;-1 -2 -1];I2=filter2(h,I);imshow(I2,[]);colorbar('vert') % 将颜色条添加到坐标轴对象中% wrap函数将图像作为纹理进行映射A=imread('4.jpg');imshow(A);I=rgb2gray(RGB);[x,y,z]=sphere;warp(x,y,z,I); % 用warp函数将图像作为纹理进行映射%}% subimage函数实现一个图形窗口中显示多幅图像RGB=imread('drum.jpg');I=rgb2gray(RGB);subplot(1,2,1);subimage(RGB); % subimage函数实现一个图形窗口中显示多幅图像subplot(1,2,2),subimage(I);% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-*% (二)图像处理的基本操作% ----------------图像代数运算------------------%{% imadd函数实现两幅图像的相加或给一幅图像加上一个常数% 给图像每个像素都增加亮度I=imread('4.jpg');J=imadd(I,100); % 给图像增加亮度subplot(1,2,1),imshow(I);title('原图');subplot(1,2,2),imshow(J);title('增加亮度图');%% imsubtract函数实现将一幅图像从另一个图像中减去或减去一个常数I=imread('drum.jpg');J=imsubtract(I,100); % 给图像减去亮度subplot(1,2,1),imshow(I);%% immultiply实现两幅图像的相乘或者一幅图像的亮度缩放I=imread('drum.jpg');J=immultiply(I,2); % 进行亮度缩放subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%% imdivide函数实现两幅图像的除法或一幅图像的亮度缩放I=imread('4.jpg');J=imdivide(I,0.5); % 图像的亮度缩放subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%}% ----------------图像的空间域操作------------------%{% imresize函数实现图像的缩放J=imread('4.jpg');subplot(1,2,1),imshow(J);title('原图');X1=imresize(J,0.2); % 对图像进行缩放subplot(1,2,2),imshow(X1);title('缩放图');%% imrotate函数实现图像的旋转I=imread('drum.jpg');J=imrotate(I,50,'bilinear'); % 对图像进行旋转subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%% imcrop函数实现图像的剪切I=imread('drum.jpg');I2=imcrop(I,[1 100 130 112]); % 对图像进行剪切subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(I2);%}% ----------------特定区域处理------------------%{% roipoly函数用于选择图像中的多边形区域I=imread('4.jpg');c=[200 250 278 248 199 172];r=[21 21 75 121 121 75];BW=roipoly(I,c,r); % roipoly函数选择图像中的多边形区域subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(BW);%% roicolor函数式对RGB图像和灰度图像实现按灰度或亮度值选择区域进行处理a=imread('4.jpg');subplot(2,2,1),imshow(a);I=rgb2gray(a);BW=roicolor(I,128,225); % 按灰度值选择的区域subplot(2,2,4),imshow(BW);%% ploy2mask 函数转化指定的多边形区域为二值掩模x=[63 186 54 190 63];y=[60 60 209 204 601];bw=poly2mask(x,y,256,256); % 转化指定的多边形区域为二值掩模imshow(bw);hold onplot(x,y,'r','LineWidth',2);hold off%% roifilt2函数实现区域滤波a=imread('4.jpg');I=rgb2gray(a);c=[200 250 278 248 199 172];r=[21 21 75 121 121 75];BW=roipoly(I,c,r); % roipoly函数选择图像中的多边形区域h=fspecial('unsharp');J=roifilt2(h,I,BW); % 区域滤波subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%% roifill函数实现对特定区域进行填充a=imread('4.jpg');I=rgb2gray(a);c=[200 250 278 248 199 172];r=[21 21 75 121 121 75];J=roifill(I,c,r); % 对特定区域进行填充subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%}% ----------------图像变换------------------%{% fft2 和ifft2函数分别是计算二维的快速傅里叶变换和反变换f=zeros(100,100);subplot(1,2,1);imshow(f);f(20:70,40:60)=1;subplot(1,2,2);imshow(f);F=fft2(f); % 计算二维的快速傅里叶变换F2=log(abs(F));% 对幅值对对数figure;subplot(1,2,1),imshow(F),colorbar;subplot(1,2,2),imshow(F2),colorbar;%% fftsshift 函数实现了补零操作和改变图像显示象限f=zeros(100,100);subplot(2,2,1),imshow(f);title('f')f(10:70,40:60)=1;subplot(2,2,2),imshow(f);title('f取后')F=fft2(f,256,256);subplot(2,2,3),imshow(F);title('F')F2=fftshift(F); % 实现补零操作subplot(2,2,4),imshow(F2);title('F2')figure,imshow(log(abs(F2)));title('log(|F2|)')%% dct2 函数采用基于快速傅里叶变换的算法,用于实现较大输入矩阵的离散余弦变换% idct2 函数实现图像的二维逆离散余弦变换RGB=imread('drum.jpg');I=rgb2gray(RGB);J=dct2(I); % 对I进行离散余弦变换imshow(log(abs(J))),title('对原图离散后取对数'),colorbar;J(abs(J)<10)=0;K=idct2(J); % 图像的二维逆离散余弦变换figure,imshow(I),title('原灰度图')figure,imshow(K,[0,255]);title('逆离散变换');%% dctmtx 函数用于实现较小输入矩阵的离散余弦变figure;RGB=imread('4.jpg');I=rgb2gray(RGB);subplot(3,2,1),imshow(I),title('原灰度图');I=im2double(I);subplot(3,2,2),imshow(I),title('取双精度后');T=dctmtx(8); % 离散余弦变换subplot(3,2,3),imshow(I),title('离散余弦变换后');B=blkproc(I,[8,8],'P1*x*P2',T,T');subplot(3,2,4),imshow(B),title('blkproc作用I后的B');mask=[ 1 1 1 1 0 0 0 01 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0 ];B2=blkproc(B,[8,8],'P1.*x',mask);subplot(3,2,5),imshow(B2),title('blkproc作用B后的B2');I2=blkproc(B2,[8,8],'P1*x*P2',T',T);subplot(3,2,6),imshow(I2),title('blkproc作用B2后的I2');%% edge函数用于提取图像的边缘RGB=imread('4.jpg');I=rgb2gray(RGB);BW=edge(I);imshow(I);figure,imshow(BW);%% radon 函数用来计算指定方向上图像矩阵的投影RGB=imread('4.jpg');I=rgb2gray(RGB);BW=edge(I);theta=0:179;[R,XP]=radon(BW,theta); % 图像矩阵的投影figure,imagesc(theta,XP,R);colormap(hot);xlabel('\theta(degrees)');ylabel('x\prime');title('R_{\theta}(x\prime)');colorbar;%}% ----------------图像增强、分割和编码------------------%{% imhist 函数产生图像的直方图A=imread('4.jpg');B=rgb2gray(A);subplot(2,1,1),imshow(B);subplot(2,1,2),imhist(B);%% histeq 函数用于对图像的直方图均衡化A=imread('4.jpg');B=rgb2gray(A);subplot(2,1,1),imshow(B);subplot(2,1,2),imhist(B);C=histeq(B); % 对图像B进行均衡化figure;subplot(2,1,1),imshow(C);subplot(2,1,2),imhist(C);%% filter2 函数实现均值滤波a=imread('4.jpg');I=rgb2gray(a);subplot(2,2,1),imshow(I);K1=filter2(fspecial('average',3),I)/255; % 3*3的均值滤波K2=filter2(fspecial('average',5),I)/255; % 5*5的均值滤波K3=filter2(fspecial('average',7),I)/255; % 7*7的均值滤波subplot(2,2,2),imshow(K1);subplot(2,2,3),imshow(K2);subplot(2,2,4),imshow(K3);%% wiener2 函数实现Wiener(维纳)滤波a=imread('4.jpg');I=rgb2gray(a);subplot(2,2,1),imshow(I);K1=wiener2(I,[3,3]); % 3*3 wiener滤波K2=wiener2(I,[5,5]); % 5*5 wiener滤波K3=wiener2(I,[7,7]); % 7*7 wiener滤波subplot(2,2,2),imshow(K1);subplot(2,2,3),imshow(K2);subplot(2,2,4),imshow(K3);%% medfilt2 函数实现中值滤波a=imread('4.jpg');I=rgb2gray(a);subplot(2,2,1),imshow(I);K1=medfilt2(I,[3,3]); % 3*3 中值滤波K2=medfilt2(I,[5,5]); % 5*5 中值滤波K3=medfilt2(I,[7,7]); % 7*7 中值滤波subplot(2,2,2),imshow(K1);subplot(2,2,3),imshow(K2);subplot(2,2,4),imshow(K3);%}% ----------------图像模糊及复原------------------%{% deconvwnr 函数:使用维纳滤波器I=imread('qier.jpg');imshow(I);% 对图像进行模糊处理LEN=31;THETA=11;PSF1=fspecial('motion',LEN,THETA); % 运动模糊PSF2=fspecial('gaussian',10,5); % 高斯模糊Blurred1=imfilter(I,PSF1,'circular','conv'); % 得到运动模糊图像Blurred2=imfilter(I,PSF2,'conv'); % 得到高斯噪声模糊图像figure;subplot(1,2,1);imshow(Blurred1);title('Blurred1--"motion"'); subplot(1,2,2);imshow(Blurred2);title('Blurred2--"gaussian"');% 对模糊图像加噪声V=0.002;BlurredNoisy1=imnoise(Blurred1,'gaussian',0,V); % 加高斯噪声BlurredNoisy2=imnoise(Blurred2,'gaussian',0,V); % 加高斯噪声figure;subplot(1,2,1);imshow(BlurredNoisy1);title('BlurredNoisy1'); subplot(1,2,2);imshow(BlurredNoisy2);title('BlurredNoisy2');% 进行维纳滤波wnr1=deconvwnr(Blurred1,PSF1); % 维纳滤波wnr2=deconvwnr(Blurred2,PSF2); % 维纳滤波figure;subplot(1,2,1);imshow(wnr1);title('Restored1,True PSF'); subplot(1,2,2);imshow(wnr2);title('Restored2,True PSF');%% deconvreg函数:使用约束最小二乘滤波器I=imread('qier.jpg');imshow(I);% 对图像进行模糊处理LEN=31;THETA=11;PSF1=fspecial('motion',LEN,THETA); % 运动模糊PSF2=fspecial('gaussian',10,5); % 高斯模糊Blurred1=imfilter(I,PSF1,'circular','conv'); % 得到运动模糊图像Blurred2=imfilter(I,PSF2,'conv'); % 得到高斯噪声模糊图像figure;subplot(1,2,1);imshow(Blurred1);title('Blurred1--"motion"');subplot(1,2,2);imshow(Blurred2);title('Blurred2--"gaussian"');% 对模糊图像加噪声V=0.002;BlurredNoisy1=imnoise(Blurred1,'gaussian',0,V); % 加高斯噪声BlurredNoisy2=imnoise(Blurred2,'gaussian',0,V); % 加高斯噪声figure;subplot(1,2,1);imshow(BlurredNoisy1);title('BlurredNoisy1');subplot(1,2,2);imshow(BlurredNoisy2);title('BlurredNoisy2');NP=V*prod(size(I));reg1=deconvreg(BlurredNoisy1,PSF1,NP); % 约束最小二乘滤波reg2=deconvreg(BlurredNoisy2,PSF2,NP); % 约束最小二乘滤波figure;subplot(1,2,1);imshow(reg1);title('Restored1 with NP');subplot(1,2,2);imshow(reg2);title('Restored2 with NP');%% deconvlucy函数:使用Lucy-Richardson滤波器I=imread('qier.jpg');imshow(I);% 对图像进行模糊处理LEN=31;THETA=11;PSF1=fspecial('motion',LEN,THETA); % 运动模糊PSF2=fspecial('gaussian',10,5); % 高斯模糊Blurred1=imfilter(I,PSF1,'circular','conv'); % 得到运动模糊图像Blurred2=imfilter(I,PSF2,'conv'); % 得到高斯噪声模糊图像figure;subplot(1,2,1);imshow(Blurred1);title('Blurred1--"motion"');subplot(1,2,2);imshow(Blurred2);title('Blurred2--"gaussian"');% 对模糊图像加噪声V=0.002;BlurredNoisy1=imnoise(Blurred1,'gaussian',0,V); % 加高斯噪声BlurredNoisy2=imnoise(Blurred2,'gaussian',0,V); % 加高斯噪声figure;subplot(1,2,1);imshow(BlurredNoisy1);title('BlurredNoisy1');subplot(1,2,2);imshow(BlurredNoisy2);title('BlurredNoisy2');luc1=deconvlucy(BlurredNoisy1,PSF1,5); % 使用Lucy-Richardson滤波luc2=deconvlucy(BlurredNoisy1,PSF1,15); % 使用Lucy-Richardson滤波figure;subplot(1,2,1);imshow(luc1);title('Restored Image,NUMIT=5'); subplot(1,2,2);imshow(luc2);title('Restored Image,NUMIT=15');%}% deconvblind 函数:使用盲卷积算法a=imread('4.jpg');I=rgb2gray(a);figure;imshow(I);title('Original Image');PSF=fspecial('motion',13,45); % 运动模糊figure;imshow(PSF);Blurred=imfilter(I,PSF,'circ','conv'); % 得到运动模糊图像figure;imshow(Blurred);title('Blurred Image');INITPSF=ones(size(PSF));[J,P]=deconvblind(Blurred,INITPSF,30); % 使用盲卷积figure;imshow(J);figure;imshow(P,[],'notruesize');% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-* %{% 对图像进行减采样a=imread('lena.jpg');%subplot(1,4,1);figure;imshow(a);title('原图');b=rgb2gray(a);%subplot(1,4,2);figure;imshow(b);title('原图的灰度图');[wid,hei]=size(b);%---4倍减采样----quartimg=zeros(wid/2+1,hei/2+1);i1=1;j1=1;for i=1:2:widfor j=1:2:heiquartimg(i1,j1)=b(i,j);j1=j1+1;endi1=i1+1;j1=1;end%subplot(1,4,3);figure;imshow(uint8(quartimg));title('4倍减采样')% ---16倍减采样---quanrtimg=zeros(wid/4+1,hei/4+1);i1=1;j1=1;for i=1:4:widfor j=1:4:heiquanrtimg(i1,j1)=b(i,j);j1=j1+1;endi1=i1+1;j1=1;end%subplot(1,4,4);.figure;imshow(uint8(quanrtimg));title('16倍减采样');%}% 图像类型% 将图像转换为256级灰度图像,64级灰度图像,32级灰度图像,8级灰度图像,2级灰度图像a=imread('4.jpg');%figure;subplot(2,3,1);imshow(a);title('原图');b=rgb2gray(a); % 这是256灰度级的图像%figure;subplot(2,3,2);imshow(b);title('原图的灰度图像');[wid,hei]=size(b);img64=zeros(wid,hei);img32=zeros(wid,hei);img8=zeros(wid,hei);img2=zeros(wid,hei);for i=1:widfor j=j:heiimg64(i,j)=floor(b(i,j)/4); % 转化为64灰度级endend%figure;subplot(2,3,3);imshow(uint8(img64),[0,63]);title('64级灰度图像');for i=1:widfor j=1:heiimg32(i,j)=floor(b(i,j)/8);% 转化为32灰度级endend%figure;subplot(2,3,4);imshow(uint8(img32),[0,31]);title('32级灰度图像');for i=1:widfor j=1:heiimg8(i,j)=floor(b(i,j)/32);% 转化为8灰度级endend%figure;subplot(2,3,5);imshow(uint8(img8),[0,7]);title('8级灰度图像');for i=1:widfor j=1:heiimg2(i,j)=floor(b(i,j)/128);% 转化为2灰度级endend%figure;subplot(2,3,6);imshow(uint8(img2),[0,1]);title('2级灰度图像');% *-*--*-*-*-*-*-*-*-*-*-*-*图像处理*-*-*-*-*-*-*-*-*-*-*-* %{% ------------------ 图像的点运算------------------I=imread('lena.jpg');figure;subplot(1,3,1);imshow(I);title('原图的灰度图');J=imadjust(I,[0.3;0.6],[0.1;0.9]); % 设置灰度变换的范围subplot(1,3,2);imshow(J);title('线性扩展');I1=double(I); % 将图像转换为double类型I2=I1/255; % 归一化此图像C=2; % 非线性扩展函数的参数K=C*log(1+I2); % 对图像的对数变换subplot(1,3,3);imshow(K);title('非线性扩展');M=255-I;figure;subplot(1,3,1);imshow(M);title('灰度倒置');N1=im2bw(I,0.4); % 将此图像二值化,阈值为0.4N2=im2bw(I,0.7); % 将此图像二值化,阈值为0.7 subplot(1,3,2);imshow(N1);title('二值化阈值0.4');subplot(1,3,3);imshow(N2);title('二值化阈值0.7');%}%{% ------------------ 图像的代数运算------------------% 将两幅图像进行加法运算I=imread('lena.jpg');I=rgb2gray(I);J=imread('rice.png');% 以下把两幅图转化为大小一样for i=1:size(I)for j=size(J):size(I)J(i,j)=0;endendI=im2double(I); % 将图像转化为double型J=im2double(J);% imshow(I);figure;imshow(J);K=I+0.3*J; % 将两幅图像相加subplot(1,3,1);imshow(I);title('人物图');subplot(1,3,2);imshow(J);title('背景图');subplot(1,3,3);imshow(K);title('相加后的图');imwrite(K,'i_lena1.jpg');%%% 将两幅图像做减运算,分离背景与原图A=imread('i_lena1.jpg');B=imread('rice.png');% 以下把两幅图转化为大小一样for i=1:size(A)for j=size(B):size(A)B(i,j)=0;endendC=A-0.3*B;a=imread('lena.jpg');subplot(2,2,1);imshow(a);title('原图图');subplot(2,2,2);imshow(A);title('混合图');subplot(2,2,3);imshow(B);title('背景图');subplot(2,2,4);imshow(C);title('分离后的图');%% 设置掩模,需要保留下来的区域,掩模图像的值为1,否则为0 A=imread('drum.jpg');A=rgb2gray(A);A=im2double(A);sizeA=size(A);subplot(1,2,1);imshow(A);title('原图');B=zeros(sizeA(1),sizeA(2)); % 设置模板B(100:400,100:500)=1;K=A.*B; % 两幅图像相乘subplot(1,2,2);imshow(K);title('局部图');%}%{% ------------------ 图像的缩放------------------A=imread('drum.jpg');B1=imresize(A,1.5); % 比例放大1.5杯,默认采用的是最近邻法进行线性插值B2=imresize(A,[420 384]); % 非比例放大到420:384C1=imresize(A,0.7); % 比例缩小0.7倍C2=imresize(A,[150 180]); % 非比例缩小到150:180figure;imshow(B1);title('比例放大图');figure;imshow(B2);title('非比例放大图');figure;imshow(C1);title('比例缩小图');figure;imshow(C2);title('非比例缩小图');% 检测非比例缩放得到的图片是否能还原到原图a=size(A)d=imresize(C2,[a(1),a(2)]);figure;imshow(d);%}% ------------------ 图像的旋转------------------I=imread('drum.jpg');J=imrotate(I,45); % 图像进行逆时针旋转,默认采用最近邻插值法进行插值处理K=imrotate(I,90); % 默认旋转出界的部分不被截出subplot(1,3,1);imshow(I);subplot(1,3,2);imshow(J);subplot(1,3,3);imshow(K);% 检测旋转后的图像是否失真P=imrotate(K,270);figure;imshow(P);。
MATLAB的7种滤波方法(重制版)
![MATLAB的7种滤波方法(重制版)](https://img.taocdn.com/s3/m/e73ee79529ea81c758f5f61fb7360b4c2e3f2aab.png)
MATLAB的7种滤波方法(重制版)滤波是信号和图像处理中常用的一种方法,用于去除噪音,增强信号或图像的特征。
MATLAB提供了丰富的滤波函数和工具箱,包括7种常用的滤波方法,分别是均值滤波、中值滤波、高斯滤波、拉普拉斯滤波、Sobel滤波、Prewitt滤波和Canny边缘检测。
1.均值滤波:均值滤波是使用一个窗口对图像进行平滑处理的方法,窗口内的像素值取平均值作为输出像素值。
这种滤波方法可以有效地去除高频噪声,但会导致图像细节的模糊。
2.中值滤波:中值滤波是一种非线性滤波方法,它使用一个窗口对图像进行平滑处理,窗口内的像素值按照大小排序,然后取中值作为输出像素值。
这种滤波方法能够很好地去除椒盐噪声和脉冲噪声,但无法处理其他类型的噪声。
3.高斯滤波:高斯滤波是一种线性平滑滤波方法,它使用一个高斯函数对图像进行卷积处理,窗口内的像素值按照高斯分布加权求和作为输出像素值。
这种滤波方法能够平滑图像并保持图像的细节信息,但会导致图像的边缘模糊。
4.拉普拉斯滤波:拉普拉斯滤波是一种边缘增强滤波方法,它使用一个拉普拉斯算子对图像进行卷积处理,突出图像中的边缘信息。
这种滤波方法能够提高图像的锐度和对比度,但会增强图像中的噪声。
5. Sobel滤波:Sobel滤波是一种边缘检测滤波方法,它使用Sobel算子对图像进行卷积处理,突出图像中的边缘信息。
这种滤波方法能够检测出图像中的水平和垂直边缘,但对于斜向边缘检测效果较差。
6. Prewitt滤波:Prewitt滤波是一种边缘检测滤波方法,它使用Prewitt算子对图像进行卷积处理,突出图像中的边缘信息。
与Sobel滤波类似,Prewitt滤波也能够检测出图像中的水平和垂直边缘,但对于斜向边缘检测效果较差。
7. Canny边缘检测:Canny边缘检测是一种广泛应用的边缘检测算法,它使用多个步骤对图像进行处理,包括高斯滤波、计算梯度、非极大值抑制和双阈值处理。
这种滤波方法能够检测出图像中的所有边缘,并进行细化和连接,对于复杂的边缘检测有较好的效果。
中值滤波matlab程序代码
![中值滤波matlab程序代码](https://img.taocdn.com/s3/m/4bf5b082dd88d0d233d46a30.png)
%自适应中值滤波的算法RAMF%RAMF主要通过以下两步来处理图像。
%1.首先确定最大的滤波半径,然后用一个合适的半径r对图像进行滤波。
计算当前滤波半径像素灰度的Imin,Imax,Imed,%然后判断Imed是否在[Imin,Imax]中间,如果在则向下进行,否则扩大当前半径r继续滤波直到r等于最大滤波半径。
%2.如果当前处理的像素img(i,j)在[Imin,Imax]之间,则输出当前像素,否则输出当前滤波半径中值像素Imed。
clear all;close all;clc;img=rgb2gray(imread('132.jpg'));[m n]=size(img);img=imnoise(img,'salt & pepper',0.1); %加入椒盐噪声subplot(2,2,1),imshow(img),title('椒盐噪声图');%普通中值滤波3*3b=medfilt2(img,[3,3]);subplot(2,2,2),imshow(b),title('3*3中值滤波');c=medfilt2(img,[5,5]);subplot(2,2,3),imshow(c),title('5*5中值滤波');Nmax=10; %确定最大的滤波半径%下面是边界扩展,图像上下左右各增加Nmax像素。
imgn=zeros(m+2*Nmax+1,n+2*Nmax+1);imgn(Nmax+1:m+Nmax,Nmax+1:n+Nmax)=img;imgn(1:Nmax,Nmax+1:n+Nmax)=img(1:Nmax,1:n); %扩展上边界imgn(1:m+Nmax,n+Nmax+1:n+2*Nmax+1)=imgn(1:m+Nmax,n:n+Nmax); %扩展右边界imgn(m+Nmax+1:m+2*Nmax+1,Nmax+1:n+2*Nmax+1)=imgn(m:m+Nmax,N max+1:n+2*Nmax+1); %扩展下边界imgn(1:m+2*Nmax+1,1:Nmax)=imgn(1:m+2*Nmax+1,Nmax+1:2*Nmax); %扩展左边界re=imgn;fori=Nmax+1:m+Nmaxfor j=Nmax+1:n+Nmaxr=1; %初始滤波半径while r~=NmaxW=imgn(i-r:i+r,j-r:j+r);W=sort(W);Imin=min(W(:));Imax=max(W(:));Imed=W(uint8((2*r+1)^2/2));if Imin<Imed&&Imed<Imax %如果当前邻域中值不是噪声点,那么就用此次的邻域break;elser=r+1; %否则扩大窗口,继续判断endendif Imin<imgn(i,j) &&imgn(i,j)<Imax %如果当前这个像素不是噪声,原值输出re(i,j)=imgn(i,j);else %否则输出邻域中值re(i,j)=Imed;endendend%I=re(Nmax+1:m+Nmax,Nmax+1:n+Nmax);%subplot(2,2,4),imshow(I),title('RAMF均值滤波'); figure;imshow(re(Nmax+1:m+Nmax,Nmax+1:n+Nmax),[]);。
MATLAB图像邻域运算,去除噪声,模板运算中值滤波,均值滤波
![MATLAB图像邻域运算,去除噪声,模板运算中值滤波,均值滤波](https://img.taocdn.com/s3/m/5cd00210a300a6c30c229fc1.png)
1.列出常用的卷积模板2.基于3×3的模板,编写均值滤波的处理程序,处理含有加性高斯噪声和椒盐噪声的图像,观察处理结果3.编写中值滤波程序,处理相同的图像与均值滤波进行比较;改变模板尺寸观察处理结果4.编程实现利用一阶微分算子和二阶拉普拉斯算子进行图像锐化的程序5.对比不同的邻域运算结果,体会图像锐化与图像平滑的区别均值滤波处理含有椒盐噪声图像程序代码(1):模板运算f=imread('lena sp.bmp');f=double(f);[row,col]=size(f);r=1;for i=2:row-1for j=2:col-1g(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j)+f(i,j+1)+f (i+1,j-1)+f(i+1,j)+f(i+1,j+1))/9;g=uint8(g);endendsubplot(121);imshow(uint8(f));title('椒盐噪声图像');subplot(122);imshow(g);title('均值滤波处理后的图像')椒盐噪声图像均值滤波处理后的图像(2):mean函数均值滤波f=imread('lena sp.bmp');f=double(f);[row,col]=size(f);g=size(f);for i=2:row-1for j=2:col-1t=f(i-1:i+1,j-1:j+1);t=double(t);g(i,j)=mean(mean(t));g(i,j)=uint8(g(i,j));endendsubplot(121);imshow(uint8(f));title('椒盐噪声图像');subplot(122);imshow(uint8(g));title('均值滤波处理后的图像')均值滤波处理后的图像(3)可变模板处理f=imread('lena gauss.bmp');f=double(f);[row,col]=size(f);r=1;g=size(f);for i=2:row-1for j=2:col-1s=0;s=double(s);for m=-r:rfor n=-r:rs=s+f(i+m,j+n);endendg(i,j)=s/power((r+2),2);endendsubplot(121);imshow(uint8(f));title('椒盐噪声图像');subplot(122);imshow(uint8(g));title('均值滤波处理后的图像')椒盐噪声图像均值滤波处理后的图像均值滤波处理含有加性高斯噪声图像程序代码(1):模板运算f=imread('lena gauss.bmp');f=double(f);[row,col]=size(f);r=1;for i=2:row-1for j=2:col-1g(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j)+f(i,j+1)+f (i+1,j-1)+f(i+1,j)+f(i+1,j+1))/9;g=uint8(g);endendsubplot(121);imshow(uint8(f));title('加性高斯噪声图像');subplot(122);imshow(g);title('均值滤波处理后的图像')加性高斯噪声图像均值滤波处理后的图像(2):mean函数均值滤波f=imread('lena gauss.bmp');f=double(f);[row,col]=size(f);r=1;g=size(f);for i=2:row-1for j=2:col-1t=f(i-1:i+1,j-1:j+1);t=double(t);g(i,j)=mean(mean(t));g(i,j)=uint8(g(i,j));endendsubplot(121);imshow(uint8(f));title('加性高斯噪声图像');subplot(122);imshow(uint8(g));title('均值滤波处理后的图像')均值滤波处理后的图像(3):可变模板处理f=imread('lena gauss.bmp');f=double(f);[row,col]=size(f);r=1;g=size(f);for i=2:row-1for j=2:col-1s=0;s=double(s);for m=-r:rfor n=-r:rs=s+f(i+m,j+n);endendg(i,j)=s/power((r+2),2);endendsubplot(121);imshow(uint8(f));title('加性高斯噪声图像');subplot(122);imshow(uint8(g));title('均值滤波处理后的图像')椒盐噪声图像均值滤波处理后的图像中值滤波(椒盐噪声图像处理)f=imread('lena sp.bmp');f=double(f);[row,col]=size(f);g=size(f);r=1;for i=r+1:row-rfor j=r+1:col-rt=f(i-r:i+r,j-r:j+r);id=0;for tm=1:5m=0;for k=1:9if(m<t(k))m=t(k);id=k;endendt(id)=0;endg(i,j)=m;endendsubplot(121);imshow(uint8(f));title('原图像');subplot(122);imshow(uint8(g));title('中值滤波处理后的图像')R=1时的图像原图像中值滤波处理后的图像R=5原图像中值滤波处理后的图像中值滤波(加性高斯噪声)f=imread('lena gauss.bmp');f=double(f);[row,col]=size(f);g=size(f);r=1;for i=r+1:row-rfor j=r+1:col-rt=f(i-r:i+r,j-r:j+r);id=0;for tm=1:5m=0;for k=1:9if(m<t(k))m=t(k);id=k;endendt(id)=0;endg(i,j)=m;endendsubplot(121);imshow(uint8(f));title('原图像');subplot(122);imshow(uint8(g));title('中值滤波处理后的图像')原图像中值滤波处理后的图像R=5原图像中值滤波处理后的图像不同领域运算结果比较r=2f=imread('lena sp.bmp');f=double(f);[row,col]=size(f);r=2;g=size(f);for i=r+1:row-rfor j=r+1:col-rs=0;s=double(s);for m=-r:rfor n=-r:rs=s+f(i+m,j+n);endendg(i,j)=s/power((r+2),2);endendsubplot(121);imshow(uint8(f));title('椒盐噪声图像');subplot(122);imshow(uint8(g));title('均值滤波处理后的图像')均值滤波处理后的图像R=3椒盐噪声图像均值滤波处理后的图像R=8椒盐噪声图像均值滤波处理后的图像。
数字图像处理 matlab代码
![数字图像处理 matlab代码](https://img.taocdn.com/s3/m/75176cd128ea81c758f5789d.png)
MATLAB实用源代码图像读取及灰度变换I=imread('cameraman.tif');%读取图像subplot(1,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(1,2,2),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题图像旋转I = imread('cameraman.tif');figure,imshow(I);theta = 30;K = imrotate(I,theta); % Try varying the angle, theta. figure, imshow(K)边缘检测I = imread('cameraman.tif');J1=edge(I,'sobel');J2=edge(I,'prewitt');J3=edge(I,'log');subplot(1,4,1),imshow(I);subplot(1,4,2),imshow(J1);subplot(1,4,3),imshow(J2);subplot(1,4,4),imshow(J3);1.图像反转MATLAB 程序实现如下:I=imread('xian.bmp');J=double(I);J=-J+(256-1); %图像反转线性变换H=uint8(J);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(H);2.灰度线性变换MATLAB 程序实现如下:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on; %显示坐标系I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title('灰度图像');axis([50,250,50,200]);axis on; %显示坐标系J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1] subplot(2,2,3),imshow(J);title('线性变换图像[0.1 0.5]');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1] subplot(2,2,4),imshow(K);title('线性变换图像[0.3 0.7]');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系3.非线性变换MATLAB 程序实现如下:I=imread('xian.bmp');I1=rgb2gray(I);subplot(1,2,1),imshow(I1);title(' 灰度图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系J=double(I1);J=40*(log(J+1));H=uint8(J);subplot(1,2,2),imshow(H);title(' 对数变换图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系4.直方图均衡化MATLAB 程序实现如下:I=imread('xian.bmp');I=rgb2gray(I);figure;subplot(2,2,1);imshow(I);subplot(2,2,2);imhist(I);I1=histeq(I);figure;subplot(2,2,1);imshow(I1);subplot(2,2,2);imhist(I1);5. 线性平滑滤波器用MA TLAB实现领域平均法抑制噪声程序:I=imread('xian.bmp');subplot(231)imshow(I)title('原始图像')I=rgb2gray(I);I1=imnoise(I,'salt & pepper',0.02);subplot(232)imshow(I1)title(' 添加椒盐噪声的图像')k1=filter2(fspecial('average',3),I1)/255; %进行3*3模板平滑滤波k2=filter2(fspecial('average',5),I1)/255; %进行5*5模板平滑滤波k3=filter2(fspecial('average',7),I1)/255; %进行7*7模板平滑滤波k4=filter2(fspecial('average',9),I1)/255; %进行9*9模板平滑滤波subplot(233),imshow(k1);title('3*3 模板平滑滤波');subplot(234),imshow(k2);title('5*5 模板平滑滤波');subplot(235),imshow(k3);title('7*7 模板平滑滤波');subplot(236),imshow(k4);title('9*9 模板平滑滤波');6.中值滤波器用MA TLAB实现中值滤波程序如下:I=imread('xian.bmp');I=rgb2gray(I);J=imnoise(I,'salt&pepper',0.02);subplot(231),imshow(I);title('原图像');subplot(232),imshow(J);title('添加椒盐噪声图像');k1=medfilt2(J); %进行3*3模板中值滤波k2=medfilt2(J,[5,5]); %进行5*5模板中值滤波k3=medfilt2(J,[7,7]); %进行7*7模板中值滤波k4=medfilt2(J,[9,9]); %进行9*9模板中值滤波subplot(233),imshow(k1);title('3*3模板中值滤波');subplot(234),imshow(k2);title('5*5模板中值滤波');subplot(235),imshow(k3);title('7*7模板中值滤波');subplot(236),imshow(k4);title('9*9 模板中值滤波');7.用Sobel算子和拉普拉斯对图像锐化:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I1=im2bw(I);subplot(2,2,2),imshow(I1);title('二值图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系H=fspecial('sobel'); %选择sobel算子J=filter2(H,I1); %卷积运算subplot(2,2,3),imshow(J);title('sobel算子锐化图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系h=[0 1 0,1 -4 1,0 1 0]; %拉普拉斯算子J1=conv2(I1,h,'same'); %卷积运算subplot(2,2,4),imshow(J1);title('拉普拉斯算子锐化图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系8.梯度算子检测边缘用MA TLAB实现如下:I=imread('xian.bmp');subplot(2,3,1);imshow(I);title('原始图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I1=im2bw(I);subplot(2,3,2);imshow(I1);title('二值图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I2=edge(I1,'roberts');figure;subplot(2,3,3);imshow(I2);title('roberts算子分割结果');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I3=edge(I1,'sobel');subplot(2,3,4);imshow(I3);title('sobel算子分割结果');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I4=edge(I1,'Prewitt');subplot(2,3,5);imshow(I4);title('Prewitt算子分割结果');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系9.LOG算子检测边缘用MA TLAB程序实现如下:I=imread('xian.bmp');subplot(2,2,1);imshow(I);title('原始图像');I1=rgb2gray(I);subplot(2,2,2);imshow(I1);title('灰度图像');I2=edge(I1,'log');subplot(2,2,3);imshow(I2);title('log算子分割结果');10.Canny算子检测边缘用MA TLAB程序实现如下:I=imread('xian.bmp');subplot(2,2,1);imshow(I);title('原始图像')I1=rgb2gray(I);subplot(2,2,2);imshow(I1);title('灰度图像');I2=edge(I1,'canny');subplot(2,2,3);imshow(I2);title('canny算子分割结果');11.边界跟踪(bwtraceboundary函数)clcclear allI=imread('xian.bmp');figureimshow(I);title('原始图像');I1=rgb2gray(I); %将彩色图像转化灰度图像threshold=graythresh(I1); %计算将灰度图像转化为二值图像所需的门限BW=im2bw(I1, threshold); %将灰度图像转化为二值图像figureimshow(BW);title('二值图像');dim=size(BW);col=round(dim(2)/2)-90; %计算起始点列坐标row=find(BW(:,col),1); %计算起始点行坐标connectivity=8;num_points=180;contour=bwtraceboundary(BW,[row,col],'N',connectivity,num_points);%提取边界figureimshow(I1);hold on;plot(contour(:,2),contour(:,1), 'g','LineWidth' ,2);title('边界跟踪图像');12.Hough变换I= imread('xian.bmp');rotI=rgb2gray(I);subplot(2,2,1);imshow(rotI);title('灰度图像');axis([50,250,50,200]);grid on;axis on;BW=edge(rotI,'prewitt');subplot(2,2,2);imshow(BW);title('prewitt算子边缘检测后图像');axis([50,250,50,200]);grid on;axis on;[H,T,R]=hough(BW);subplot(2,2,3);imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');title('霍夫变换图');xlabel('\theta'),ylabel('\rho');axis on , axis normal, hold on;P=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));x=T(P(:,2));y=R(P(:,1));plot(x,y,'s','color','white');lines=houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);subplot(2,2,4);,imshow(rotI);title('霍夫变换图像检测');axis([50,250,50,200]);grid on;axis on;hold on;max_len=0;for k=1:length(lines)xy=[lines(k).point1;lines(k).point2];plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');len=norm(lines(k).point1-lines(k).point2);if(len>max_len)max_len=len;xy_long=xy;endendplot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');13.直方图阈值法用MA TLAB实现直方图阈值法:I=imread('xian.bmp');I1=rgb2gray(I);figure;subplot(2,2,1);imshow(I1);title(' 灰度图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系[m,n]=size(I1); %测量图像尺寸参数GP=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255GP(k+1)=length(find(I1==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置endsubplot(2,2,2),bar(0:255,GP,'g') %绘制直方图title('灰度直方图')xlabel('灰度值')ylabel(' 出现概率')I2=im2bw(I,150/255);subplot(2,2,3),imshow(I2);title('阈值150的分割图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I3=im2bw(I,200/255); %subplot(2,2,4),imshow(I3);title('阈值200的分割图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系14. 自动阈值法:Otsu法用MA TLAB实现Otsu算法:clcclear allI=imread('xian.bmp');subplot(1,2,1),imshow(I);title('原始图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系level=graythresh(I); %确定灰度阈值BW=im2bw(I,level);subplot(1,2,2),imshow(BW);title('Otsu 法阈值分割图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系15.膨胀操作I=imread('xian.bmp'); %载入图像I1=rgb2gray(I);subplot(1,2,1);imshow(I1);title('灰度图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系se=strel('disk',1); %生成圆形结构元素I2=imdilate(I1,se); %用生成的结构元素对图像进行膨胀subplot(1,2,2);imshow(I2);title(' 膨胀后图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系16.腐蚀操作MATLAB 实现腐蚀操作I=imread('xian.bmp'); %载入图像I1=rgb2gray(I);subplot(1,2,1);imshow(I1);title('灰度图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系se=strel('disk',1); %生成圆形结构元素I2=imerode(I1,se); %用生成的结构元素对图像进行腐蚀subplot(1,2,2);imshow(I2);title('腐蚀后图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系17.开启和闭合操作用MA TLAB实现开启和闭合操作I=imread('xian.bmp'); %载入图像subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on; %显示坐标系I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title('灰度图像');axis([50,250,50,200]);axis on; %显示坐标系se=strel('disk',1); %采用半径为1的圆作为结构元素I2=imopen(I1,se); %开启操作I3=imclose(I1,se); %闭合操作subplot(2,2,3),imshow(I2);title('开启运算后图像');axis([50,250,50,200]);axis on; %显示坐标系subplot(2,2,4),imshow(I3);title('闭合运算后图像');axis([50,250,50,200]);axis on; %显示坐标系18.开启和闭合组合操作I=imread('xian.bmp'); %载入图像subplot(3,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on; %显示坐标系I1=rgb2gray(I);subplot(3,2,2),imshow(I1);title('灰度图像');axis([50,250,50,200]);axis on; %显示坐标系se=strel('disk',1);I2=imopen(I1,se); %开启操作I3=imclose(I1,se); %闭合操作subplot(3,2,3),imshow(I2);title('开启运算后图像');axis([50,250,50,200]);axis on; %显示坐标系subplot(3,2,4),imshow(I3);title('闭合运算后图像');axis([50,250,50,200]);axis on; %显示坐标系se=strel('disk',1);I4=imopen(I1,se);I5=imclose(I4,se);subplot(3,2,5),imshow(I5); %开—闭运算图像title('开—闭运算图像');axis([50,250,50,200]);axis on; %显示坐标系I6=imclose(I1,se);I7=imopen(I6,se);subplot(3,2,6),imshow(I7); %闭—开运算图像title('闭—开运算图像');axis([50,250,50,200]);axis on; %显示坐标系19.形态学边界提取利用MATLAB实现如下:I=imread('xian.bmp'); %载入图像subplot(1,3,1),imshow(I);title('原始图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I1=im2bw(I);subplot(1,3,2),imshow(I1);title('二值化图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I2=bwperim(I1); %获取区域的周长subplot(1,3,3),imshow(I2);title('边界周长的二值图像');axis([50,250,50,200]);grid on;axis on;20.形态学骨架提取利用MATLAB实现如下:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on;I1=im2bw(I);subplot(2,2,2),imshow(I1);title('二值图像');axis([50,250,50,200]);axis on;I2=bwmorph(I1,'skel',1);subplot(2,2,3),imshow(I2);title('1次骨架提取');axis([50,250,50,200]);axis on;I3=bwmorph(I1,'skel',2);subplot(2,2,4),imshow(I3);title('2次骨架提取');axis([50,250,50,200]);axis on;21.直接提取四个顶点坐标I = imread('xian.bmp');I = I(:,:,1);BW=im2bw(I);figureimshow(~BW)[x,y]=getpts。
Matlab中的空间滤波方法详解
![Matlab中的空间滤波方法详解](https://img.taocdn.com/s3/m/676e55d60875f46527d3240c844769eae109a367.png)
Matlab中的空间滤波方法详解在图像处理和计算机视觉领域,空间滤波是一种常用的技术。
它通过在图像的空间域上操作像素的灰度值,来改变图像的特性和质量。
Matlab提供了丰富的空间滤波函数和工具,可以方便地对图像进行处理和分析。
本文将详细介绍Matlab中各种常见的空间滤波方法,并讨论它们的优缺点和适用场景。
1. 均值滤波均值滤波是最简单的空间滤波方法之一。
它通过对图像中每个像素周围邻域的像素值取平均来平滑图像。
在Matlab中,可以使用函数`imfilter`来实现均值滤波。
具体的操作可以使用邻域平均值的方式,也可以使用邻域中位数的方式,分别对应`filt2`和`medfilt2`函数。
均值滤波的优点在于简单易用,能够有效地减小图像中的噪声。
然而,它也存在一些缺点。
均值滤波会导致图像失去细节,并且对边缘和纹理的保护能力较弱。
2. 中值滤波中值滤波是一种非线性的空间滤波方法。
它通过对邻域中像素值的排序,并取中间值来平滑图像。
在Matlab中,使用`medfilt2`函数可以轻松实现中值滤波。
中值滤波的主要优点是能够有效地去除椒盐噪声等脉冲噪声。
相比于均值滤波,中值滤波能够在去除噪声的同时保留图像的边缘和细节信息。
然而,中值滤波不适用于其他类型的噪声,比如高斯噪声。
3. 高斯滤波高斯滤波是一种基于高斯函数的线性空间滤波方法。
它通过对图像中每个像素周围邻域的像素值进行加权平均来平滑图像。
在Matlab中,可以使用`imgaussfilt`函数来实现高斯滤波。
高斯滤波的主要优点在于能够平滑图像的同时保留边缘和细节信息。
由于高斯函数的特殊性,高斯滤波具有良好的频域性质,可以在频域中对图像进行快速操作。
然而,高斯滤波也存在一些缺点,比如处理时间较长,并且对于一些特定类型的噪声效果不佳。
4. 锐化滤波锐化滤波是一种用于增强图像细节和边缘的空间滤波方法。
它通过高频增强的方式来增强图像的边缘和细节信息。
在Matlab中,可以使用`imsharpen`函数来实现锐化滤波。
中值和均值滤波论文(附代码)
![中值和均值滤波论文(附代码)](https://img.taocdn.com/s3/m/d9720d6add3383c4bb4cd2d0.png)
Zi fiv fiv1 fi fiv m
iZ
(2.2)
对于二维序列 X 进行中值滤波时,滤波窗口也是二维的,但这种二维窗 ij
口可以有各种不同的形状,如线状、方形、圆形、十字形、圆环形等。二维数
据的中值滤波可以表示为:
Yi, j
Me A
d
{X
i
j
},
A为滤波窗口
(2.3)
在实际使用窗口时,窗口的尺寸一般先用3 3再取5 5 逐渐增大,直到其
2. 中值滤波
中值滤波是一种典型的低通滤波器,属于非线性滤波技术,它的目的是保护 图像边缘的同时去除噪声。所谓中值滤波,是指把以某点(x,y)为中心的小窗 口内的所有象素的灰度按从大到小的顺序排列,若窗口中的象素为奇数个,则将 中间值作为(x,y)处的灰度值。若窗口中的象素为偶数个,则取两个中间值的 平均值作为(x,y)处的灰度值。中值滤波对去除椒盐噪声很有效。中值滤波器 的缺点是对所有象素点采用一致的处理,在滤除噪声的同时有可能改变真正象 素点的值,引入误差,损坏图像的边缘和细节。该算法对高斯噪声和均匀分布 噪声就束手无策。
滤波效果满意为止。对于有缓变的较长轮廓线物体的图像,采用方形或圆形窗
口为宜,对于包含尖顶角物体的图像,适宜用十字形窗口。使用二维中值滤波
最值得注意的是保持图像中有效的细线状物体。与平均滤波器相比,中值滤波
器从总体上来说,能够较好地保留原图像中的跃变部分。
3. 均值滤波
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板, 该模板包括了其周围的临近像素(以目标象素为中心的周围 8 个象素,构成一 个滤波模板,即去掉目标象素本身)。
for j = 1:q PI(i+m,j+m) = I(i,j);
MATLAB技术图像滤波应用
![MATLAB技术图像滤波应用](https://img.taocdn.com/s3/m/cba4c13abfd5b9f3f90f76c66137ee06eff94ea9.png)
MATLAB技术图像滤波应用引言:图像是我们生活中不可或缺的一部分,我们通过图像感知世界,处理图像可以帮助我们更好地理解和分析数据。
而图像滤波是图像处理的重要技术之一,可以去除图像中的噪声,增强图像的特征,提高图像质量。
在本文中,我将介绍MATLAB技术中常用的图像滤波方法及其应用。
一、均值滤波均值滤波是图像处理中最简单的滤波技术之一,其原理是将图像中的每个像素点和周围像素点的灰度值进行求平均操作,从而达到去除噪声的效果。
在MATLAB中,可以使用`imfilter`函数实现均值滤波。
例如,我们可以通过下面的代码对一张图像进行均值滤波:```img = imread('image.jpg');filtered_img = imfilter(img, fspecial('average'));imshow(filtered_img);```二、中值滤波中值滤波是一种非线性滤波技术,它通过对每个像素点周围的像素值进行排序,然后选择中间值作为滤波结果。
这种方法对于椒盐噪声等脉冲噪声有很好的去噪效果。
在MATLAB中,可以使用`medfilt2`函数实现中值滤波。
下面的代码展示了如何在MATLAB中应用中值滤波:```img = imread('image.jpg');filtered_img = medfilt2(img);imshow(filtered_img);```三、高斯滤波高斯滤波是一种线性平滑滤波技术,它通过对每个像素点周围的像素值进行加权平均,从而达到去噪的效果。
高斯滤波的特点是对周围像素的影响权重随距离增大而减小,这样可以保留图像的边缘信息。
在MATLAB中,可以使用`imfilter`函数结合`fspecial`函数创建高斯滤波器并进行滤波。
下面的代码展示了如何在MATLAB中应用高斯滤波:```img = imread('image.jpg');filtered_img = imfilter(img, fspecial('gaussian', [3, 3], 0.5));imshow(filtered_img);```四、双边滤波双边滤波是一种非线性滤波技术,它可以保留图像的边缘特征,并对图像进行平滑处理。
matlab均值滤波代码
![matlab均值滤波代码](https://img.taocdn.com/s3/m/2f6222f3d4bbfd0a79563c1ec5da50e2524dd184.png)
matlab均值滤波代码Matlab均值滤波代码是一种常用的图像处理技术,它可以有效地去除图像中的噪声,使图像更加清晰。
均值滤波是一种线性滤波方法,它通过对图像中每个像素周围的像素进行平均来消除噪声。
Matlab均值滤波代码的实现非常简单,只需要使用Matlab中的imfilter函数即可。
该函数可以对图像进行各种滤波操作,包括均值滤波、中值滤波、高斯滤波等。
下面是一个简单的Matlab均值滤波代码示例:```matlab% 读取图像img = imread('lena.jpg');% 定义滤波器大小filter_size = 3;% 定义均值滤波器filter = ones(filter_size) / filter_size^2;% 进行均值滤波img_filtered = imfilter(img, filter);% 显示原图和滤波后的图像subplot(1, 2, 1);imshow(img);title('原图');subplot(1, 2, 2);imshow(img_filtered);title('均值滤波后的图像');```在上面的代码中,我们首先读取了一张图像,然后定义了一个3x3的均值滤波器。
接着,我们使用imfilter函数对图像进行均值滤波,并将滤波后的图像显示出来。
需要注意的是,均值滤波器的大小越大,滤波效果越好,但是也会导致图像失去细节。
因此,在实际应用中,需要根据具体情况选择合适的滤波器大小。
Matlab均值滤波代码是一种非常实用的图像处理技术,它可以有效地去除图像中的噪声,使图像更加清晰。
在实际应用中,我们可以根据具体情况选择不同的滤波器大小和类型,以达到最佳的滤波效果。
matlab数字图像处理源代码
![matlab数字图像处理源代码](https://img.taocdn.com/s3/m/c6f69cdb6f1aff00bed51ee0.png)
数字图像去噪典型算法及matlab实现希望得到大家的指点和帮助图像去噪是数字图像处理中的重要环节和步骤。
去噪效果的好坏直接影响到后续的图像处理工作如图像分割、边缘检测等。
图像信号在产生、传输过程中都可能会受到噪声的污染,一般数字图像系统中的常见噪声主要有:高斯噪声(主要由阻性元器件内部产生)、椒盐噪声(主要是图像切割引起的黑图像上的白点噪声或光电转换过程中产生的泊松噪声)等;目前比较经典的图像去噪算法主要有以下三种:均值滤波算法:也称线性滤波,主要思想为邻域平均法,即用几个像素灰度的平均值来代替每个像素的灰度。
有效抑制加性噪声,但容易引起图像模糊,可以对其进行改进,主要避开对景物边缘的平滑处理。
中值滤波:基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。
中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序,取其中间值作为中心像素灰度的新值,这里领域被称为窗口,当窗口移动时,利用中值滤波可以对图像进行平滑处理。
其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。
很容易自适应化。
Wiener维纳滤波:使原始图像和其恢复图像之间的均方误差最小的复原方法,是一种自适应滤波器,根据局部方差来调整滤波器效果。
对于去除高斯噪声效果明显。
实验一:均值滤波对高斯噪声的效果I=imread('C:\Documents and Settings\Administrator\桌面\1.gif');%读取图像J=imnoise(I,'gaussian',0,0.005);%加入均值为0,方差为0.005的高斯噪声subplot(2,3,1);imshow(I);title('原始图像');subplot(2,3,2); imshow(J);title('加入高斯噪声之后的图像');%采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波K1=filter2(fspecial('average',3),J)/255; %模板尺寸为3K2=filter2(fspecial('average',5),J)/255;% 模板尺寸为5K3=filter2(fspecial('average',7),J)/255; %模板尺寸为7K4= filter2(fspecial('average',9),J)/255; %模板尺寸为9subplot(2,3,3);imshow(K1);title('改进后的图像1');subplot(2,3,4); imshow(K2);title('改进后的图像2');subplot(2,3,5);imshow(K3);title('改进后的图像3');subplot(2,3,6);imshow(K4);title('改进后的图像4');PS:filter2用法:filter2用法fspecial函数用于创建预定义的滤波算子,其语法格式为:h = fspecial(type)h = fspecial(type,parameters)参数type制定算子类型,parameters指定相应的参数,具体格式为:type='average',为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为[3,3]。
Matlab图像处理(四)——常用滤波的实现
![Matlab图像处理(四)——常用滤波的实现](https://img.taocdn.com/s3/m/c2eac21ce3bd960590c69ec3d5bbfd0a7956d569.png)
Matlab图像处理(四)——常用滤波的实现前面一讲我们已经讲解了滤波的原理和公式,为了让小伙伴更加熟悉基本原理,本将中我们采用了自编写滤波函数和Matlab自带的函数两种方式来实现中值滤波、均值滤波和高斯滤波。
小伙伴可以通过点击文末“阅读原文”直接获取本文所用程序。
准备工作在进行滤波之前需要进行一些准备操作,也就是需要找含有噪声的图片。
对了突出效果、方便比较,小白用程序生成了椒盐和高斯两种噪声。
1clear all2A=imread('origin.jpg');3A=rgb2gray(A);4B=imread('xiaobai.jpg');5A_gaussian = imnoise(A,'gaussian',0,39*39/(255*255));%加入噪声函数,通过后面关键字来选取加入噪声的类型,后面两个数是高斯噪声的均值和σ6A_salt_pepper=imnoise(A,'salt & pepper',0.05); %加入噪声函数,加入椒盐噪声,后面的参数是椒盐噪声的密度上面代码已经给出了注释,部分函数由于在前几讲中已经出现,所以没有再次叙述。
生成的两张含有噪声的图片如下:高斯噪声椒盐噪声自编均值滤波实现在自己写函数实现均值滤波的时,主要分为4个步骤:生成滤波模板、延拓被滤波图像、像素位置遍历滤波、裁剪滤波后图像。
通过程序来进一步了解该过程。
1 n=5; %滤波模板大小2 [height, width]=size(A_salt_pepper); %输入图像是p×q的,且p>n,q>n3A_salt_pepper2=zeros(height+n-1,width+n-1);%存放延拓后的图片4for i=1+(n-1)/2:1+(n-1)/2+height-15for j=1+(n-1)/2:1+(n-1)/2+width-16 A_salt_pepper2(i,j)=A_salt_pepper(i-(n-1)/2,j-(n-1)/2);7end8end9A_salt_pepper3=A_salt_pepper2; %灰度值更改后会对后续的滤波产生影响,因此需要一个不变的图片10a(1:n,1:n)=1;11for i=1:height12for j=1:width13 c=A_salt_pepper3(i:i+(n-1),j:j+(n-1)).*a; %取出x1中从(i,j)开始的n行n列元素与模板相乘14 s=sum(sum(c)); %求c矩阵中各元素之和15 A_salt_pepper2(i+(n-1)/2,j+(n-1)/2)=s/(n*n); %将与模板运算后的各元素的均值赋给模板中心位置的元素16end17end18A_salt_pepper2=uint8(A_salt_pepper2((n-1)/2+1:height+(n-1)/2,(n-1)/2+1:width+(n-1)/2));%通过计算,此处只是一个矩阵,用uint8将矩阵变成图像19imshow(A_salt_pepper2);20title('自己编写均值滤波图')代码中同样有比较详细的注释,这里就不在重复。
matlab 数据滤波处理
![matlab 数据滤波处理](https://img.taocdn.com/s3/m/b88d56f264ce0508763231126edb6f1afe007168.png)
matlab数据滤波处理在MATLAB中,数据滤波可以使用不同的方法和函数来实现。
下面是几种常见的数据滤波处理方法:1.移动平均滤波(Moving Average Filter):移动平均滤波是一种简单的滤波方法,通过计算数据序列中相邻数据点的平均值来平滑数据。
可以使用smoothdata函数实现移动平均滤波。
示例:创建示例数据data=randn(1,100);100个随机数应用移动平均滤波smoothed_data=smoothdata(data,'movmean',5);使用移动窗口大小为5的移动平均2.中值滤波(Median Filter):中值滤波是一种非线性滤波方法,将每个数据点替换为相邻数据点的中值。
可以使用medfilt1函数进行中值滤波处理。
示例:创建示例数据data=randn(1,100);100个随机数应用中值滤波smoothed_data=medfilt1(data,5);使用窗口大小为5的中值滤波3.低通滤波器(Low-pass Filter):低通滤波器可以滤除高频噪声,保留信号的低频成分。
MATLAB中可以使用filter函数设计和应用数字低通滤波器。
示例:创建示例数据data=randn(1,100);100个随机数设计低通滤波器fc=0.1;截止频率fs=1;采样频率[b,a]=butter(5,fc/(fs/2));设计5阶巴特沃斯低通滤波器应用低通滤波器smoothed_data=filter(b,a,data);以上示例中的滤波方法和参数可以根据数据的特性和需求进行调整。
使用不同的滤波方法可能需要更多的参数调整和信号处理知识。
根据具体情况,可以选择合适的滤波方法来平滑或处理数据。
中值滤波matlab代码
![中值滤波matlab代码](https://img.taocdn.com/s3/m/11de11a4690203d8ce2f0066f5335a8102d26637.png)
中值滤波matlab代码
中值滤波是一种常用的数字图像处理方法,可以有效地消除噪声并平滑图像。
以下是用MATLAB实现中值滤波的代码。
输入参数:
img:原始图像
N:滤波器大小(正方形)
输出参数:
out:滤波后的图像
示例代码:
function out = median_filter(img, N)
[rows,cols] = size(img); %获取图像大小
img = padarray(img,[N N],'replicate'); %对图像进行边缘填充
out = zeros(rows,cols); %初始化输出图像
for i = 1+N:rows+N %对图像进行遍历
for j = 1+N:cols+N
patch = img(i-N:i+N,j-N:j+N); %获取当前位置的滤波窗口
out(i-N,j-N) = median(patch(:)); %取窗口中的中值作为当前位置的输出值
end
end
end
使用方法:
img = imread('test.jpg'); %读取图像
img_gray = rgb2gray(img); %将图像转换为灰度图
out = median_filter(img_gray, 5); %对图像进行中值滤波,并设置
滤波器大小为5
imshow(out); %显示滤波后的图像
以上是中值滤波MATLAB代码的实现过程。
通过调整滤波器大小,可以得到不同程度的平滑效果。
Matlab中的图像滤波方法与实例分析
![Matlab中的图像滤波方法与实例分析](https://img.taocdn.com/s3/m/19b7bf25b6360b4c2e3f5727a5e9856a5612262d.png)
Matlab中的图像滤波方法与实例分析引言图像滤波是数字图像处理中的一项重要技术,用于降低图像噪声、平滑图像以及增强图像细节。
在Matlab中,有多种图像滤波方法可供选择。
本文将对这些方法进行介绍和实例分析。
一、线性滤波方法1. 均值滤波均值滤波是一种最简单的线性平滑滤波方法。
其基本思想是用邻域内像素的平均值替代当前像素的值。
在Matlab中,可使用imfilter函数实现均值滤波。
下面是一个示例:```I = imread('example.jpg');filtered_img = imfilter(I, fspecial('average', 3));```2. 中值滤波中值滤波是一种非线性滤波方法,在处理含有椒盐噪声等图像时表现出较好的效果。
它的原理是用中值取代邻域内的元素值。
在Matlab中,使用medfilt2函数可以实现中值滤波。
下面是一个示例:```I = imread('example.jpg');filtered_img = medfilt2(I);```二、非线性滤波方法1. 双边滤波双边滤波是一种非线性滤波方法,可以同时平滑图像和保留边缘信息。
它的核心思想是考虑像素的空间距离和像素值的差异。
在Matlab中,可使用bfilter2函数实现双边滤波。
下面是一个示例:```I = imread('example.jpg');filtered_img = bfilter2(I, 3, 25, 10); % 参数可根据需要自行调整```2. 自适应中值滤波自适应中值滤波是一种根据像素邻域内像素值的分布特性动态调整滤波窗口大小的方法。
在Matlab中,可使用adpmedian函数实现自适应中值滤波。
下面是一个示例:```I = imread('example.jpg');filtered_img = adpmedian(I, 5); % 参数可根据需要自行调整```三、时域滤波方法1. Laplace滤波Laplace滤波是一种高频增强滤波方法,能够提取图像的细节信息。
MATLAB中的图像滤波和去噪方法
![MATLAB中的图像滤波和去噪方法](https://img.taocdn.com/s3/m/f47442762f3f5727a5e9856a561252d380eb202d.png)
MATLAB中的图像滤波和去噪方法引言图像处理是计算机视觉和图像分析领域的一个重要组成部分。
在实际应用中,图像往往会受到各种噪声的干扰,因此需要对图像进行滤波和去噪处理,以提升图像的质量和清晰度。
MATLAB作为一款功能强大的科学计算软件,提供了多种图像滤波和去噪的方法,本文将介绍其中的几种方法及其原理和应用。
一、均值滤波均值滤波是一种常见的线性滤波方法,它可以降低图像中的噪声,同时也会导致图像的细节损失。
均值滤波的原理很简单,对于图像中的每个像素点,将其周围的邻域像素取平均值作为该像素的新值。
在MATLAB中,可以使用imfilter函数来实现均值滤波。
二、中值滤波与均值滤波不同,中值滤波是一种非线性滤波方法,它能够有效地去除图像中的椒盐噪声和脉冲噪声,同时保持图像的边缘细节。
中值滤波的原理是对每个像素点的邻域像素进行排序,然后选取排序后的中值作为该像素的新值。
在MATLAB 中,可以使用medfilt2函数来实现中值滤波。
三、高斯滤波高斯滤波是一种常见的线性滤波方法,它通过对图像进行加权平均来平滑图像,并且能够保持图像的边缘信息。
高斯滤波的原理是对图像中的每个像素点,计算其周围邻域像素的权重,并将其与对应的像素值相乘后求和得到新的像素值。
在MATLAB中,可以使用fspecial和imfilter函数来实现高斯滤波。
四、小波去噪小波去噪是一种基于小波变换的非线性滤波方法,它能够有效地降噪,并且能够保持图像的边缘和细节信息。
小波去噪的原理是将图像进行小波变换,然后根据小波系数的大小来过滤和修复图像。
在MATLAB中,可以使用wdenoise函数来实现小波去噪。
五、自适应滤波自适应滤波是一种非线性滤波方法,它能够根据图像的局部特征来自适应地调整滤波参数,从而实现更好的去噪效果。
自适应滤波的原理是对图像中的每个像素点,根据其邻域像素的方差来自适应地调整滤波器的参数,从而实现去噪。
在MATLAB中,可以使用adapthisteq和imfilter函数来实现自适应滤波。
最常用数字滤波方法及源代码
![最常用数字滤波方法及源代码](https://img.taocdn.com/s3/m/c888371c814d2b160b4e767f5acfa1c7aa0082b5.png)
最常用数字滤波方法及源代码在数字信号处理中,常用的数字滤波方法有以下几种:1) 移动平均滤波(Moving Average Filter):将输入信号的过去N 个样本的平均值作为输出样本的值。
这种滤波器可以有效地平滑信号,但对于快速变化的信号可能引入较大的延迟。
2) 中值滤波(Median Filter):将输入信号的过去N个样本的中间值作为输出样本的值。
中值滤波器可以有效地去除噪声,但对于快速变化的信号可能引入较大的失真。
3) 低通滤波(Lowpass Filter):通过去除高频成分来平滑信号。
常用的低通滤波器有巴特沃斯滤波器、切比雪夫滤波器等。
以下是Python中实现这些滤波方法的简单源代码示例:移动平均滤波方法:```pythondef moving_average_filter(input_signal, window_size):filtered_signal = []for i in range(len(input_signal) - window_size + 1):window = input_signal[i:i+window_size]filtered_signal.append(sum(window) / window_size)return filtered_signal```中值滤波方法:```pythondef median_filter(input_signal, window_size):filtered_signal = []for i in range(len(input_signal) - window_size + 1):window = input_signal[i:i+window_size]filtered_signal.append(sorted(window)[window_size//2])return filtered_signal```低通滤波方法:```pythonimport scipy.signal as signaldef lowpass_filter(input_signal, cutoff_freq, fs):nyquist_freq = 0.5 * fsnormalized_cutoff_freq = cutoff_freq / nyquist_freqb, a = signal.butter(4, normalized_cutoff_freq, btype='low') filtered_signal = signal.lfilter(b, a, input_signal)return filtered_signal```注意:以上代码示例仅为简单实现,并未考虑边界情况和参数校验等细节。
图像处理——均值滤波+中值滤波(Matlab)
![图像处理——均值滤波+中值滤波(Matlab)](https://img.taocdn.com/s3/m/63cea3db312b3169a451a498.png)
题目:均值滤波和中值滤波在自己的证件照中加入椒盐噪声、高斯白噪声。
分别用3*3、5*5、7*7的均值滤波器和中值滤波器进行滤波。
处理过程1.用imnoise函数在图像中分别加入椒盐噪声和高斯白噪声;2.均值滤波:用fspecial函数创建各模板大小的均值滤波器,并用imfilter函数进行滤波。
中值滤波:直接用matlab提供的medfilt2中值滤波器进行滤波即可。
处理结果程序清单(1)均值滤波rgb=imread('photo.jpg');J1=imnoise(rgb,'salt & pepper',0.02);J2=imnoise(J1,'gaussian',0,0.01);h1=fspecial('average',[3,3]);h2=fspecial('average',[5,5]);h3=fspecial('average',[7,7]);rgb1=imfilter(J2,h1);rgb2=imfilter(J2,h2);rgb3=imfilter(J2,h3);figure;subplot(2,3,1);imshow(rgb)title('原图像');subplot(2,3,2);imshow(J2)title('加入噪声后的图像');subplot(2,3,4);imshow(rgb1)title('3*3均值滤波图像');subplot(2,3,5);imshow(rgb2)title('5*5均值滤波图像');subplot(2,3,6);imshow(rgb3)title('7*7均值滤波图像');(2)中值滤波rgb=imread('photo.jpg');J1=imnoise(rgb,'salt & pepper',0.02);J2=imnoise(J1,'gaussian',0,0.01);J3=rgb2gray(J2);rgb1=medfilt2(J3,[3 3]);rgb2=medfilt2(J3,[5 5]);rgb3=medfilt2(J3,[7 7]);figure;subplot(2,3,1);imshow(rgb) title('原图像');subplot(2,3,2);imshow(J3) title('加入噪声后的图像'); subplot(2,3,4);imshow(rgb1) title('3*3中值滤波图像'); subplot(2,3,5);imshow(rgb2) title('5*5中值滤波图像'); subplot(2,3,6);imshow(rgb3) title('7*7中值滤波图像');。
MATLAB数字图像均值和中值滤波
![MATLAB数字图像均值和中值滤波](https://img.taocdn.com/s3/m/989e9877e87101f69f31954e.png)
实验二数字图像的空间域滤波一、实验目的1、理解图像空间域滤波的原理;2、掌握图像均值滤波、中值滤波的原理与实现方法;3、掌握上述方法的改进方法。
二、实验原理均值滤波的主要步骤为:(1)将模板在途中漫游,并将模板中心与途中某个象素位置重合;(2)将模板上系数与模板下对应象素相乘;(3)将所有乘积相加;(4)将和(模板的输出响应)赋给途中对应模板中心位置的象素。
中值滤波的主要步骤为:(1)将模板在途中漫游,并将模板中心与途中某个象素位置重合;(2)读取模板下各对应象素的灰度值;(3)将这些灰度值从小到大排成1列;(4)找出这些值里排在中间的1个;(5)将这个中间值赋给对应模板中心位置的象素。
三、实验内容基本要求:1、自己编程实现图像的均值滤波;2、自己编程实现图像的中值滤波;3、利用matlab图像处理工具箱中的函数实现图像的上述处理;扩展要求:4、实现一种图像加权中值滤波或加权均值滤波;四、实验步骤1、编程实现图像的均值滤波程序代码:运行程序得到如下结果:2、编程实现图像的中值滤波程序代码:运行程序后得到如下结果:3、实现一种图像加权中值滤波或加权均值滤波设计x模板为:运行程序可得均值滤波后的结果:运行程序可得中值滤波后的结果:五、实验结果分析从实验结果可以看出,中值滤波较均值滤波效果好些,并且滤波与所选的模板有关,若选择权值相同(本实验为0.1/9)相对不同权值的效果好些。
模板的不同对均值滤波的影响较大。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理实验二
15生医
一、实验内容
产生教材104页题图4.18(右图)所示的二值图像(白为1,黑为0),编程实现习题4.18所要求的处理(3x3的平均滤波和中值滤波)功能(图像四周边界不考虑,处理结果按四舍五入仍取0或1),显示处理前后的图像,比较其异同。
二、运行环境
MATLAB R2014a
三、运行结果及分析
1. 四种不同的窗的3x3平均滤波 ①在
MATLAB 图形窗界面进行放大可以看出四者之间的差别:
4领域与8邻域之间没有明显差别,但是加权与未加权之间的差别较为明显,体现在:
加权后每个矩形块的四个尖角部分都被保留了下来4邻域平均滤波后图
像8邻域平均滤波后图像
4邻域加权平均滤波后图像8邻域加权平均滤波后图像
(图像四周边界不考虑),而未加权的尖角处黑色变为白色。
②原因分析:
加权后尖角处原来白色的点(1)进行计算3/5=0.6四舍五入后值为1,保持白色,原来黑色的点(0)进行计算2/5=0.4四舍五入后值为0,保持黑色;而未加权尖角处无论原来是黑色还是白色,进行计算
2/4=0.5四舍五入后值为1,所以原先的黑色(0)也变成了白色(1)。
③下图为放大后的截图:
2.中值滤波与原图像的对比
①在
MATLAB图形窗界面进行放大后可观察出:
使用3x3
方形中值滤波模板的效果与4领域、8领域加权平均滤波的
效果相同,每个矩形块的四个尖角部分都被保留了下来(图像四周边界不考虑)。
②原因分析:
套用3x3方形中值滤波模板后,尖角处原来白色的点(1)在窗内1多于0,取中值后仍保持白色,原来黑色的点(0)在窗内0多于1,取中值后仍保持白色。
③下图为放大后的截图:
原图像中值滤波后图像
四、心得体会
通过MATLAB编程更加理解了课后题的计算结果,直观地看出了黑白像素点灰度值变化前后的取值异同。
同时,对MATLAB实现像素点灰度值的替换机理也有所掌握,比如后边附的程序中会提到的“%”标注的思考。
五、具体程序
% 生成黑白块图像
unit=zeros(64,64);
f=zeros(256,256);
for i=1:1:32
for j=1:1:32
unit(i,j)=1; % 1/4白块
end
end
for i=33:1:64
for j=33:1:64
unit(i,j)=1; % 1/4白块
end
end
for i=1:64:256
for j=1:64:256
f(i:i+63,j:j+63)=unit;
end
end
% 对原图像进行3x3平均滤波
for i=2:1:255
for j=2:1:255
fave4(i,j)=(f(i-1,j)+f(i+1,j)+f(i,j-1)+f(i,j+1))/4;
fave8(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j+1)+f(i+1,j-1)+f(i+1,j)+f(i+1,j+1))/8;
fave4_weighted(i,j)=(f(i-1,j)+f(i+1,j)+f(i,j-1)+f(i,j+1)+f(i,j))/5;
fave8_weighted(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j+1) +f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)+f(i,j))/9;
end
end
fave4=round(fave4); % 平均后灰度值有可能是小数,要取整
fave8=round(fave8);
fave4_weighted =round(fave4_weighted);
fave8_weighted =round(fave8_weighted);
subplot(2,2,1);
imshow(fave4);
title('4邻域平均滤波后图像');
subplot(2,2,2);
imshow(fave8);
title('8邻域平均滤波后图像')
subplot(2,2,3);
imshow(fave4_weighted);
title('4邻域加权平均滤波后图像')
subplot(2,2,4);
imshow(fave8_weighted);
title('8邻域加权平均滤波后图像')
% 对原图像进行3
x3方形中值滤波
for i=2:1:255
for j=2:1:255
a=[f(i-1,j-1),f(i-1,j),f(i-1,j+1),f(i,j-1),f(i,j),f(i,j+1),f(i+1,j-1),f(i+1,j),f(i+1,j+1)];
b=sort(a); % 排序函数
fmid(i,j)=b(5); % 9个数排序的中值
end
end
subplot(1,2,1);
imshow(f);
title('原
图像');
subplot(1,2,2);
imshow(fmid);
title('中值滤波后图像')
4邻域平均滤波后图像8邻域平均滤波后图像
4邻域加权平均滤波后图像8邻域加权平均滤波后图像
原图像中值滤波后图像。