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)