數字圖像處理及MATLAB實現實驗一


一、圖像文件的讀寫

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  %顏色映射

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM