1、程序%将图片转化为二值图,根据直方图,以75分界 4if(I(i,j)75) 4Otsu阈值: 4谐波均值滤波器 5(三)利用直方图人工指定阈值对rice进行自动单阈值分割; 7滤波器 8(二)对图像加噪后分别使用MATLAB自带函数和自写函数进行平滑滤波,观察实验结果。 9(三)自写函数实现对图像的锐化操作。 9(四) 分别使用最大值、最小值和中值滤波器对图像进行处理 10最小值: 11中值: 12(五)分别使用理想和巴特沃斯高低通滤波器对图像进行滤波(高斯噪声) 12图像灰度变换 13%对数变换 143,反色变换 144.灰度图像均衡化 15点检测 15阈值 16Sobel 17%LOG
2、17%Canny 17(一) 调入给定的数字图像,并进行计算机均衡化处理,显示原图像的直方图和经过均衡化处理过的图像直方图。 19(二)对图像加噪后分别使用MATLAB自带函数和自写函数进行平滑滤波, 20运用拉普拉斯算子梯度增强法进行图像锐化 21%最大值滤波器 21最小值: 22%中值 23PSF 252、灰度直方图均衡 规格化 26程序二:filter和conv的不同 28程序三:滤波后信号幅度的变化 28MATLAB中提供了卷积运算的函数命令conv2,其语法格式为: 29MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为: 29Y = f
3、ilter2(h,X) 29Fspecial函数用于创建预定义的滤波算子 30ordfilt2函数 30图像的点运算: 30加法运算:rice和cameraman 313、 flower 变模糊 314、 减法运算:ri 32乘法运算 32缩放运算 33图像翻转 34图像剪切 34%将图片转化为二值图,根据直方图,以75分界I=imread(Cameraman.bmp);m n=size(I);for i=1:m for j=1:n if(I(i,j)75) I(i,j)=255;% 大于75,都变成背景色 else I(i,j)=0; end endend imshow(I);Otsu阈值:
4、I=imread(zhiwen.gif); T ,SM=graythresh(I); %otsu自动计算阈值函数,SM是可分性测度g=im2bw(I,T)figure,imshow(g)谐波均值滤波器图像分割与边缘检测(二)用各梯度算子对图像进行边缘检测;i=imread(rice1.jpg);g=rgb2gray(i);d=im2double(i);subplot(131),imshow(i),title(原图);gv,t=edge(g,sobel,0.075,horizontal);%I I是输入图像,Sobel是运用的方法,parameters是参数g是一个数组,t是edge用于确定参数
5、,T是阈值,dir(vertical)是检测的首选方向subplot(132),imshow(gv),title(水平方向);gv,t=edge(g,sobel,0.9,horizontal);subplot(133),imshow(gv),title(水平方向); %LOGi=imread(rice1.jpg);g=rgb2gray(i);d=im2double(i);subplot(131),imshow(i),title(原图);gv,t=edge(g,log,0.005,2.25);subplot(132),imshow(gv),title(高斯拉普拉斯LOG );gv,t=edge(
6、g,log,0.1,2.25); %2.25是代表标准差。默认为2subplot(133),imshow(gv),title(高斯拉普拉斯LOG );%Canny边缘检测器i=imread(rice1.jpg);g=rgb2gray(i);d=im2double(i);subplot(131),imshow(i),title(原图);gv,t=edge(g,canny, 0.04 0.1,1.5);% 0.04 0.1是两个阈值,1.5是平面滤波的标准差,默认值为1 subplot(132),imshow(gv),title(Canny边缘检测器); (四)用迭代法和OSTU法对rice进行自
7、动单阈值分割;x=imread(Lena.bmp);%figure;%imshow(x);m,n=size(x);N=m*n;num=zeros(1,256);p=zeros(1,256);for i=1:m for j=1:n num(x(i,j)+1)=num(x(i,j)+1)+1;endendfor i=0:255;p(i+1)=num(i+1)/N;endtotalmean=0; for i=0:255; totalmean=totalmean+i*p(i+1); end maxvar=0; for k=0:255kk=k+1; zerosth=sum(p(1:kk); firsth
8、=0; for h=0:k firsth=firsth+h*p(h+1); end var=totalmean*zerosth-firsth; var=var*var; var=var/(zerosth*(1-zerosth)+0.01); var=sqrt(var); if(varmaxvar) maxvar=var; point=k; end end threshold=point; I=imread(Lena.bmp); %I=rgb2gray(I); I=double(I); T=double(min(I(:)+max(I(:)/2; done=false; i=0;while don
9、e r1=find(IT);Tnew=(mean(I(r1)+mean(I(r2)/2;done=abs(Tnew-T)75) I1(i,j)=255;% 大于75,都变成背景色 else I1(i,j)=0; end endend subplot(133);imshow(I1);title(分割以后图);滤波器调入给定的数字图像,并进行计算机均衡化处理,显示原图像的直方图和经过均衡化处理过的图像直方图。观察均衡化后图像和直方图的变化。结果如图。 I1 = imread(flower.jpg); subplot(4,3,1),imshow(I1);%显示原图 I=rgb2gray(I1); s
10、ubplot(4,3,2),imshow(I);%将彩色图转化为灰度图 subplot(4,3,3),imhist(I,50);%每隔50隔像素点统计一次 h = histeq(I);%均衡化,画图片的直方图 subplot(4,3,4),imshow(h); subplot(4,3,5),imhist(h);%显示均衡化以后的图像 (二)对图像加噪后分别使用MATLAB自带函数和自写函数进行平滑滤波,观察实验结果。% 2平滑滤波%自带函数I=imread(Lena.bmp);i=imnoise(I,salt);%加盐噪subplot(2,2,1),imshow(i);h=fspecial(a
11、verage); %3*3的邻域平均模板,生成均值滤波器y=imfilter(i,h); %对图像进行滤波subplot(2,2,2),imshow(y);% 2平滑滤波%自写函数I=imread(Lena.bmp);i=imnoise(I,salt);%加盐噪subplot(2,2,1),imshow(i);Inew=myMidalp(i,3); %调用函数subplot(2,2,3),imshow(Inew)(三)自写函数实现对图像的锐化操作。运用拉普拉斯算子梯度增强法进行图像锐化 I,map=imread(Lena.bmp);Subplot(1,2,1)imshow(I,map); %m
12、ap:映射I=double(I); Gx,Gy=gradient(I); % 计算梯度G=sqrt(Gx.*Gx+Gy.*Gy); % 注意是矩阵点乘 J=I; K=find(G=7); J(Q)=255; Subplot(1,2,2),imshow(J,map);(4)分别使用最大值、最小值和中值滤波器对图像进行处理,观察实验结果。最大值:%最大值滤波器I2=imread(flower.jpg); I1=rgb2gray(I2); n=2; c=2; mask=ones(n,n); r1,c1=size(I1); subplot(2,2,1);imshow(I2);title(原始图像);
13、subplot(2,2,2);imshow(I1);title(灰度图像); I1=double(I1); I1_max=I1; mid=floor(n/2); for u=1:r1-n+1 for v=1:c1-n+1 A=I1(u:u+n-1,v:v+n-1); A=A.*mask; I1_max(u+mid,v+mid)=max(max(A); endendsubplot(2,2,3);imshow(I1_max(mid+1:r1-mid,mid+1:c1-mid),);title(最大值图像);最小值:%最小值滤波器I2=imread(flower.jpg); I1=rgb2gray(
14、I2); n=2; c=2; mask=ones(n,n); r1,c1=size(I1); subplot(2,2,1);imshow(I2);title(原始图像); subplot(2,2,2);imshow(I1);title(灰度图像); I1=double(I1);I1_min=I1; mid=floor(n/2); %floor:向下取整 for u=1:r1-n+1 for v=1:c1-n+1 A=I1(u:u+n-1,v:v+n-1); A=A.*mask; I1_min(u+mid,v+mid)=min(min(A); endendsubplot(2,2,3);imsho
15、w(I1_min(mid+1:r1-mid,mid+1:c1-mid),);title(最小值图像);中值:I=imread(Lena.bmp);noise=imnoise(I,salt);figure,imshow(noise);Inew=myMidal(noise,3);figure,imshow(Inew);(五)分别使用理想和巴特沃斯高低通滤波器对图像进行滤波(高斯噪声),讨论阈值的设定和阶数的选取。clc;I=imread(Lena.bmp);%读图F=fft2(I);%傅里叶变换,变为频域内的图newF=fftshift(F);%移频 M N =size(I);%获取图像的大小d0
16、=100;%M=60;N=60; c1=floor(M/2);%原点c2=floor(N/2);h1=zeros(M,N);%理想型% h2=zeros(M,N); %巴特沃斯型% h3=zeros(M,N); %高斯型% sigma=4;% n=4; %巴特沃斯阶数for i=1:M for j=1:N d=sqrt(i-c1)2+(j-c2)2); if d=d0 h1(i,j)=1;%若为低通,则为0 else h1(i,j)=0;%若为低通,则为1 end %h2(i,j)=1/(1+(d/d0)(2*n); %h3(i,j)=exp(-d2/(2*sigma2); endendA=h
17、1.*newF;%相当于GuvB=ifft2(A);%相当于Gxy imshow(log(abs(B),);draw2(h1,理想型);% draw2(h2,巴特沃斯);% draw2(h3,高斯); 图像灰度变换 一些常用灰度变换Matlab程序以及图像处理效果图1,二值化和阈值处理%图像二值化 (选取一个域值,(5) 将图像变为黑白图像)I=imread(C:Documents and SettingsAdministrator桌面DIP-E1增强DIP-E1增强p12.tif);bw=im2bw(I,0.5);%选取阈值为0.5subplot(1,3,1);imshow(I);title
18、(原图);subplot(1,3,2);imshow(bw);title(显示二值图像);J=find(I=150);I(J)=255;subplot(1,3,3);imshow(I);title( 图像二值化 ( 域值为150 ) );2非线性变换%对数变换I=imread(C:Documents and SettingsAdministrator桌面DIP-E1增强DIP-E1增强p12.tif);I=mat2gray(I);%对数变换不支持uint8类型数据,将一个矩阵转化为灰度图像的数据格式(double)J=log(I+1);subplot(1,2,1);Imshow(I);%显示图
19、像title(原图);subplot(1,2,2);Imshow(J);title(对数变换后的图像)3,反色变换I1=imread(C:Documents and SettingsAdministrator桌面DIP-E1增强DIP-E1增强p12.tif);figure,imshow(I);title(原始图像);I2=imcomplement(I1);figure,imshow(I2);title(反色后图像);4.灰度图像均衡化I=imread(C:Documents and SettingsAdministrator桌面DIP-E1增强DIP-E1增强p12.tif); J=hist
20、eq(I);subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J);figure,subplot(1,2,1),imhist(I,64);subplot(1,2,2),imhist(J,64);点检测myMidal.mfunction d = myMidal( x,n )%x是给定的图像,n是滤波器的大小;本函数实现中值滤波heigth width=size(x);x1=double(x);x2=x1;%x2就是原图像,模板每滑动一次,就用加权平均值修改for i=1:width-n+1 for j=1:heigth-n+1 c=x1(i:i+n-
21、1,j:j+n-1);%矩阵n行*n列模板,i:i+n-1是n行,c就是模板划过的区域 mm=-sum(sum(c)+9*c(1+(n-1)/2,1+(n-1)/2);%第一次求和,是按列求和。得到一个行向量,向量的基础上都求和 sum ,在i行j列中 取中间值的坐标是 i+(n-1)/2 , j+(n-1)/2% e=reshape(c,1,n*n);%将c变成向量% mm=median(e);%取中间值 x2(i+(n-1)/2,j+(n-1)/2)=mm;%模板中间坐标,i+(n-1)/2表示行号,j+(n-1)/2是列号 endendx3=x2(2:height-1,2:width-1
22、);%去掉最外面的一行一列figure,imshow(uint8(x3);%double 是用来计算的,uint是用来直接显示的% T=max(max(abs(x3);%最大梯度的矩阵,每一列求出一个最大值,得到一个行矩阵,再求一次最大值T=20;m n=size(x3);%比max小的都是0for i=1:m for j=1:n if(abs(i,j)75) I1(i,j)=255;% 大于75,都变成背景色 else I1(i,j)=0; end endend subplot(133);imshow(I1);title(分割以后图); Sobeli=imread(rice1.jpg);g=
23、rgb2gray(i);d=im2double(i);subplot(131),imshow(i),title(原图);gv,t=edge(g,sobel,0.075,horizontal);%I是输入图像,Sobel是运用的方法,parameters是参数%g是一个数组,t是edge用于确定参数,T是阈值,dir(vertical)是检测的首选方向subplot(132),imshow(gv),title(水平方向);gv,t=edge(g,sobel,0.9,horizontal);subplot(133),imshow(gv),title(水平方向);%LOGi=imread(rice1
24、.jpg);g=rgb2gray(i);d=im2double(i);subplot(131),imshow(i),title(原图);gv,t=edge(g,log,0.005,2.25);subplot(132),imshow(gv),title(高斯拉普拉斯LOG);gv,t=edge(g,log,0.1,2.25);%2.25是代表标准差。默认为2subplot(133),imshow(gv),title(高斯拉普拉斯LOG);%Cannyi=imread(rice1.jpg);g=rgb2gray(i);d=im2double(i);subplot(131),imshow(i),ti
25、tle(原图);gv,t=edge(g,canny, 0.04 0.1,1.5);% 0.04 0.1是两个阈值,1.5是平面滤波的标准差,默认值为1subplot(132),imshow(gv),title(边缘检测器);%(三)利用直方图人工指定阈值对rice进行自动单阈值分割;I1=imread(Cameraman.bmp);subplot(131);imshow(I1);title(原图);I=im2bw(I1);subplot(132);imhist(I1);title(直方图);m n=size(I1);for i=1:m for j=1:n if(I1(i,j)75) I1(i,
26、j)=255;% 大于75,都变成背景色 else I1(i,j)=0; end endend subplot(133);imshow(I1);title(分割以后图); %(四)用迭代法和OSTU法对rice进行自动单阈值分割;x=imread(Lena.bmp);%figure;%imshow(x);m,n=size(x);N=m*n;num=zeros(1,256);p=zeros(1,256);for i=1:m for j=1:n num(x(i,j)+1)=num(x(i,j)+1)+1;endendfor i=0:255;p(i+1)=num(i+1)/N;endtotalmean=0; for i=0:255; totalmean=totalmean+i*p(i+1); end maxvar=0; for k=0:255kk=k+1; zerosth=sum(p(1:kk); firsth=0; for h=0:k firsth=firsth+h*p(h+1); end var=total
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1