1 %matlab进行图像代数运算之前首先要将数据类型转换为double 2 I=im2double(I)
4.1 图像的像素运算
1 %灰度线性变换函数 2 gamma=0.5; %设定调整线性度取值 3 A1=imadjust(A,[0.5 0.8],[0 1],gamma); 4 5 %图像的加法运算 6 %实现两个图像的叠加;加一个常数,可以提高图像整体亮度;同一幅图像叠加求平均可以消除原图像的附加噪声(噪声互不相关,且均值为0) 7 Z=imadd(X,Y); 8 9 %图像中加入噪声 10 J=imnoise(I,type,parameters); 11 12 %图像减法 Z=X-Y 13 %常用于检测图像变化及运动物体的图像处理方法 14 Z=imsubtract(X,Y); 15 16 %图像乘法运算 17 %功能:一可以实现掩膜操作,屏蔽图像的某些部分;二是乘以一个大于1的常数因子能增强图像的亮度,乘以一个小于1的常数因子会使图像变暗 18 Z=immultiply(X,Y); 19 20 %图像的除法运算 21 %图像的除法运算给出的是两幅图像的相应像素值的变化比率,又称比率变换,常用于校正成像设备的非线性影响 22 Z=imdivide(X,Y); 23 24 %绝对值差函数 25 D=imabsdiff(C,B); 26 27 %图像求补函数 28 IM2=imcomplement(IM); 29 30 %图像运算的线性组合函数 31 Z=imlincomb(K1,A1,K2,A2,...,Kn,An);
4.2 图像的几何变换
1 %图像的平移/镜像/转置 2 %没有具体的图像平移/镜像/转置函数,可以用MATLAB指令编程实现move 3 4 %图像的缩放 5 B=imresize(A,m) %默认最近邻插值 6 B=imresize(A,[mrows ncols]) %按行和列进行缩放 7 B=imresize(A,m,method) %nearest最近邻插值法、bilinear双线性插值、bicubic双三次差值 8 9 %图像的旋转, 以图像中心为原点,将所有像素旋转相同角度 10 B=imrotate(A,angle) 11 B=imrotate(A,angle,method) %同缩放的method 12 B=imrotate(A,angle,method,bbox) % 13 14 %图像的剪切 15 I2=imcrop(I,rect) %rect说明剪切矩形区域大小 16 [I2,rect]=imcrop(...) %利用鼠标选择剪切区域,并将剪切区域返回给I2,区域大小返回给rect 17 18 %图像的空间变换 19 B=imtransform(A,TFORM) %TFORM:空间变换参数的结构体 20 21 %空间变换参数 22 T=maketform('affine',A) 23 %结合函数maketform()和函数imtransform()可以实现图像的旋转、缩放、平移和切换
图像的平移/镜像/转置 函数
function J=move(I,a,b) % 定义一个函数名字move,I表示输入图像,a和b描述I图像沿着x轴和y轴移动的距离 % 不考虑平移以后,图像溢出情况,找不到对应点的地方都赋值为1 [M,N,G]=size(I);%获取输入图像I的大小 I=im2double(I); %将图像数据类型转换成双精度 J=ones(M,N,G); %初始化新图像矩阵全为1,大小与输入图像相同 for i=1:M for j=1:N if((i+a)>=1&&(i+a<=M)&&(j+b>=1)&&(j+b<=N));%判断平移以后行列坐标是否超出范围 J(i+a,j+b,:)=I(i,j,:);%进行图像平移 end end end function OutImage=mirror(InImage,n) %mirror函数实现图像镜像变换功能 %参数n为1时,实现水平镜像变换 %参数n为2时,实现垂直镜像变换 %参数n为3时,实现水平垂直镜像变换 I=InImage; [M,N,G]=size(I);%获取输入图像I的大小 J=I; %初始化新图像矩阵全为1,大小与输入图像相 if (n==1) for i=1:M for j=1:N J(i,j,:)=I(M-i+1,j,:);%n=1,水平镜像 end end; elseif (n==2) for i=1:M for j=1:N J(i,j,:)=I(i,N-j+1,:);%n=2,垂直镜像 end end elseif (n==3) for i=1:M for j=1:N J(i,j,:)=I(M-i+1,N-j+1,:);%n=3,水平垂直镜像 end end else error('参数n输入不正确,n取值1、2、3')%n输入错误时提示 end OutImage=J; function J=transp(I) %I表示输入的原始图像 %J表示经过转置以后的图像 [M,N,G]=size(I);%获取输入图像I的大小 I=im2double(I); %将图像数据类型转换成双精度 J=ones(N,M,G); %初始化新图像矩阵全为1,大小与输入图像相同 for i=1:M for j=1:N J(j,i,:)=I(i,j,:);%进行图像转置 end end function J=move1(I,a,b) % 定义一个函数名字move,I表示输入图像,a和b描述I图像沿着x轴和y轴移动的距离 % 考虑平移以后,图像溢出情况,采用扩大显示区域的方法 [M,N,G]=size(I);%获取输入图像I的大小 I=im2double(I); %将图像数据类型转换成双精度 J=ones(M+abs(a),N+abs(b),G); %初始化新图像矩阵全为1,大小根据考虑x轴和y轴的平移范围 for i=1:M for j=1:N if(a<0 && b<0);%如果进行右下移动,对新图像矩阵进行赋值 J(i,j,:)=I(i,j,:); else if(a>0 && b>0); J(i+a,j+b,:)=I(i,j,:);%如果进行右上移动,对新图像矩阵进行赋值 else if(a>0 && b<0); J(i+a,j,:)=I(i,j,:);%如果进行左上移动,对新图像矩阵进行赋值 else J(i,j+b,:)=I(i,j,:);%如果进行右下移动,对新图像矩阵进行赋值 end end end end end
4.3 图像的邻域和块操作
1 %-------图像的邻域操作------- 2 3 %通用滑动邻域操作函数 4 B=nlfilter(A,[m,n],fun) 5 6 %列方向邻域操作函数 7 B=colfilt(A,[m,n],block_type,fun) 8 9 %分离邻域操作函数 10 B=blockproc(A,[M N],fun) 11 12 %--------图像的区域选取--------- 13 14 %多边形区域选择函数 15 BW=roiploy(I) 16 17 %灰度ROI区域选择函数 18 BW=roicolor(A,low,high) 19 20 %区域填充函数 21 J=roifill(I) 22 23 %区域滤波函数 24 J=roifilt2(h,I,BW)