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