一、圖像文件的讀寫
1.colorbar函數將顏色條添加到坐標軸對象中
%colorbar函數將顏色條添加到坐標軸對象中
RGB=imread('drum.bmp') %圖像讀入
I=rgb2gray(RGB); %把RGB圖像轉化為灰度圖像
h=[1 2 1;0 0 0;-1 -2 -1];
I2=filter2(h,I); %使用指定的濾波器h對I進行濾波,結果保存在I2中
imshow(I2,[]),colorbar('vert') %將顏色條添加到坐標軸的對象中
%vert--垂直,horiz--水平
2.warp將圖像圖像進行文理映射
%warp將圖像圖像進行文理映射
A=imread('drum.bmp'); I=rgb2gray(A); [x,y,z]=sphere; warp(x,y,z,I); %用warp函數將圖像作為紋理進行映射
3.subimage函數實現在一個圖形窗口內顯示多幅圖像
%subimage函數實現在一個圖形窗口內顯示多幅圖像 RGB=imread('drum.bmp'); I=rgb2gray(RGB); subplot(1,2,1),subimage(RGB) subplot(1,2,2),subimage(I) %subplot(1,2,1)是指一個1行2列的圖中從左到右從上到下第1個位置
二、圖像處理的基本操作
1)圖像代數運算
1.imadd函數實現兩幅圖像的相加或者給一幅圖像加上一個常數
I=imread('drum.bmp'); J=imadd(I,100); %給圖像增加亮度 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
2.imsubtract函數實現將一幅圖從另外一幅圖像中減去,或者從一幅圖像中減去一個常數
I=imread('drum.bmp'); J=imsubtract(I,100); %給圖像減少亮度 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
3.immultiply函數實現兩幅圖像的相乘或者一幅圖像亮度的縮放
I=imread('drum.bmp'); J=immultiply(I,0.5); %給圖像進行亮度縮放 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
4.imdivide函數實現兩幅圖像的除法或者一幅圖像或一幅圖像亮度的縮放
I=imread('drum.bmp'); J=imdivide(I,0.5); %給圖像進行亮度縮放 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
2)圖像空間域操作
1.imresize函數實現圖像的縮放
I=imread('drum.bmp'); J=imresize(I,5); %給圖像進行縮放 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
2.imrotate函數實現圖像的旋轉
I=imread('drum.bmp'); J=imrotate(I,45,'bilinear'); %對圖像進行旋轉 %圍繞圖像中心旋轉angle度,正表示逆時針旋轉,負表示正時針旋轉。 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
3.imcrop函數實現圖像的剪切
I=imread('drum.bmp'); J=imcrop(I,[75 68 130 112]); %對圖像進行剪切 %[xmin,ymin,wight,height] subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
3)特定區域處理
1.roipoly函數用於選擇圖像中的多邊形區域
I=imread('drum.bmp'); c=[200 250 278 248 199 172]; r=[21 21 75 121 121 75]; J=roipoly(I,c,r); subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J);
2.roicolor函數是對RGB圖像和灰度圖像實現按灰度值或亮度值選擇區域進行處理
a=imread('drum.bmp'); I=rgb2gray(a); J=roipoly(I,128,225); %按灰度值選擇的區域 subplot(1,2,1),imshow(I); subplot(1,2,2),imshow(J);
3.poly2mask函數轉化指定的多邊形區域為二值掩模
x=[63 186 54 190 63]; y=[60 60 209 204 60]; I=poly2mask(x,y,256,256); %轉化指定的多邊形區域為二值掩模 imshow(I); hold on %打開圖形保持功能 plot(x,y,'b','LineWidth',2); %plot(x,y,'r','limewidth',4);線條粗細;r-紅色,g-綠色,b-藍色,c-青色,m-紫色,k-黑色,w-白色,y-黃色 hold off %關閉圖形保持功能
4.roifilt2函數實現區域濾波
a=imread('drum.bmp'); I=rgb2gray(a); c=[200 250 278 248 199 172] r=[21 21 75 121 121 75] BW=roipoly(I,c,r); %roipoly函數用於選擇圖像中的多邊形區域 h=fspecial('unsharp'); %unsharp為對比度增強濾波器 J=roifilt2(h,I,BW); %區域濾波 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
5.roifill函數實現對特定區域進行填充
a=imread('drum.jpg'); I=rgb2gray(a); c=[200 250 278 248 199 172] r=[21 21 75 121 121 75] J=roifill(I,c,r); %roifill函數實現對特定區域進行填充 subplot(1,2,1),imshow(I) subplot(1,2,2),imshow(J)
4)圖像變換
1.fft2函數和ifft2函數分別是計算二維的快速傅里葉變換和反變換
f=zeros(100,100); f(20:70,40:60)=1; imshow(f); F=fft2(f); F2=log(abs(F)); imshow(F2),colorbar subplot(1,2,1),imshow(f)
2.edge函數用於提取圖像的邊緣,radon函數用來計算指定方向上圖像矩陣的投影
% 2.edge函數用於提取圖像的邊緣,radon函數用來計算指定方向上圖像矩陣的投影 RGB=imread('drum.bmp'); I=rgb2gray(RGB); BW=edge(I) figure,imshow(BW) theta=0:179; %角度從1取到179,這樣randon就得到了不同角度下的徑向上的圖像場強值,即R矩陣。 [R,xp]=radon(BW,theta); %圖像矩陣的投影 %R是點的數量的多少,xp是對應的坐標位置,xp只是對應的角度,跟theta一樣 figure,imagesc(theta,xp,R);colormap(hot); xlabel('\theta(degrees)'); %對x軸加標題 ylabel('x\prime'); %對y軸加標題 title('R_{\theta}(x\prime)'); %對圖像加標題 colorbar %顏色映射