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)