《MATLAB實踐教程》課件第10章_第1頁
《MATLAB實踐教程》課件第10章_第2頁
《MATLAB實踐教程》課件第10章_第3頁
《MATLAB實踐教程》課件第10章_第4頁
《MATLAB實踐教程》課件第10章_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

10.1數(shù)字圖像的數(shù)學(xué)描述

10.2圖像變換

10.3模板運算與圖像濾波

10.4邊緣檢測

10.5對象提取

第10單元MATLAB圖像處理

10.1.1圖像坐標(biāo)系和像素坐標(biāo)

圖像坐標(biāo)系和像素坐標(biāo)如圖10-1所示。10.1數(shù)字圖像的數(shù)學(xué)描述圖10-1圖像坐標(biāo)系和像素坐標(biāo)10.1.2圖像的數(shù)學(xué)表達

RGB模型中,彩色圖像采用三維陣列表示,它由下面的三個二維陣列構(gòu)成:

,,

彩色圖像中的像素用向量表示:10.1.3圖像讀取、顯示、存盤的MATLAB編程

采用imread讀圖像函數(shù)、imshow顯圖像函數(shù)和imwrite寫圖像函數(shù)編程。程序如下:

char1='D:\MyDocuments\'; %指定圖像文件存放的路徑

char2='Autumn'; %指定欲存取圖像文件的名稱

char3='Tulips'; %指定另一個欲存取圖像文件的名稱

char4='.jpg'; %指定欲存取圖像文件的擴展名

xx=imread([char1char2char4]);%按指定全路徑讀取圖像并賦值給變量xx

yy=imread([char1char3char4]);%按指定全路徑讀取圖像并賦值給變量yy

figure,imshow(xx); %將矩陣xx顯示為屏幕圖像

figure,imshow(yy); %將矩陣yy顯示為屏幕圖像

imwrite(xx,[char1,'Autumn1',char4],'jpeg'); %將矩陣xx按指定全路徑和格式存盤

imwrite(yy,[char1,'Tulips1',char4],'jpeg'); %將矩陣yy按指定全路徑和格式存盤10.2.1彩色圖像變換為灰度圖像

圖像中的色彩數(shù)據(jù),對某些研究問題而言是冗余信息,往往需要將彩色圖像變換成灰度圖像?;叶葓D像可用灰度矩陣GR表征:10.2圖像變換

采用rgb2gray函數(shù)編程將彩色圖像變換為灰度圖像。程序如下:

char1='D:\MyDocuments\'; %指定圖像文件讀取的路徑

char2='Autumn'; %指定欲讀圖像文件的名稱

char3='Tulips'; %指定另一個欲讀圖像文件的名稱

char4='.jpg'; %指定欲讀圖像文件的擴展名

xx=imread([char1char2char4]); %按指定全路徑讀取圖像文件并賦值給變量xx

yy=imread([char1char3char4]); %按指定全路徑讀取圖像文件并賦值給變量yy

gray_xx=rgb2gray(xx); %將彩色圖像xx變?yōu)榛叶葓D像gray_xx

gray_yy=rgb2gray(yy); %將彩色圖像yy變?yōu)榛叶葓D像gray_yy

figure,imshow(gray_xx); %將矩陣gray_xx顯示為屏幕圖像

figure,imshow(gray_yy); %將矩陣gray_yy顯示為屏幕圖像

程序執(zhí)行的結(jié)果如圖10-2所示。(a)圖像1(b)圖像2圖10-2彩色圖像變換為灰度圖像10.2.2彩色或灰度圖像變換為二值圖像

采用Otsu‘s方法計算閾值T,灰度大于T的像素群取值1,小于T的像素群取值0,灰度圖變換成二值圖,它把圖像化分成了僅留欲處理對象和黑色背景的兩個區(qū)域,使對象從背景中凸顯出來。二值化圖像可用二值矩陣BW表征,其元素值符合下面關(guān)系:這一處理過程的關(guān)鍵是閾值的選擇,采用Otsu‘s閾值進行二值化處理,對原本具有二值傾向的圖像,能使圖像中的對象特征突出,保留較多的有用信息,便于后續(xù)的特征量提取,而對于二值傾向較弱的圖像,亦傾向于保留盡可能多的有用信息。

采用im2bw函數(shù)編程將彩色圖像變換為二值圖像。程序如下:

char1='D:\MyDocuments\'; %指定圖像文件讀取的路徑

char2='Autumn'; %指定圖像文件的名稱

char3='Tulips'; %指定另一個圖像文件的名稱

char4='.jpg'; %指定圖像文件的擴展名

xx=imread([char1char2char4]); %按指定全路徑讀取圖像文件并賦值給變量xx

yy=imread([char1char3char4]); %按指定全路徑讀取圖像文件并賦值給變量yy

binary_xx=im2bw(xx,0.35);%將彩色圖像xx變?yōu)槎祱D像binary_xx

binary_yy=im2bw(yy,0.65);%將彩色圖像xx變?yōu)槎祱D像binary_xx

figure,imshow(binary_xx);%將矩陣binary_xx顯示為屏幕圖像

figure,imshow(binary_yy);%將矩陣binary_yy顯示為屏幕圖像

程序執(zhí)行的結(jié)果如圖10-3所示。(a)(b)圖10-3彩色圖像轉(zhuǎn)換為二值圖像10.2.3灰度頻數(shù)分布圖

以橫坐標(biāo)為像素灰度級(0~255)、縱坐標(biāo)為圖像中相應(yīng)灰度級像素的個數(shù),繪制圖像的灰度頻數(shù)分布圖。灰度頻數(shù)分布是圖像處理的重要輔助工具。

采用imhist函數(shù)編程繪制圖像的灰度頻數(shù)分布圖。程序如下:

char1='D:\MyDocuments\'; %指定圖像文件存放的路徑

char2='Autumn'; %指定欲存取圖像文件的名稱

char3='Tulips'; %指定另一個欲存取圖像文件的名稱

char4='.jpg'; %指定欲存取圖像文件的擴展名

xx=imread([char1char2char4]);%按指定全路徑讀取圖像文件并賦值給變量xx

yy=imread([char1char3char4]);%按指定全路徑讀取圖像文件并賦值給變量yygray_xx=rgb2gray(xx); %將彩色圖像xx變?yōu)榛叶葓D像gray_xx

gray_yy=rgb2gray(yy); %將彩色圖像yy變?yōu)榛叶葓D像gray_yy

subplot(221);imshow(gray_xx);%將矩陣gray_xx顯示為屏幕圖像

title('圖像的灰度化處理');

subplot(222);imhist(gray_xx); %繪制圖像gray_xx的灰度頻數(shù)分布圖

xlabel('灰度級','FontSize',11,'FontName','Arial');

ylabel('頻數(shù)','FontSize',11,'FontName','Arial');

title('圖像的灰度分布');

subplot(223);imshow(gray_yy); %將矩陣gray_yy顯示為屏幕圖像

title('圖像的灰度化處理');

subplot(224);imhist(gray_yy); %繪制圖像gray_yy的灰度頻數(shù)分布圖

xlabel('灰度級','FontSize',11,'FontName','Arial');

ylabel('頻數(shù)','FontSize',11,'FontName','Arial');

title('圖像的灰度分布');

程序執(zhí)行的結(jié)果如圖10-4所示。圖10-4圖像的灰度頻數(shù)分布圖10.2.4圖像代數(shù)運算

兩圖像的加減乘除運算稱作圖像代數(shù)運算??刹捎肕ATLAB/imadd函數(shù)、imsubtract函數(shù)、immultiply函數(shù)和imdivide函數(shù)編程實現(xiàn)。

采用imadd、imsubtract、immultiply、imdivide等函數(shù)編程實現(xiàn)代數(shù)運算。程序如下:

char1='D:\MyDocuments\'; %指定圖像文件讀取的路徑

char2='Follow'; %指定第1個欲讀取的圖像文件名

char3='Bliss'; %指定第2個欲讀取的圖像文件名

char4='.jpg'; %指定第1個圖像文件的擴展名

char5='.bmp'; %指定第2個圖像文件的擴展名

xx=imread([char1char2char4]); %按指定全路徑讀取第1個圖像文件賦值給xx

yy=imread([char1char3char5]); %按指定全路徑讀取第2個圖像文件賦值給yyxxyy_add=imadd(xx,yy); %圖像相加

xxyy_subt=imsubtract(xx,yy); %圖像相減

xxyy_mult=immultiply(xx,yy); %圖像相乘

xxyy_div=imdivide(xx,yy); %圖像相除

gray_xx=rgb2gray(xx); %第1個圖像生成灰度圖

xx_comp=imcomplement(gray_xx); %灰度圖像反片

binary_yy=im2bw(yy,0.50); %生成二值圖

yy_comp=imcomplement(binary_yy); %二值圖像反片

subplot(2,2,1);imshow(xx);title('原圖像xx');

subplot(2,2,2);imshow(yy);title('原圖像yy');subplot(2,2,3);imshow(xxyy_add);title('圖像相加');

subplot(2,2,4);imshow(xxyy_subt);title('圖像相減');

figure,subplot(2,2,1);imshow(xxyy_mult);title('圖像相乘');

subplot(2,2,2);imshow(xxyy_div);title('圖像相除');

subplot(2,2,3);imshow(xx_comp);title('灰度圖像反片');

subplot(2,2,4);imshow(yy_comp);title('二值圖像反片');利用圖像矩陣直接進行代數(shù)運算應(yīng)注意下述問題。

(1)?MATLAB讀入的圖像矩陣一般是unit8或unit16格式,圖像代數(shù)運算不支持這種格式,直接進行圖像矩陣代數(shù)運算需利用double函數(shù)將其變換為雙精度數(shù)據(jù);

(2)圖像顯示函數(shù)imshow要求圖像矩陣的元素值在0與1之間,故圖像矩陣需歸一化;

(3)圖像減法會產(chǎn)生負值,而圖像負值是無定義的,圖像矩陣需將負值變?yōu)檎龜?shù);

(4)圖像除法應(yīng)避開除以0。

程序執(zhí)行的結(jié)果如圖10-5所示。圖10-5圖像代數(shù)運算的生成圖像10.2.5圖像幾何變換

圖像的縮放、剪切、平移、旋轉(zhuǎn)、反轉(zhuǎn)、延展、映射、內(nèi)插、幾何變形、幾何校正、圖像配準(zhǔn)等操作稱作圖像的幾何變換。

采用imrotate、fliplr、imresize、imcrop等函數(shù)編程實現(xiàn)圖像的幾何變換。程序如下:

char1='D:\MyDocuments\'; %指定讀取圖像文件的路徑

char3='snow'; %指定要讀取的圖像文件名

char5='.bmp'; %指定要讀取的圖像文件擴展名

xx=imread([char1char3char5]);%按指定全路徑讀取圖像文件并賦值給變量xx

xx_rotate=imrotate(xx,30); %圖像旋轉(zhuǎn)30度

xx_fliplr(:,:,1)=fliplr(xx(:,:,1)); %圖像矩陣第一頁左右翻轉(zhuǎn)

xx_fliplr(:,:,2)=fliplr(xx(:,:,2)); %圖像矩陣第二頁左右翻轉(zhuǎn)xx_fliplr(:,:,3)=fliplr(xx(:,:,3)); %圖像矩陣第三頁左右翻轉(zhuǎn)

xx_flipud(:,:,1)=flipud(xx(:,:,1)); %圖像矩陣第一頁上下翻轉(zhuǎn)

xx_flipud(:,:,2)=flipud(xx(:,:,2)); %圖像矩陣第二頁上下翻轉(zhuǎn)

xx_flipud(:,:,3)=flipud(xx(:,:,3)); %圖像矩陣第三頁上下翻轉(zhuǎn)

xx_resize=imresize(xx,0.75); %按比例0.75進行圖像插值縮放

xx_crop=imcrop(xx); %圖像鼠標(biāo)選擇剪切

續(xù)程序:

subplot(3,2,1);subimage(xx);title('原圖像');

subplot(3,2,2);subimage(xx_crop);title('鼠標(biāo)選擇剪切圖像');

subplot(3,2,3);subimage(xx_fliplr);title('左右翻轉(zhuǎn)圖像');

subplot(3,2,4);subimage(xx_rotate);title('插值旋轉(zhuǎn)圖像');

subplot(3,2,5);subimage(xx_flipud);title('上下翻轉(zhuǎn)圖像');

subplot(3,2,6);subimage(xx_resize);title('插值縮放圖像');

程序執(zhí)行的結(jié)果如圖10-6所示。圖10-6圖像幾何變換的生成圖像10.2.6圖像灰度變換

灰度變換是圖像增強的一種重要手段,使圖像對比度擴展,圖像更加清晰,特征更加明顯?;叶阮l數(shù)分布圖給出了一幅圖像概貌的描述,可通過修改灰度頻數(shù)分布圖來得到圖像增強。

采用imadjust函數(shù)編程實現(xiàn)圖像的灰度變換。程序如下:

clc;closeall;clearall;

char1='E:\Users\MyMATLABFiles\';

char2='tomato01';

char4='.jpg';

xx=imread([char1char2char4]);

gray_xx=rgb2gray(xx);

new1_xx=imadjust(xx,[0.35,0.6],[0,1],1);

gray_new1_xx=rgb2gray(new1_xx);new2_xx=imadjust(xx,[0.550.8],[0,1],0.1);

gray_new2_xx=rgb2gray(new2_xx);

subplot(3,2,1),imshow(xx);title('原圖像');

subplot(3,2,2),imhist(gray_xx,100);title('原圖像灰度分布');

subplot(3,2,3),imshow(new1_xx);title('線性灰度變換圖像');

subplot(3,2,4),imhist(gray_new1_xx,100);title('線性變換圖像灰度分布');

subplot(3,2,5),imshow(new2_xx);title('非線性灰度變換圖像');

subplot(3,2,6),imhist(gray_new2_xx,100);title('非線性變換圖像灰度分布');

程序執(zhí)行的結(jié)果如圖10-7所示。圖10-7圖像的灰度線性變換與非線性變換10.2.7DFT離散傅里葉變換

離散傅里葉變換DFT可用于模板匹配,當(dāng)然還有其它的用途。模板匹配是檢測圖像中某一目標(biāo)的一種簡單方法,基本做法是:選取原圖像和目標(biāo)圖像,按原圖像尺寸制作目標(biāo)模板圖像,利用fftn函數(shù)對原圖像和模板圖像進行DFT離散傅里葉變換,然后進行卷積運算以識別相關(guān)性目標(biāo),利用imadjust函數(shù)進行匹配圖像增強,以便于觀察匹配結(jié)果。

采用fftn函數(shù)編程實現(xiàn)圖像的傅里葉變換、反變換、卷積和模板匹配。程序如下:

clc;closeall;clearall;

char1='D:\MyDocuments\';

char2='Follow';

%char2='man';char4='.jpg';

xx=imread([char1char2char4]);

xx=double(xx)/255; %格式變換并歸一化

[xx_crop0,rect]=imcrop(xx); %在原圖中剪切目標(biāo)圖像

xx_crop=imrotate(xx_crop0,90); %圖像旋轉(zhuǎn)為卷積計算做準(zhǔn)備

nx_crop=size(xx_crop);nx=size(xx);

yy=zeros(size(xx,1),size(xx,2),size(xx,3));

yy(1:nx_crop(1),1:nx_crop(2),:)=xx_crop;

xx_fft=fftn(xx); %原圖像傅里葉變換

yy_fft=fftn(yy); %模板圖像傅里葉變換%原圖像與模板圖像的快速卷積識別相關(guān)性匹配目標(biāo)

zz=real(ifftn(xx_fft.*yy_fft))/max(max(max(ifftn(xx_fft.*yy_fft))));

zz=imadjust(zz,[0.550.8],[0,1],50); %灰度變換對匹配目標(biāo)增強

%zz=imcomplement(zz); %匹配結(jié)果圖像反片

subplot(2,2,1);imshow(xx);title('原圖像');

subplot(2,2,2);imshow(xx_crop0);title('目標(biāo)圖像');

subplot(2,2,3);imshow(yy);title('目標(biāo)模板圖像');

subplot(2,2,4);imshow(zz);title('模板匹配結(jié)果');

程序執(zhí)行的結(jié)果如圖10-8所示。圖10-8圖像的模板匹配(較亮處為匹配好的目標(biāo)位置)10.2.8DCT離散余弦變換

與DFT不同,離散余弦變換DCT是一種實數(shù)域上的變換,算法速度比DFT快,其基函數(shù)為余弦函數(shù),圖像可表示為以DCT變換為權(quán)的基函數(shù)的加權(quán)組合。DCT用法之一是,先對圖像進行DCT變換,調(diào)整DCT值(權(quán)),再利用IDCT反變換重建調(diào)整DCT值后的圖像。

采用dct2函數(shù)和idct2函數(shù)編程實現(xiàn)圖像的離散余弦變換和重建。程序如下:

clc;closeall;clearall;

char1='D:\MyDocuments\';

char2='Follow';

char4='.jpg';xx=imread([char1char2char4]);

subplot(2,2,1);imshow(xx);title('原圖像');

gray_xx=rgb2gray(xx);

subplot(2,2,2);imshow(gray_xx);title('原圖像的灰度圖');

subplot(2,2,3);dct_xx=dct2(gray_xx);imshow(log(abs(dct_xx)),[]);%DCT變換

colormap(jet(64)),colorbar;title('DCT變換結(jié)果');

dct_xx(abs(dct_xx)<10)=0;%DCT變換絕對值小于10的置0

idct_xx=idct2(dct_xx)/255;%IDCT變換重建圖像

subplot(2,2,4);imshow(idct_xx,[]);title('IDCT變換結(jié)果');

程序執(zhí)行的結(jié)果如圖10-9所示。圖10-9離散余弦變換DCT用于圖像恢復(fù)10.3.1低通模板運算實現(xiàn)圖像平滑

采用3×3和9×9低通鄰域平均模板對圖像平滑,試檢驗?zāi)0宄叽鐚D像模糊的影響。程序如下:10.3模板運算與圖像濾波char1='D:\MyDocuments\';char2='Follow';char4='.jpg';

xx=imread([char1char2char4]);

gray_xx=rgb2gray(xx);

gray_xx=imadjust(gray_xx,[0.2,0.7],[0,1],0.6);

I=double(gray_xx)/255;

J=fspecial('average');J1=filter2(J,I); %3*3低通鄰域平均模板

K=fspecial('average',9);K1=filter2(K,I); %9*9低通鄰域平均模板

subplot(2,2,1);imshow(xx);title('原圖像');

subplot(2,2,2);imshow(I);title('原灰度圖像');

subplot(2,2,3);imshow(J1);title('3*3average');

subplot(2,2,4);imshow(K1);title('9*9average');

程序執(zhí)行的結(jié)果如圖10-10所示。圖10-10利用低通鄰域平均模板平滑圖像原圖像原灰度圖像3*3average9*9medium10.3.2低通模板運算實現(xiàn)Gauss白噪聲濾除

采用低通模板對含Gauss白噪聲圖像實施濾波,試檢驗5×5線性鄰域平均模板和3×5中值濾波器非線性模板對噪聲的濾除效果。程序如下:

char1='D:\MyDocuments\';char2='Follow';char4='.jpg';

xx=imread([char1char2char4]);

gray_xx=rgb2gray(xx);

gray_xx=imadjust(gray_xx,[0.2,0.7],[0,1],0.6);

I=double(gray_xx)/255;

J=imnoise(I,'gaussian',0,0.01); %在圖像中添加gaussian噪聲

K=fspecial('average',5);K1=filter2(K,J); %5*5低通平均模板

L=medfilt2(J,[35]); %3*5低通中值模板

figure,subplot(2,2,1);imshow(I);title('原灰度圖像');

subplot(2,2,2);imshow(J);title('addnoise');

subplot(2,2,3);imshow(K1);title('5*5average');

subplot(2,2,4);imshow(L);title('3*5medium');

程序執(zhí)行的結(jié)果如圖10-11所示。圖10-11利用中值濾波和平均濾波去噪原灰度圖像addnoise5*5average3*5medium10.3.3高通模板運算實現(xiàn)圖像邊緣增強

采用sobel和prewitt高通模板實現(xiàn)模糊圖像的濾波和邊緣增強,試檢驗?zāi)0宓臑V波效果。程序如下:

char1='D:\MyDocuments\';char2='Follow';char4='.jpg';

xx=imread([char1char2char4]);

gray_xx=rgb2gray(xx);

gray_xx=imadjust(gray_xx,[0.2,0.7],[0,1],0.6);

I=double(gray_xx)/255;

J=fspecial('average',3);J1=filter2(J,I);

K=fspecial('prewitt');K1=filter2(K,I)*5;

L=fspecial('sobel');L1=filter2(L,I)*5;

subplot(2,2,1);imshow(I);title('原灰度圖像');

subplot(2,2,2);imshow(J1);title('3*3lowpass');

subplot(2,2,3);imshow(K1);title('prewitt');

subplot(2,2,4);imshow(L1);title('sobel');

程序執(zhí)行的結(jié)果如圖10-12所示。圖10-12利用高通濾波使圖像邊緣增強原灰度圖像3*3lowpassprewittsobel10.3.4高通模板運算實現(xiàn)圖像邊緣檢測

利用一階Sobel和二階Laplacian高通模板執(zhí)行灰度圖像邊緣檢測,試檢驗邊緣檢測的效果。程序如下:

char1='D:\MyDocuments\';char2='Follow';char4='.jpg';

xx=imread([char1char2char4]);

gray_xx=rgb2gray(xx);

gray_xx=imadjust(gray_xx,[0.2,0.7],[0,1],0.6);

I=double(gray_xx)/255;

K=fspecial('laplacian',0.7);

K1=filter2(K,I);

K1=imadjust(K1,[0.1,0.6],[0,1],0.25);

L=fspecial('sobel');

L1=filter2(L,I);

L1=imadjust(L1,[0.1,0.6],[0,1],0.25);

figure,subplot(2,2,1);imshow(xx);title('原圖像');

subplot(2,2,2);imshow(I);title('原灰度圖像');

subplot(2,2,3);imshow(K1);title('laplacian');

subplot(2,2,4);imshow(L1);title('sobel');

程序執(zhí)行的結(jié)果如圖10-13所示。圖10-13利用laplacian和sobel算子濾波使圖像邊緣凸顯原圖像原灰度圖像laplaciansobel10.3.5進一步的試驗

利用fspecial函數(shù)選擇不同算子,再利用filter2函數(shù)對圖像濾波,設(shè)置imadjust函數(shù)里的灰度范圍和校正系數(shù)值以增強圖像顯示效果。選用不同圖像進行練習(xí)。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論