4. 数字图像的运算


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)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM