圖像基本運算
1點運算
線性點運算是指輸入圖像的灰度級與輸出圖像呈線性關系。
s=ar+b
(r為輸入灰度值,s為相應點的輸出灰度值)。
當a=1,b=0時,新圖像與原圖像相同;
當a=1,b≠0時,新圖像是原圖像所有像素的灰度值上移或下移,是整個圖像在顯示時更亮或更暗;
當a>1時,新圖像對比度增加;
當a<1時,新圖像對比度降低;
當a<0時,暗區域將變亮,亮區域將變暗,點運算完成了圖像求補;
非線性點運算是指輸入與輸出為非線性關系,常見的非線性灰度變換為對數變換和冪次變換,對數變換一般形式為:
1 x=imread('D:/picture/DiaoChan.jpg'); 2 subplot(2,2,1) 3 imshow(x); 4 title('原圖'); 5 J=0.3*x+50/255; 6 subplot(2,2,2); 7 imshow(J); 8 title('線性點變換'); 9 subplot(2,2,3); 10 x1=im2double(x); 11 H=2*log(1+x1); 12 imshow(H) 13 title('非線性點運算');%對數運算
冪次變換一般形式:s=cr^γ
下面是非線性點運算的冪運算
1 I=imread('D:/picture/DiaoChan.jpg'); 2 subplot(2,2,1); 3 imshow(I);title('原始圖像','fontsize',9); 4 subplot(2,2,2); 5 imshow(imadjust(I,[],[],0.5));title('Gamma=0.5'); 6 subplot(2,2,3); 7 imshow(imadjust(I,[],[],1));title('Gamma=1'); 8 subplot(2,2,4); 9 imshow(imadjust(I,[],[],1.5));title('Gamma=1.5');


2代數運算和邏輯運算
加法運算去噪處理
1 clear all 2 i=imread('lenagray.jpg'); 3 imshow(i) 4 j=imnoise(i,'gaussian',0,0.05); 5 [m,n]=size(i); 6 k=zeros(m,n); 7 for l=1:100 8 j=imnoise(i,'gaussian',0,0.05); 9 j1=im2double(j); 10 k=k+j1; 11 End 12 k=k/100; 13 subplot(1,3,1),imshow(i),title('原始圖像') 14 subplot(1,3,2),imshow(j),title('加噪圖像') 15 subplot(1,3,3),imshow(k),title(‘求平均后的
減法運算提取噪聲
1 I=imread(‘lena.jpg’); 2 J=imnoise (I,‘lena.jpg’,0,0.02); 3 K=imsubtract(J,I); 4 K1=255-K; 5 figure;imshow(I); 6 figure;imshow(J); 7 figure;imshow(K1);
乘法運算改變圖像灰度級
1 I=imread('D:/picture/SunShangXiang.jpg') 2 I=im2double(I); 3 J=immultiply(I,1.2); 4 K=immultiply(I,2); 5 subplot(1,3,1),imshow(I);subplot(1,3,2),imshow(J); 6 subplot(1,3,3);imshow(K);
邏輯運算
1 A=zeros(128); 2 A(40:67,60:100)=1; 3 figure(1) 4 imshow(A); 5 B=zeros(128); 6 B(50:80,40:70)=1; 7 figure(2) 8 imshow(2); 9 C=and(A,B);%與 10 figure(3); 11 imshow(3); 12 D=or(A,B);%或 13 figure(4); 14 imshow(4); 15 E=not(A);%非 16 figure(5); 17 imshow(E);
3幾何運算
平移運算實現圖像的平移
1 I=imread('lenagray.jpg'); 2 subplot(1,2,1); 3 imshow(I); 4 [M,N]=size(I);g=zeros(M,N); 5 a=20;b=20; 6 for i=1:M 7 for j=1:N 8 if((i-a>0)&(i-a<M)&(j-b>0)&(j-b<N)) 9 g(i,j)=I(i-a,j-b); 10 else 11 g(i,j)=0; 12 end 13 end 14 end 15 subplot(1,2,2);imshow(uint8(g));
水平鏡像變換
1 I=imread('lena.jpg'); 2 subplot(121);imshow(I); 3 [M,N]=size(I);g=zeros(M,N); 4 for i=1:M 5 for j=1:N 6 g(i,j)=I(i,N-j+1); 7 end 8 end 9 subplot(122);imshow(uint8(g));
垂直鏡像變換
1 I=imread('lena.jpg'); 2 subplot(121);imshow(I); 3 [M,N]=size(I);g=zeros(M,N); 4 for i=1:M 5 for j=1:N 6 g(i,j)=I(M-i+1,j); 7 end 8 end 9 subplot(122);imshow(uint8(g));
圖像的旋轉
1 x=imread('D:/picture/DiaoChan.jpg'); 2 imshow(x); 3 j=imrotate(x,45,'bilinear'); 4 k=imrotate(x,45,'bilinear','crop'); 5 subplot(1,3,1),imshow(x); 6 title(‘原圖') 7 subplot(1,3,2),imshow(j); 8 title(‘旋轉圖(顯示全部)') 9 subplot(1,3,3),imshow(k); 10 title(‘旋轉圖(截取局部)')
幾種插值法比較
1 i=imread('lena.jpg'); 2 j1=imresize(i,10,'nearest'); 3 j2=imresize(i,10,'bilinear'); 4 j3=imresize(i,10,'bicubic'); 5 subplot(1,4,1),imshow(i);title(‘原始圖像') 6 subplot(1,4,2),imshow(j1);title(‘最近鄰法') 7 subplot(1,4,3),imshow(j2);title(‘雙線性插值法') 8 subplot(1,4,4),imshow(j3);title(‘三次內插法')
放縮變換
1 x=imread('D:/picture/ZiXia.jpg') 2 subplot(2,3,1) 3 imshow(x); 4 title('原圖'); 5 Large=imresize(x,1.5); 6 subplot(2,3,2) 7 imshow(Large); 8 title('擴大為1.5'); 9 Small=imresize(x,0.1); 10 subplot(2,3,3) 11 imshow(Small); 12 title('縮小為0.3'); 13 subplot(2,3,4) 14 df=imresize(x,[600 700],'nearest'); 15 imshow(df) 16 title('600*700'); 17 df1=imresize(x,[300 400],'nearest'); 18 subplot(2,3,5) 19 imshow(df1) 20 title('300*400');










后記:
(1)MATLAB基礎知識回顧
1:crtl+R是對選中的區域注釋,ctrl+T是取消注釋
2:有的代碼中點運算如O=a.*I+b/255 ,其中b除以255原因是:灰度數據有兩種表式方法:一種是用unit8類型,取值0~255;另一種是double類型,取值0~1。兩者之間相差255倍。就這段代碼而言,I剛讀入時是unit8類型,在第2句轉換為double,所以后面涉及到與它進行運算的時候,為了統一,都要轉換到0~1的范圍,所以要除255。
3:imresize的用法
1、B = imresize(A,m) 將圖片A放大m倍
2、B = imresize(A,m,method)
將圖片A由參數method指定的插值運算方法來改變圖像的大小到m倍,
method的幾種可選值:
'nearest'最近鄰插值(默認)
'bilinear'雙線性插值
'bicubic'雙三次插值
3、B = imresize(A,[mrows
ncols],method) 將圖片A由參數method指定的插值運算方法,來改變圖像的大小到長寬為[mrows
ncols]
4、B= imresize(...,method,n)
5、B= imresize(...,method,h)
其中的h可以是任意一個FIR濾波器(h通常由函數ftrans2、fwind1、fwind2、或fsamp2等生成的二維FIR濾波器)。
4:uint16的用法
matlab中uint16函數的用法;
1.函數用法:將輸入參數映射到無符號16位范圍之內,即將參數限定在0-65535之間;
2.實例:當輸入為一個實數a時:
if a<0 輸出ans=0;
if 0<=a<=65535 輸出ans=a;
if a>65535 輸出ans=65535;
當輸入為一個矩陣a時:對於矩陣中的每一個元素進行上述標量操作;
if a=[-1 2 65539] 輸出ans=[0 2 65535];
注意:uint8的用法同理
5 mat2gray 把一個double類的任意數組轉換成值范圍在[0,1]的歸一化double類數組
im2double 將輸入轉換為double類.若輸入是uint8類 uint16 類 logical類則函數將其轉換為范圍[0,1]之間的類.
6imadjust
函數imadjust是對灰度圖像進行亮度轉換的基本IPT工具
g=imadjust(f,[low-in high-in],[low_out high_out],gmma)
此函數將圖像f中的亮度值映像到g中的新值,即將low_in至high_in之間的值的映射到low_out和high_out之間的值.low_in以下high_in以 上的值被剪切了. 參數gamma給出曲線的形狀.該曲線用來映射f的亮度值,以便生成圖像g.若gamma小於
1,則映射被加權至更高的輸出值.
7imnoise的用法
g = imnoise(f, type, parameters)
參數說明:
輸出:g是添加噪聲之后的圖像。
輸入:f是原圖像,type是加入的噪聲類型,parameters是噪聲的一些參數。