《MATLAB实践教程》课件第10章_第1页
《MATLAB实践教程》课件第10章_第2页
《MATLAB实践教程》课件第10章_第3页
《MATLAB实践教程》课件第10章_第4页
《MATLAB实践教程》课件第10章_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

10.1数字图像的数学描述

10.2图像变换

10.3模板运算与图像滤波

10.4边缘检测

10.5对象提取

第10单元MATLAB图像处理

10.1.1图像坐标系和像素坐标

图像坐标系和像素坐标如图10-1所示。10.1数字图像的数学描述图10-1图像坐标系和像素坐标10.1.2图像的数学表达

RGB模型中,彩色图像采用三维阵列表示,它由下面的三个二维阵列构成:

,,

彩色图像中的像素用向量表示:10.1.3图像读取、显示、存盘的MATLAB编程

采用imread读图像函数、imshow显图像函数和imwrite写图像函数编程。程序如下:

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彩色图像变换为灰度图像

图像中的色彩数据,对某些研究问题而言是冗余信息,往往需要将彩色图像变换成灰度图像。灰度图像可用灰度矩阵GR表征:10.2图像变换

采用rgb2gray函数编程将彩色图像变换为灰度图像。程序如下:

char1='D:\MyDocuments\'; %指定图像文件读取的路径

char2='Autumn'; %指定欲读图像文件的名称

char3='Tulips'; %指定另一个欲读图像文件的名称

char4='.jpg'; %指定欲读图像文件的扩展名

xx=imread([char1char2char4]); %按指定全路径读取图像文件并赋值给变量xx

yy=imread([char1char3char4]); %按指定全路径读取图像文件并赋值给变量yy

gray_xx=rgb2gray(xx); %将彩色图像xx变为灰度图像gray_xx

gray_yy=rgb2gray(yy); %将彩色图像yy变为灰度图像gray_yy

figure,imshow(gray_xx); %将矩阵gray_xx显示为屏幕图像

figure,imshow(gray_yy); %将矩阵gray_yy显示为屏幕图像

程序执行的结果如图10-2所示。(a)图像1(b)图像2图10-2彩色图像变换为灰度图像10.2.2彩色或灰度图像变换为二值图像

采用Otsu‘s方法计算阈值T,灰度大于T的像素群取值1,小于T的像素群取值0,灰度图变换成二值图,它把图像化分成了仅留欲处理对象和黑色背景的两个区域,使对象从背景中凸显出来。二值化图像可用二值矩阵BW表征,其元素值符合下面关系:这一处理过程的关键是阈值的选择,采用Otsu‘s阈值进行二值化处理,对原本具有二值倾向的图像,能使图像中的对象特征突出,保留较多的有用信息,便于后续的特征量提取,而对于二值倾向较弱的图像,亦倾向于保留尽可能多的有用信息。

采用im2bw函数编程将彩色图像变换为二值图像。程序如下:

char1='D:\MyDocuments\'; %指定图像文件读取的路径

char2='Autumn'; %指定图像文件的名称

char3='Tulips'; %指定另一个图像文件的名称

char4='.jpg'; %指定图像文件的扩展名

xx=imread([char1char2char4]); %按指定全路径读取图像文件并赋值给变量xx

yy=imread([char1char3char4]); %按指定全路径读取图像文件并赋值给变量yy

binary_xx=im2bw(xx,0.35);%将彩色图像xx变为二值图像binary_xx

binary_yy=im2bw(yy,0.65);%将彩色图像xx变为二值图像binary_xx

figure,imshow(binary_xx);%将矩阵binary_xx显示为屏幕图像

figure,imshow(binary_yy);%将矩阵binary_yy显示为屏幕图像

程序执行的结果如图10-3所示。(a)(b)图10-3彩色图像转换为二值图像10.2.3灰度频数分布图

以横坐标为像素灰度级(0~255)、纵坐标为图像中相应灰度级像素的个数,绘制图像的灰度频数分布图。灰度频数分布是图像处理的重要辅助工具。

采用imhist函数编程绘制图像的灰度频数分布图。程序如下:

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

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

char3='Tulips'; %指定另一个欲存取图像文件的名称

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

xx=imread([char1char2char4]);%按指定全路径读取图像文件并赋值给变量xx

yy=imread([char1char3char4]);%按指定全路径读取图像文件并赋值给变量yygray_xx=rgb2gray(xx); %将彩色图像xx变为灰度图像gray_xx

gray_yy=rgb2gray(yy); %将彩色图像yy变为灰度图像gray_yy

subplot(221);imshow(gray_xx);%将矩阵gray_xx显示为屏幕图像

title('图像的灰度化处理');

subplot(222);imhist(gray_xx); %绘制图像gray_xx的灰度频数分布图

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

ylabel('频数','FontSize',11,'FontName','Arial');

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

subplot(223);imshow(gray_yy); %将矩阵gray_yy显示为屏幕图像

title('图像的灰度化处理');

subplot(224);imhist(gray_yy); %绘制图像gray_yy的灰度频数分布图

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

ylabel('频数','FontSize',11,'FontName','Arial');

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

程序执行的结果如图10-4所示。图10-4图像的灰度频数分布图10.2.4图像代数运算

两图像的加减乘除运算称作图像代数运算。可采用MATLAB/imadd函数、imsubtract函数、immultiply函数和imdivide函数编程实现。

采用imadd、imsubtract、immultiply、imdivide等函数编程实现代数运算。程序如下:

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('二值图像反片');利用图像矩阵直接进行代数运算应注意下述问题。

(1) MATLAB读入的图像矩阵一般是unit8或unit16格式,图像代数运算不支持这种格式,直接进行图像矩阵代数运算需利用double函数将其变换为双精度数据;

(2)图像显示函数imshow要求图像矩阵的元素值在0与1之间,故图像矩阵需归一化;

(3)图像减法会产生负值,而图像负值是无定义的,图像矩阵需将负值变为正数;

(4)图像除法应避开除以0。

程序执行的结果如图10-5所示。图10-5图像代数运算的生成图像10.2.5图像几何变换

图像的缩放、剪切、平移、旋转、反转、延展、映射、内插、几何变形、几何校正、图像配准等操作称作图像的几何变换。

采用imrotate、fliplr、imresize、imcrop等函数编程实现图像的几何变换。程序如下:

char1='D:\MyDocuments\'; %指定读取图像文件的路径

char3='snow'; %指定要读取的图像文件名

char5='.bmp'; %指定要读取的图像文件扩展名

xx=imread([char1char3char5]);%按指定全路径读取图像文件并赋值给变量xx

xx_rotate=imrotate(xx,30); %图像旋转30度

xx_fliplr(:,:,1)=fliplr(xx(:,:,1)); %图像矩阵第一页左右翻转

xx_fliplr(:,:,2)=fliplr(xx(:,:,2)); %图像矩阵第二页左右翻转xx_fliplr(:,:,3)=fliplr(xx(:,:,3)); %图像矩阵第三页左右翻转

xx_flipud(:,:,1)=flipud(xx(:,:,1)); %图像矩阵第一页上下翻转

xx_flipud(:,:,2)=flipud(xx(:,:,2)); %图像矩阵第二页上下翻转

xx_flipud(:,:,3)=flipud(xx(:,:,3)); %图像矩阵第三页上下翻转

xx_resize=imresize(xx,0.75); %按比例0.75进行图像插值缩放

xx_crop=imcrop(xx); %图像鼠标选择剪切

续程序:

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

subplot(3,2,2);subimage(xx_crop);title('鼠标选择剪切图像');

subplot(3,2,3);subimage(xx_fliplr);title('左右翻转图像');

subplot(3,2,4);subimage(xx_rotate);title('插值旋转图像');

subplot(3,2,5);subimage(xx_flipud);title('上下翻转图像');

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

程序执行的结果如图10-6所示。图10-6图像几何变换的生成图像10.2.6图像灰度变换

灰度变换是图像增强的一种重要手段,使图像对比度扩展,图像更加清晰,特征更加明显。灰度频数分布图给出了一幅图像概貌的描述,可通过修改灰度频数分布图来得到图像增强。

采用imadjust函数编程实现图像的灰度变换。程序如下:

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('非线性变换图像灰度分布');

程序执行的结果如图10-7所示。图10-7图像的灰度线性变换与非线性变换10.2.7DFT离散傅里叶变换

离散傅里叶变换DFT可用于模板匹配,当然还有其它的用途。模板匹配是检测图像中某一目标的一种简单方法,基本做法是:选取原图像和目标图像,按原图像尺寸制作目标模板图像,利用fftn函数对原图像和模板图像进行DFT离散傅里叶变换,然后进行卷积运算以识别相关性目标,利用imadjust函数进行匹配图像增强,以便于观察匹配结果。

采用fftn函数编程实现图像的傅里叶变换、反变换、卷积和模板匹配。程序如下:

clc;closeall;clearall;

char1='D:\MyDocuments\';

char2='Follow';

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

xx=imread([char1char2char4]);

xx=double(xx)/255; %格式变换并归一化

[xx_crop0,rect]=imcrop(xx); %在原图中剪切目标图像

xx_crop=imrotate(xx_crop0,90); %图像旋转为卷积计算做准备

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); %模板图像傅里叶变换%原图像与模板图像的快速卷积识别相关性匹配目标

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

zz=imadjust(zz,[0.550.8],[0,1],50); %灰度变换对匹配目标增强

%zz=imcomplement(zz); %匹配结果图像反片

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

subplot(2,2,2);imshow(xx_crop0);title('目标图像');

subplot(2,2,3);imshow(yy);title('目标模板图像');

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

程序执行的结果如图10-8所示。图10-8图像的模板匹配(较亮处为匹配好的目标位置)10.2.8DCT离散余弦变换

与DFT不同,离散余弦变换DCT是一种实数域上的变换,算法速度比DFT快,其基函数为余弦函数,图像可表示为以DCT变换为权的基函数的加权组合。DCT用法之一是,先对图像进行DCT变换,调整DCT值(权),再利用IDCT反变换重建调整DCT值后的图像。

采用dct2函数和idct2函数编程实现图像的离散余弦变换和重建。程序如下:

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变换结果');

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变换结果');

程序执行的结果如图10-9所示。图10-9离散余弦变换DCT用于图像恢复10.3.1低通模板运算实现图像平滑

采用3×3和9×9低通邻域平均模板对图像平滑,试检验模板尺寸对图像模糊的影响。程序如下: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');

程序执行的结果如图10-10所示。图10-10利用低通邻域平均模板平滑图像原图像原灰度图像3*3average9*9medium10.3.2低通模板运算实现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');

程序执行的结果如图10-11所示。图10-11利用中值滤波和平均滤波去噪原灰度图像addnoise5*5average3*5medium10.3.3高通模板运算实现图像边缘增强

采用sobel和prewitt高通模板实现模糊图像的滤波和边缘增强,试检验模板的滤波效果。程序如下:

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');

程序执行的结果如图10-12所示。图10-12利用高通滤波使图像边缘增强原灰度图像3*3lowpassprewittsobel10.3.4高通模板运算实现图像边缘检测

利用一阶Sobel和二阶Laplacian高通模板执行灰度图像边缘检测,试检验边缘检测的效果。程序如下:

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');

程序执行的结果如图10-13所示。图10-13利用laplacian和sobel算子滤波使图像边缘凸显原图像原灰度图像laplaciansobel10.3.5进一步的试验

利用fspecial函数选择不同算子,再利用filter2函数对图像滤波,设置imadjust函数里的灰度范围和校正系数值以增强图像显示效果。选用不同图像进行练习。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论