专业综合实验指导书

更新时间:2024-01-17 10:53:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

专业综合实验指导书

――数字图像处理

(电子信息专业用)

长春工业大学计算机科学与工程学院

数字图像处理课程组

一、目的和意义

专业综合实验旨在将图像处理基础理论论述与软件实践方法相结合,指导学生如何解决图像处理过程中经常遇到的实际问题,提高学生的综合素质。所选择的软件工具来自公认的科学计算方面的引领者MathWorks公司的MATLAB图像处理工具箱,它为数字图像处理提供了一个稳定、宽泛的软件实现平台,其在教育和工业应用中同样占有优势。本书重点强调了图像处理的基本问题的实现,帮助学生巩固对相关理论知识的理解。

二、实验要求

结合图像处理的基本知识,培养学生运用MATLAB软件进行编程并仿真实现,提高软件设计和编程能力。通过分析实验结果,总结及撰写技术分析报告。

三、主要仪器设备及环境

微机Pentium 4 以上,32M以上内存,安装好WINDOWS98以上、MATLAB7.0等有关软件。

四、实验内容

(一) 常规实验项目 1.实验一 图像显示

2.实验二 图像变换 3.实验三 图像增强 4.实验四 图像分割 5.实验五 图像压缩

6.实验六 图像运算与区域处理 (二) 综合设计性实验项目

7.设计一 医学图像边缘检测算法设计

8.设计二 车牌图像处理与识别

实验一 图像显示

一、实验目的

MATLAB的图像处理工具箱提供了多种图像显示和颜色、光照技术。本实验将具体介绍Matlab中用于图像显示、颜色转换的各个函数的具体用法。

二、实验要求

1.学习图像读取、显示及保存方法。 2.学习特殊图像显示技术

3.学习图像颜色模型转换技术

三、实验内容

1.读取图像

使用函数imread可以将图像读入MATLAB环境,imread 的语法为 imread('filename') 其中,filename是一个含有图像文件全名的字符串(包括任何可用的扩展名)。注意,此处的单引号用以界定filename字符串。

如命令行

>>f=imread('d:\\image\\rice.tif');

将TIFF图像rice.tif读入图像数组f。命令行结尾处的分号用于取消输出。若命令行未包含分号,则MATLAB会立即显示该行命令的运算结果。MATLAB桌面工具条上的当前目录窗口会显示MATLAB的当前工作路径。当filename中不包含任何路径信息时,imread会从当前目录中寻找并读取图像文件。

函数size可以给出一幅图像的行数和列数: >>size(f) ans =

256 256

也可使用如下形式自动确定一幅图像的大小: >>[M,N]=size(f);

将返回图像的行数(M)和列数(N)。 2.显示图像

使用函数imshow来显示图像,该函数在显示图像的同时创建了一个图形图像句柄对象,可以通过句柄的一些参数设置显示模式。

例1 显示灰度图像

J=imread('eight.tif');

subplot(121);

imshow(J,[100,200]); %在灰度范围[100,200]内显示图像 subplot(122);

imshow(J,20); %以灰度等级20显示图像

当用imshow显示另一幅图像时,MATLAB会在屏幕上用新图像替换旧图像。为保持第一幅图像并同时显示第二幅图像,可以使用figure函数:

例2 显示二值图像

BW= imread('circles.tif');

imshow(BW) %显示二值图像 figure(2)

imshow(~BW) %显示颜色反转后的二值图像

3.保存图像

使用函数imwrite可以将图像写到磁盘上,该函数的语法为 imwrite(f,'filename')

若filename中不包含路径信息,则imwrite会将文件保存到当前的工作目录中。另一种常见但只适用于JPEG图像的函数语法是

imwrite(f,'filename.jpg','quality',q)

其中,q是一个在0到100之间的整数(由于JPEG压缩,q越小,图像的退化就越严重)。

4.特殊图像显示技术 例3 添加颜色条

I=imread('saturn.tif'); H=[121;000;-1-2-1]; I2=filter2(h,I);

imshow(I2,[]),colorbar

例4 显示多图像序列

mri=uint8(zeros(128,128,1,27)); for frame=1:27

[mri(:,:,:,frame),map]=imread('mri.tif',frame); end

imshow(mri(:,:,:,3),map);

例5 显示多帧图像

mri=uint8(zeros(128,128,1,27)); for frame=1:27

[mri(:,:,:,frame),map]=imread('mri.tif',frame); end

%montage(mri,map);

例6 动画显示

mri=uint8(zeros(128,128,1,27)); for frame=1:27

[mri(:,:,:,frame),map]=imread('mri.tif',frame); end

mov=immovie(mri,map); movie(mov);

练习使用:zoom on, zoom off, imresize, imadjust, subimage, imrotate, imcrop, warp

例7 把真彩色图像映射到柱面上

[x,y,z]=cylinder;

RGB=imread('eight.tif'); warp(x,y,z,RGB);

5.图像颜色转换技术

(1) 褪色函数 imapprox, rgb2ind 例8 图像的褪色

[X,map]=imread('canoe.tif');

[Y,newmap]=imapprox(X,map,20); imshow(X,map)

figure, imshow(Y,newmap)

(2) 练习使用颜色模型转换函数:rgb2hsv, hsv2rgb, ntsc2rgb, rgb2ntsc, rgb2ycbcr, ycbcr2rgb, rgb2gray, im2bw

rgb2hsv 函数—将RGB模型转换为HSV模型。其调用格式如下:

hsvmap=rgb2hsv(rgbmap) 将RGB空间中m×3的色彩表rgbmap转换成HSV色彩空间的颜色映射表hsvmap;

HSV=rgb2hsv(RGB) 将真彩色图像RGB转换为HSV色彩空间中的图像HSV。

rgb2ntsc函数——将RGB模型转换为NTSC模型。其调用格式如下: yiqmap=rgb2ntsc(rgbmap) 将RGB空间中m×3的色彩表rgbmap转换成YIQ色彩空间的颜色映射表yiqmap;

YIQ=rgb2ntsc(RGB) 将真彩色图像RGB转换为YIQ色彩空间中的图像YIQ。

rgb2ycbcr函数——将RGB模型转换为YCbCr模型。其调用格式如下: ycbrmap=rgb2ycbcr(rgbmap) 将RGB空间中的色彩表rgbmap转换成YCbCr空间中的颜色映射表ycbrmap;

Ycbcr=rgb2ycbcr(RGB) 将真彩色图像RGB转换为YCbCr空间中的图像YCbCr。

hsv2rgb函数——将HSV模型转换为RGB模型。其调用格式如下:

rgbmap=hsv2rgb(hsvmap) 将HSV色彩空间的颜色映射表hsvmap转换成RGB空间中的色彩表rgbmap,rgbmap和hsvmap都是m×3的矩阵;

RGB=hsv2rgb(HSV) 表示将HSV色彩空间的图像HSV转换为真彩色图像RGB。

ntsc2rgb函数——将NTSC色彩空间值转换为RGB色彩空间值。其调用格式如下:

rgbmap=ntsc2rgb(yiqmap) 将YIQ空间中m×3的颜色映射表yiqmap转换成RGB空间中的色彩表rgbmap;

RGB=ntsc2rgb(YIQ) 将NTSC色彩空间的图像YIQ转化为真彩色图像RGB。

ycbc2rgb函数——YCbCr模型转换为RGB模型。其调用格式如下:

rgbmap=ycbcr2rgb(ycbcrmap) 将YCbCr色图ycbcrmap转换到RGB色图rgbmap。rgbmap和ycbcrmap都是m×3的数组。

RGB=ycbcr2rgb(YCBCR) 将YCbCr图像YCBCR转换成真彩色图像RGB。

四.撰写技术分析报告(略)

实验二 图像变换

一、实验目的

学习灰度变换修正图像的颜色和灰度的方法。学习图像直方图的生成和修正技术的原理和实现方法,理解其对于观察图像的意义。了解图像变换的意义和手段,熟练掌握傅里叶变换等图像正交变换方法,了解二维频谱的分布特点。

二、实验要求

1. 掌握灰度变换函数的用法,对图像进行灰度变换,增强对比度,显示变

换前后的图像以及它们的灰度直方图。

2. 选择一幅直方图不均匀的图像,对其作直方图均衡化处理,显示处理前

后的图像以及它们的灰度直方图。 3. 学习傅立叶变换等正交变换技术。

三、实验内容

1.灰度调整

函数imadjust是对灰度图像进行灰度变换的基本工具。其语法为 g=imadjust(f,[low_in high_in],[low_out high_out],gamma)

此函数将图像f中的亮度值映象到g中的新值,即将low_in至high_in之间的值映射到low_out high_out之间的值。low_in以下与high_in以上的值被剪切掉了。输入图像应为uint8类、uint16类或double类图像,输出图像与输入图像有着相同的类。需要注意的是,不管f属于哪一个类,函数imadjust指定的强度值的范围均为[0,1]。如果f是uint8类图像,则函数imadjust将乘以255来确定应用中的实际值;如果f是uint16类图像,则函数imadjust将乘以65 535。为[low_in high_in]或[low_out high_out]使用空矩阵([ ])会得到默认值[0 1]。若high_out小于low_out,则输出亮度会反转。

参数gamma指定了曲线的形状,该曲线用来映射f的亮度值,以便生成图像g。gamma的取值决定了输入图像到输出图像数据的映射方式,gamma<1,增强亮度;gamma>1,增强暗度,只有当gamma=1(缺省情况)时,这种映射才是线性映射。

例1 灰度调整举例 I=imread('h1.bmp');

J=imadjust(I,[0 0.2]),[0.5 1]; imshow(I);

figure,imshow(J)

这样的操作将显著增加图像的对比度,同时也扩宽了原始图像上黑色部分的变动范围,从而使摄影师所穿着的衣服的细节能够更容易分辨。

2.直方图均衡化

直方图是图像亮度分布的概率密度函数,是图像最基本的统计特征,它反映的是图像的灰度值的分布情况和图像的明暗分布规律,。直方图操作能有效地用于图像增强,其固有的信息还可用于在其他图像处理应用中,如图像压缩与分割。直方图在软件中易于计算,也适用于商用硬件设备,因此,它们成为了实时图像处理的一个流行工具。

直方图均衡化的目的是使图像在整个灰度值动态变化范围内的分布均匀化,改善图像的亮度分布状态,增强图像的视觉效果。灰度直方图是图像预处理中涉及最广泛的基本概念之一。

直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数的过程。

直方图生成函数为imhist,其基本语法为

h=imhist(f,b)

其中,f为输入图像,h为其直方图,b是用于形成直方图的灰度级个数。若b未包含在此变量中,则其默认值为256。若处理的一幅uint8类图像,且b=2,则亮度标度范围被分成两个部分:0至127和128至255。所得的直方图将有两个值:h(1)等于图像在区间[0,127]内的像素总数,h(2)等于图像在区间[128,255]内的像素总数。

直方图均衡化由工具箱中的函数histeq实现,该函数的语法为

g=histeq(f,nlev)

式中,f为输入图像,nlev是为输出图像指定的灰度级数。若nlev等于L(输入图像中可能的灰度级的总数),则histeq直接执行变换函数T(rk)。若nlev小于L,则histeq试图划分灰度级,以便能够得到较为平坦的直方图。histeq中的默认值为nlev=64。

例2 直方图均衡化示例

I=imread('tire.tif'); % 读入原图像

J=histeq(I); %对原图像进行直方图均衡化处理 imshow(I); %显示原图像

title('原图像'); %给原图像加标题名

figure,imshow(J); %对原图像进行屏幕控制;显示直方图均衡化后的图像 title('直方图均衡化所得图像'); %给直方图均衡化后的图像加标题名

figure;subplot(121); %对直方图均衡化后的图像进行屏幕控制;作一幅子图作为并排两幅图的第1幅图

imhist(I,64); %将原图像直方图显示为64级灰度 title('原图像直方图'); %给原图像直方图加标题名 subplot(122); %作第2幅子图

imhist(J,64); %将均衡化后图像的直方图显示为64级灰度 title(‘均衡变换后的直方图’); %给均衡化后图像直方图加标题名 直方图均衡化修正后,图像直方图灰度间隔被拉大了,处理后的图像直方图分布更均匀了,图像在每个灰度级上都有像素点。从处理前后的图像可以看出,许多在原始图像中看不清楚的细节在直方图均衡化处理后所得到的图像中都变

得十分清晰。从而实现图像增强,有利于图像的分析与识别。

3.直方图匹配(规定化)

函数histeq实现直方图匹配的形式为:

g=histeq(f,hspec)

其中,f为输入图像,hspec为指定的直方图(一个由指定值构成的行向量),g为输出图像,其直方图近似于指定的直方图hspec。向量中包含对应于等分空间bin的整数值。histeq的一个特性是在length(hspec)远小于图像f中的灰度级数时,图像g的直方图通常会较好地匹配hspec。

例3 直方图规定化 I=imread('tire.tif');

hgram=50:2:250; %规定化函数 J=histeq(I,hgram); imshow(J)

title('直方图规定化所得图像') figure,imhist(J,64)

title('直方图规定化变换后的直方图')

4. 图像正交变换

图像二维正交变换在数字图像处理中扮演着重要的角色,如,在傅里叶变换(FT, Fourier Transform)域中,高频分量往往对应图像的边缘,利用这一性质可以从图像中抽取特征。又如,傅里叶变换后,图像能量往往集中在少数项上,或者说能量主要集中在低频分量上,于是通过对低频成分分配较多的比特数,对高频成分分配较少的比特数,即可实现图像数据压缩。再者,舍弃变换函数矩阵中某

些幅度小的系数,可缩减计算维数,提高计算速度等等。

在实际应用中离散傅里叶变换DFT及其逆变换可以通过使用快速傅里叶变换(FFT)算法来实现。一个大小为M×N的图像数组f可以通过使用函数fft2得到,该函数的简单语法为:

Y=fft2(X)

返回二维离散傅里叶变换,结果Y和X的大小相同。仍为M×N,数据排列形式为:数据的原点在左上角,而四个四分之一周期交汇于频率矩形的中心。

使用傅里叶变换时,需要对输入数据进行零填充。在这种情况下,调用格式如下:

Y=fft2(X,P,Q)

使用该语法,fft2将使用所要求的0的个数对输入图像进行填充,以便结果函数的大小为P×Q。

傅里叶频谱可以使用函数abs来获得:

F=abs(Y)

该函数计算数组的每一个元素的幅度(实部和虚部平方和的平方根)。 函数fftshift将变换的原点移动到频率矩形的中心。其语法为:

C=fftshift(Y)

其中,Y是用fft2计算得到的变换,C是已居中的变换。该函数变换相当于将输入图像乘以(-1)x+y所得到的结果。但要注意的是,这两种处理过程不可互换。即fftshift(fft2(f))?fft2(fftshift(f))。可以用下面的命令行显示居中后的频谱:

>>C=fftshift(Y);

>>imshow(abs(C2),[ ])

虽然频谱移中后适于观看了,但该频谱中值的动态范围(0到204 000)与8比特显示相比要大得多。此时可以使用对数变换来解决该问题。如:

>>F2=log(1+abs(C)); >>imshow(F2,[ ])

傅里叶逆变换可以用函数ifft2实现,其基本语法为 f=ifft2(F)

其中,F是傅里叶变换,f是结果图像。

例4 利用MATLAB软件实现数字图像傅立叶变换的程序: I=imread('h1.bmp'); %读入原图像文件 imshow(I); %显示原图像

fftI=fft2(I); %二维离散傅立叶变换 sfftI=fftshift(fftI); %直流分量移到频谱中心 RR=real(sfftI); %取傅立叶变换的实部 II=imag(sfftI); %取傅立叶变换的虚部 A=sqrt(RR.^2+II.^2);%计算频谱幅值

A=(A-min(min(A)))/(max(max(A))-min(min(A)))*225; %归一化 figure; %设定窗口

imshow(A); %显示原图像的频谱

四、实验步骤

1.打开计算机,启动MATLAB程序;程序组中“work”文件夹中应有待处理的图像文件;

2.调入“直方图”文件夹中的四幅数字图像,并进行直方图均衡化处理,显示原图像的直方图和经过均衡化处理过的图像直方图。

3.利用MatLab工具箱中的函数编制FFT频谱显示的函数;

4.a).调入、显示“正交变换”文件夹中的图像;图像存储格式为“.bmp”; b) 对这四幅图像做FFT并利用自编的函数显示其频谱; c) 讨论不同的图像内容与FFT频谱之间的对应关系。 5.记录和整理实验报告。

五、实验仪器

1.计算机 Pentium Ⅳ;CPU 586以上;32M以上内存;Windows XP操作系统;Matlab 7软件;

2.MATLAB程序;

3.移动式存储器(U盘等)。 4.记录用的笔、纸。

六、实验报告内容

1.叙述实验过程;

2.描述实验中编写的图像处理源代码。 3.提交实验的原始图像和结果图像。 4.总结并分析实验结果。

七、思考题

1.直方图是什么概念?它反映了图像的什么信息? 2.直方图均衡化是什么意思?它的主要用途是什么? 3.直方图规定化是什么意思?它的主要用途是什么? 4.傅里叶变换有哪些重要的性质?

5.图像的二维频谱在显示和处理时应注意什么?

实验三 图像增强

一、实验目的

掌握常见的图像噪声种类。学习用于图像增强中的去噪声等平滑技术。理解在空间域邻域平均法和中值滤波的原理、特点、适用对象。学习用于突出目标形状特征、改善视觉效果的图像锐化技术的原理和常用方法。

二、实验要求

1.用邻域平均法对含噪声图像进行滤波,比较不同邻域半径的处理效果。 2.用邻域平均法和中值滤波两种方法分别处理叠加椒盐噪声和高斯噪声的图像,比较其滤波效果。

三、实验原理及内容

图像增强是指按特定的需要突出一幅图像中的有用信息,同时,消弱或去除某些不需要的信息,提高图像的使用价值的处理方法。常用的图像增强技术有灰度修正法、直方图修正法,图像平滑处理、图像锐化处理、几何校正和彩色处理技术等空间域处理方法。还有频域增强、维纳滤波和卡尔曼滤波等频率域处理方法。

1.噪声及其噪声的Matlab实现

实际获得的图像一般都因受到某种干扰而含有噪声。引起噪声的原因有敏感元器件的内部噪声、相片底片上感光材料的颗粒、传输通道的干扰及量化噪声等。噪声产生的原因决定了噪声的分布特性及它与图像信号的关系。

根据噪声与信号的关系可以将其分为两种形式。

(1) 加性噪声。当噪声与图像信号g(x,y)无关,在这种情况下,含噪声图像f(x,y)可表示为 f(x,y)=g(x,y)+n(x,y)

信道噪声及扫描图像时产生的噪声都属于加性噪声。

(2) 乘性噪声。当噪声与图像信号有关时,又分为两种情况,一种是某像素处的噪声只与该像素的图像有关,另一种是某像素点处的噪声与该像素点及其邻域的图像信号有关。例如,用飞点扫描器扫描图像时产生的噪声就与图像信号有关。如果噪声和信号成正比,则含噪图像f(x,y)可以表示为

f(x,y) = g(x,y)+n(x,y)g(x,y) = [1+n(x,y)]g(x,y)

另外,还可以根据噪声服从的分布对其进行分类,这时可以分为高斯噪声、泊松噪声和颗粒噪声等。泊松噪声一般出现在照度非常小及用高倍电子线路放大器的情况下;椒盐噪声可认为是泊松噪声;其他的情况通常为加性高斯噪声。颗粒噪声可以认为是白噪声过程,在密度域中是高斯分布的加性噪声,而在强度域中为乘性噪声。

Matlab7.0的图像处理工具箱提供了模拟噪声生成函数imnoise,可以对图像添加某些典型的噪声。

imnoise函数

格式:J=imnoise(I,type)

J=imnoise(I,type,parameter) 说明:J=imnoise(I,type) 返回对图像I添加典型噪声后的有噪图像J,参数type和parameter用于确定噪声的类型和相应的参数。

例1 对图像rice.png分别添加高斯噪声、椒盐噪声和乘性噪声。 I=imread('h1.bmp');

J1=imnoise(I,'gaussian',0,0.02); %添加零均值高斯噪声,噪声方差0.02 J2=imnoise(I,'salt & pepper',0.02); %添加椒盐噪声,噪声方差0.02 J3=imnoise(I,'speckle',0.02); %添加乘性噪声,噪声方差0.02 subplot(2,2,1),imshow(I); title('原图像')

subplot(2,2,2),imshow(J1); title('添加高斯噪声图像') subplot(2,2,3),imshow(J2); title('添加椒盐噪声图像') subplot(2,2,4),imshow(J3);

title('添加乘性噪声图像')

2.图像滤波的Matlab实现

Matlab中提供的空间域数字图像滤波函数主要有conv2函数、filter2函数和fspecial函数。

(1) conv2函数

功能:计算二维卷积。

格式:C=conv2(A,B) C=conv2(Hcol,Hrow,A) C=conv2(?,'shape') 说明:对于C=conv2(A,B),conv2计算矩阵A和B的卷积,若[Ma,Na]=size(A)、[Mb,Nb]=size(B),则size(C)=[Ma+Mb-1,Na+Nb-1]; C=conv2(Hcol,Hrow,A)中,矩阵A分别与Hcol向量在列方向和Hrow向量在行方向上进行卷积;C=conv2(?,'shape')用来指定conv2返回二维卷积结果部分,参数shape可取值如下:

? full为缺省值,返回二维卷积的全部结果;

? same返回二维卷积结果中与A大小相同的中间部分;

? valid返回在卷积过程中,未使用边缘补0部分进行计算的卷积结果部

分,当size(A)

功能:计算二维线性数字滤波,它与函数fspecial连用。 格式:Y=filter2(B,X)

Y=filter2(B,X,'shape') 说明:对于Y=filter2(B,X),filter2使用矩阵B中的二维FIR滤波器对数据X进行滤波,结果Y是通过二维互相关计算出来的,其大小与X一样;对于Y=filter2(B,X,'shape'),filter2返回的Y是通过二维互相关计算出来的,其大小由参数shape确定,其取值如下:

? full返回二维相关的全部结果,size(Y)>size(X);

? same返回二维互相关结果的中间部分,Y与X大小相同; ? valid返回在二维互相关过程中,未使用边缘补0部分进行计算的结果部

分,有size(Y)

(3) fspecial函数功能为产生预定义滤波器。具体语法为:

H=fspecial(type) fspecial函数产生一个有type指定的二维滤波器H H=fspecial('gaussian',n,sigma) 产生高斯低通滤波器

H=fspecial('sobel') 产生Sobel水平边缘增强滤波器

H=fspecial('prewitt') 产生Prewitt水平边缘增强滤波器 H=fspecial('laplacian',alpha) 产生二维拉普拉斯运算滤波器

H=fspecial('log',n,sigma) 产生高斯拉普拉斯(LOG)运算滤波器 H=fspecial('average',n) 产生均值滤波器

H=fspecial('unsharp',alpha) 产生模糊对比增强滤波器

3.邻域平均法(均值滤波)

以像素为中心,灰度值为f(x,y),窗口像素组成的点集用A表示,集内像素数以L表示。经过邻域平均法滤波后,像素f(x,y)对应的输出为g(x,y):

g(x,y)?1L?f(x,y)

(x,y)?A即用窗口像素的平均值g(x,y)取代f(x,y)原来的灰度值。 例2 3×3均值模板的生成 Average=[1,1,1;1,1,1;1,1,1]; 例3 邻域平均法滤波 I=imread('tire.tif');

J=imnoise(I,'salt & pepper',0.02); %添加椒盐噪声 subplot(2,2,1),imshow(I); title('原图像')

subplot(2,2,2),imshow(J); title('添加椒盐噪声图像')

K1=filter2(fspecial('average',3),J)/255; %应用3×3邻域窗口法 subplot(2,2,3),imshow(K1);

title('3×3窗的邻域平均滤波图像')

K2=filter2(fspecial('average',7),J)/255; %应用3×3邻域窗口法 subplot(2,2,4),imshow(K2);

title('7×7窗的邻域平均滤波图像');

4.中值滤波

中值滤波(Median filtering)是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术。1971年,Tukey在进行时间序列分析时提出中值滤波器的概念。其基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值替换。这种滤波器的优点是运算简单而且速度较快,在滤除叠加白噪声和长尾叠加噪声方面显示出了极好的性能。中值滤波器在滤除噪声(尤其是脉冲噪

声)的同时能很好地保护信号的细节信息(例如边缘、锐角等)。另外,中值滤波器很容易自适应化,从而可以进一步提高其滤波性能。

设f(x,y)表示数字图像像素点的灰度值滤波窗口为A的中值滤波器可以定义为:

g(x,y)?Med(x,y)?A?f(x,y)?

上面数字图像中的值用邻域的最大值替换的滤波器称为最大值滤波器,如果替换的值是最小值就称为最小值滤波器。

在Matlab图像处理工具箱中,medfilt2函数实现中值滤波器。其调用格式如下:

B=medfilt2(A,[m n]) 对图像A执行二维中值滤波。每个输出像素为 m×n邻域的中值。在图像边界用0填充图像,所以边缘的中值为[m n]/2区域的中值,可能失真。

B=medfilt2(A) 为m和n缺省为3的情况。

四、实验步骤

1.打开计算机,启动MATLAB程序;

2.调入“图像平滑”文件夹中的数字图像,对已经叠加高斯噪声的图像利用邻域平均法进行滤波,窗口尺寸先用3×3,再取5×5逐渐增大,显示滤波前后的图像。

3.调入“图像平滑”文件夹中的数字图像,对已经叠加高斯噪声和椒盐噪声的图像利用邻域平均法和中值滤波法进行滤波,窗口尺寸均为3×3,显示原图像和经过滤波后的图像。(注意边界像元的处理)

4.记录和整理实验报告。

五、实验仪器

1.计算机 Pentium Ⅳ;CPU 586以上;32M以上内存;Windows XP操作系统;Matlab 7软件;

2.MATLAB程序;

3.移动式存储器(U盘等)。 4.记录用的笔、纸。

六、实验报告内容

1.叙述实验过程;

2.描述实验中编写的图像处理源代码。 3.提交实验的原始图像和结果图像。 4.总结并分析实验结果。

七、思考题

1.在对图像进行邻域平均法滤波时,邻域半径的大小对图像有什么影响,为什么?

2.邻域平均法更适合于处理高斯噪声还是椒盐噪声?试分析原因。 3.中值滤波更适合于处理高斯噪声还是椒盐噪声?试分析原因。

4.对叠加有乘性噪声的图像,设计一种处理方法,既能去噪声又能保持边

缘清晰。

实验四 图像分割

一、实验目的

掌握常用的边缘提取算法,从图像中提取感兴趣的区域,实现图像分割。在图像中,寻找灰度相同或相似的区域,区分图像中的背景区域和目标区域,利用Matlab实现图像的边缘检测,进行图像分割。

二、实验要求

1. 运用罗伯特梯度算子、Sobel算子、Prewitt算子、LoG算子、Canny算

子等检测图像边缘,编程实现并观看图像分割的效果。

2. 运用边缘检测函数edge对图像作边缘检测,并观看检测效果。

三、实验原理及内容

图像边缘是图像中特性(如像素灰度、纹理等)分布的不连续处,图像周围特性有阶跃变化或屋脊状变化的那些像素的集合。图像边缘存在于目标与背景、目标与目标、基元与基元的边界,标示出目标物体或基元的实际含量,是图像识别信息最集中的地方。

图像分割处理主要用于检测出图像中的轮廓边缘、细节以及灰度跳变部分,形成完整的物体边界,达到将物体从图像中分离出来或将表示同一物体表面的区域检测出来的目的。常用的分割方法是边缘检测。边缘检测是采用多种边缘算子实现突出图像边缘,抑制图像中非边缘信息,使图像轮廓更加清晰。

1.梯度算子法

对于图像f(x,y),它在点f(x,y)处的梯度是一个矢量,定义为

??fG?f?x,y???????x?f????y?T

梯度的方向在函数f(x,y)最大变化率的方向上,梯度的幅值为

?f???f???f??????????x???y?22

梯度的数值就是f(x,y)在其最大变化率方向上的单位距离所增加的量。对于

图像而言,微分运算可以用差分运算来近似。

???x??y?f(x,y)?f(x?1,y)?f(x,y)?f(x,y?1)

简化成模板可以表示成如下形式:

Robert梯度算子 ??0?10???1? ??

??10??01?当梯度计算完后,可采用以下几种形式突出图像的轮廓。 ? 梯度直接输出

使各点的灰度g(x,y)等于该点的梯度,即

g(x,y)?G?f?x,y??

这种方法简单、直接。但增强的图像仅显示灰度变化比较陡的边缘轮廓,而灰度变换比较平缓的区域则呈暗色。

? 加阈值的梯度输出

加阈值的梯度输出表达式为

?G?f(x,y)?g(x,y)???f(x,y)G?f(x,y)??T其他

式中,T是一个非负的阈值,适当选取T,既可以使明显的边缘得到突出,又不会破坏原来灰度变化比较平缓的背景。

? 给边缘指定一个特定的灰度级

?LG g(x,y)???f(x,y)G?f(x,y)??T其他

式中LG是根据需要指定的一个灰度级,它将明显的边缘用一个固定的灰度级表现,而其他的非边缘区域的灰度级仍保持不变。

? 给背景指定一个特定的灰度级

g(x,y)???G?f(x,y)??LGG?f(x,y)??T其他

该方法将背景用一个固定灰度级LG表现,便于研究边缘灰度的变化。 ? 二值图像输出

在某些场合(如字符识别等),既不关心非边缘像素的灰度级差别,又不关心边缘像素的灰度级差别,只关心每个像素是边缘像素还是非边缘像素,这时可采用二值化图像输出方式,其表达式为

?LGg(x,y)???LBG?f(x,y)??T其他

此法将背景和边缘用二值图像表示,便于研究边缘所在位置。

2.Sobel算子法

Sobel相对于先对图像进行加权平均再做差分。

?a?对于图像的3×3窗口?d??gbehc?X?(c?2f?i)?(a?2d?g)?f,设 ?Y?(a?2b?c)?(g?2h?i)i??则定义Sobel算子为 g(x,y)??X2?Y2?12

简化成模板可以表示成如下形式:

??1?2Sobel模板 ?????10001??2 ?1???1?0????120?21??0 ??1??

3.拉普拉斯运算法

拉普拉斯算子定义图像f(x,y)的梯度为

?f?2?f?x22??f?y22

锐化后的图像g为 g?f?k??2f?

式中k为扩散效应系数。对系数k的选择要合理,太大会使图像中的轮廓边缘产生过冲;太小则锐化不明显。

?0?1常用laplacian算子模板为????0?14?10???1???1,0???0????1040?1???1??0,?1????1????1?18?1?1???1 ??1??另外还有一些模板也常用于图像增强,如

??1?1Prewitt模板 ?????10001??1 ?1???1?0????110?11??0 ??1??

例1 Laplacian算子的生成

laplacian=[0,-1,0;-1,4,-1;0,-1,0]; 例2 Laplacian算子和模板匹配法示例

I=imread('tire.tif');

subplot(1,3,1);imshow(I);title('原图像');

H=fspecial('laplacian'); %应用Laplacian算子滤波锐化图像 laplacianH=filter2(H,I);

subplot(1,3,2);imshow(laplacianH); title('laplacian算子锐化图像');

H=fspecial('prewitt'); %应用prewitt模板滤波锐化图像 prewittH=filter2(H,I);

subplot(1,3,3);imshow(prewittH); title('prewitt模板锐化图像');

4.边缘检测的函数edge

边缘检测的函数edge的基本语法为 [g,t]=edge(f,’method’,parameters)

其中,f是输入图像,method是边缘检测方法,如Sobel、Prewitt、Roberts、Laplacian of a Gaussian(LoG)、Canny等,parameters是一个参数。在输出中,g是一个逻辑数组,其值如下决定:在f中检测到边缘的位置为1,在其他位置为0。参数t是可选的;它给出edge使用的阈值,以确定哪个梯度值足够大到可以称为边缘点。

如Sobel检测器调用语法为 [g,t]=edge(f,'sobel',T,dir) Prewitt检测器调用语法为 [g,t]=edge(f,'prewitt',T,dir) Roberts检测器调用语法为 [g,t]=edge(f,'roberts',T,dir) 其中T为指定的阈值,dir指定检测边缘的首选方向。 Laplacian of a Gaussian (LoG)检测器调用语法为

[g,t]=edge(f,'prewitt',T,sigma)

其中,sigma是标准偏差,其他参数的解释如前所示。sigma的默认值是2。

Canny检测器调用语法为 [g,t]=edge(f,'canny',T,sigma)

其中T是一个向量,T=[T1,T2],T1

差。

四、实验步骤

1.打开计算机,启动MATLAB程序;

2.调入“图像平滑”文件夹中的数字图像,对初始图像、添加高斯和椒盐噪声的图像分别选择三种边缘检测算子进行模板计算,显示原图像和经过模板处理过的图像。

3.利用Matlab提供的边缘检测edge函数,选择三种边缘检测算子,分别对图像进行边缘检测,显示检测结果。

4.记录和整理实验报告。

五、实验仪器

1.计算机Pentium Ⅳ;CPU 586以上;32M以上内存;Windows XP操作系统;Matlab 7软件;

2.MATLAB程序;

3.移动式存储器(U盘等)。 4.记录用的笔、纸。

六、实验报告内容

1.叙述实验过程;

2.描述实验中编写的图像处理源代码。 3.提交实验的原始图像和结果图像。 4.总结并分析实验结果。

七、思考题

1.分析Sobel算子特点,并给予说明。

2.分析laplacian算子特点,并解释它为何能增强图像的边缘? 3.比较各个边缘算子对图像边缘的检测效果。

4.比较各个边缘检测算子对噪声的敏感性,并提出抗噪声性能较好的边缘检测的方法。

实验五 图像压缩

一、 实验目的

1. 理解有损压缩和无损压缩的概念; 2. 理解图像压缩的主要原则和目的; 3. 了解几种常用的图像压缩编码方式。 4. 利用MATLAB程序进行图像压缩。

二、 实验原理

1.图像压缩原理

图像压缩主要目的是为了节省存储空间,增加传输速度。图像压缩的理想标准是信息丢失最少,压缩比例最大。不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。

信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。

编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。

(1).冗余度压缩方法,也称无损压缩、信息保持编码或熵编码。具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。

(2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。也就是说解码图像和原始图像是有差别的,允许有一定的失真。

应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类:

(1)无损压缩编码种类

哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempel zev编码。 (2)有损压缩编码种类

预测编码,DPCM,运动补偿;

频率域方法:正交变换编码(如DCT),子带编码; 空间域方法:统计分块编码;

模型方法:分形编码,模型基编码;

基于重要性:滤波,子采样,比特分配,向量量化; (3)混合编码。

有JBIG,H261,JPEG,MPEG等技术标准。

本实验主要利用MATLAB程序进行离散余弦变换(DCT)压缩和行程编码(Run Length Encoding,RLE)。

1) 离散余弦变换(DCT)图像压缩原理

离散余弦变换DCT在图像压缩中具有广泛的应用,它是JPEG、MPEG等数据压缩标准的重要数学基础。

和相同图像质量的其他常用文件格式(如GIF(可交换的图像文件格式),TIFF(标签图像文件格式),PCX(图形文件格式))相比,JPEG是目前静态图像中压缩比最高的。JPEG比其他几种压缩比要高得多,而图像质量都差不多(JPEG处理的图像只有真彩图和灰度图)。正是由于其高压缩比,使得JPEG被广泛地应用于多媒体和网络程序中。JPEG有几种模式,其中最常用的是基于DCT变换的顺序型模式,又称为基本系统(Baseline)。 用DCT压缩图像的过程为:

(1)首先将输入图像分解为8×8或16×16的块,然后对每个子块进行二维DCT 变换。

(2)将变换后得到的量化的DCT系数进行编码和传送,形成压缩后的图像格 式。

用DCT解压的过程为:

(1)对每个8×8或16×16块进行二维DCT反变换。 (2)将反变换的矩阵的块合成一个单一的图像。

余弦变换具有把高度相关数据能量集中的趋势,DCT变换后矩阵的能量集中在矩阵的左上角,右下的大多数的DCT系数值非常接近于0。对于通常的图像来说,舍弃这些接近于0的DCT的系数值,并不会对重构图像的画面质量带来显著的下降。所以,利用DCT变换进行图像压缩可以节约大量的存储空间。压缩应该在最合理地近似原图像的情况下使用最少的系数。使用系数的多少也决定了压缩比的大小。

在压缩过程的第2步中,可以合理地舍弃一些系数,从而得到压缩的目的。在压缩过程的第2步,还可以采用RLE和Huffman编码来进一步压缩。

2)行程编码(RLE)原理: 例如如下这幅 的二值图像,

如果采用行程编码可以按如下格式保存

其中10和8表示图像的宽和高。在这个小例子中行程编码并没有起到压缩图像的作用。这是由于这个图的尺寸过小,当图像尺寸较大时行程编码还是不错的无损压缩方法。对于灰度图像和二值图像,用行程编码—般都有很高的压缩率。行程编码方法实现起来很容易,对于具有长重复值的串的压缩编码很有效,例如:对于有大面积的阴影或颜色相同的图像,使用这种方法压缩效果很好。很多位图文件格式都采用行程编码,如TIFF,PCX,GEM,BMP等。

3. 图像压缩编码的MATLAB程序语句

1)利用DCT变换进行图像压缩的MATLAB程序 RGB = imread('tire.tif'); I = rgb2gray(RGB); J = dct2(I);

imshow(log(abs(J)),[]), colormap(jet(64)), colorbar; J(abs(J) < 10) = 0; K = idct2(J); figure,imshow(I);

figure,imshow(K,[0 255]);

2)利用离散余弦变换进行JPEG图像压缩 I=imread('tire.tif'); %读入原图像;

I=im2double(I); %将原图像转为双精度数据类型; T=dctmtx(8); %产生二维DCT变换矩阵

B=blkproc(I,[8 8],'P1*x*P2',T,T'); %计算二维DCT,矩阵T及其转置T'是

DCT函数P1*x*P2的参数

mask=[ 1 1 1 1 0 0 0 0

1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0]; %二值掩膜,用来压缩DCT系

数,只留下DCT系数中左上角的10个

B2=blkproc(B,[8 8],'P1.*x',mask); %只保留DCT变换的10个系数 I2= blkproc(B2,[8,8],'P1*x*P2',T',T); %逆DCT,重构图像 subplot(1,2,1);

imshow(I);title('原图像'); %显示原图像 subplot(1,2,2);

imshow(I2);title('压缩图像');%显示压缩后的图像。对比原始图像和压缩后的

图像,虽然舍弃了85%的DCT系数,但图像仍然清晰(当然有一些质量损失)

3)利用行程编码(RLE)进行图像压缩 I=checkerboard(10,2); %调入原图像 [m n]=size(I); J=[]; for i=n:m

value=I(i,1); num=1; for j=2:n

if I(i,j)==value num=num+1; else

J=[J num value]; num=1; value=I(i,j); end end

I=[J num value 0 0]; %添加的行判断位 0 0 end

disp('原图像大小:') whos('I');

disp('压缩图像大小:') whos('J');

disp('图像的压缩比:') disp(m*n/length(J))

I=checkerboard(10,2); %调入原图像 [m n]=size(I); J=[]; for i=n:m

value=I(i,1); num=1; for j=2:n

if I(i,j)==value num=num+1; else

J=[J num value]; num=1; value=I(i,j); end end

I=[J num value 0 0]; %添加的行判断位 0 0 end

disp('原图像大小:') whos('I');

disp('压缩图像大小:') whos('J');

disp('图像的压缩比:') disp(m*n/length(J))

Name Size Bytes Class

I 1x10 80 double array

Grand total is 10 elements using 80 bytes

压缩图像大小:

Name Size Bytes Class

J 1x6 48 double array

Grand total is 6 elements using 48 bytes

图像的压缩比: 266.6667 四、实验步骤

1.打开计算机,启动MATLAB程序;

2.调入给定的数字图像,并进行数据的行程(RLE)编码压缩处理; 3.将原图像分别以不同的位图文件格式进行“另保存”,比较它们的数据量。 4.记录和整理实验报告

五、实验仪器

1.计算机Pentium Ⅳ;CPU 586以上;32M以上内存;Windows XP操作系统;Matlab 7软件;

2.MATLAB等程序;

3.移动式存储器(软盘、U盘等)。 4.记录用的笔、纸。

六、实验报告内容

1.叙述实验过程;

2.提交实验的原始图像和结果图像。

七、思考题

1.图像中哪些信息是主要的,哪些信息是次要的? 2.简述离散余弦变换(DCT)和行程编码(RLE)的原理。

实验六 图像运算与区域处理

一、实验目的

学习并掌握图像运算的一些方法,便于图像的分析与理解。

二、实验内容和要求

a) 实现图像的算术运算(加、减、乘、除及求补运算)。 b) 实现图像的位逻辑运算。 c) 实现图像的几何运算。 d) 实现图像的空间变换。 e) 实现图像的区域处理。

学习使用以下函数:

imadd imnoise imsubtract imabsdiff immultiply imdivide imcomplement

bitand(位与) bitcmp(位补) bitor(位或) bitxor(位异或) bitshift(位移) roicolor roipoly roifilt2 roifill

例1 图像的位逻辑运算 I=imread('tire.tif'); J=imdivide(I,2); K1=bitand(I,J);

subplot(321),imshow(K1) title('图像的位与运算')

K2=bitcmp(I,8); %等价于28-I

例2 棋盘图像的创建 I=checkerboard(20); imshow(I)

J=checkerboard(20,2,3); %创建2*3的矩形棋盘 figure,imshow(J)

例3 仿射变换 I=imread('tire.tif');

tform=maketform('affine',[1 0 0;.5 1 0;0 0 1] ); %定义仿射变换的变换结构 J=imtransform(I,tform); %仿射变换 Subplot(1 2 1),imshow(I); Subplot(1 2 2),imshow(J);

三、实验步骤

1.打开计算机,启动MATLAB程序;

2.调入给定的数字图像,并进行图像运算; 3.对给定图像分别做区域处理。 4.记录和整理实验报告

四、实验仪器

1.计算机Pentium Ⅳ;CPU 586以上;32M以上内存;Windows XP操作系统;Matlab 7软件;

2.MATLAB等程序;

3.移动式存储器(软盘、U盘等)。 4.记录用的笔、纸。

五、实验报告内容

1.叙述实验过程;

2.提交实验的原始图像和结果图像。

设计一 医学图像边缘检测算法设计

一、设计目的

实现医学图像边缘的精确检测,便于分析与诊断。

二、设计内容和要求

对给定的医学图像进行背景图像与目标图像的分割处理,增强目标图像的边缘,再提取边界区域,从而实现图像的边缘检测。

三、设计步骤

1.打开计算机,启动MATLAB程序;

2.调入给定的医学图像,并按要求进行图像处理; 3.记录和整理设计报告

四、实验仪器

1.计算机Pentium Ⅳ;CPU 586以上;32M以上内存;Windows XP操作系统;Matlab 7软件;

2.移动式存储器(软盘、U盘等); 3.记录用的笔、纸。

五、设计报告内容

1.叙述设计过程,给出编程的源代码;

2.提交实验的原始图像和结果图像,并加以分析。

设计二 车牌图像处理与识别

一、设计目的

实现车牌图像的处理与识别,应用于道口的不停车电子收费等系统,提高道路交通的智能化管理水平。

二、设计内容和要求

车牌识别系统应包含图像获取、图像处理、图像分割、字符识别、数据库管理等几个部分,能够完成复杂背景下汽车牌照的定位分割以及牌照字符的自动识别。这里,只要求对给定的彩色车牌图像变换成灰度图像,用阈值化技术进行字符与背景的分离,再提取牌照图像。

三、设计步骤

1.打开计算机,启动MATLAB程序;

2.调入给定的车牌图像,并按要求进行图像处理; 3.记录和整理设计报告

四、实验仪器

1.计算机Pentium Ⅳ;CPU 586以上;32M以上内存;Windows XP操作系统;Matlab 7软件;

2.移动式存储器(软盘、U盘等)。 3.记录用的笔、纸。

五、设计报告内容

1.叙述设计过程,给出编程的源代码;

2.提交实验的原始图像和结果图像,并加以分析。

本文来源:https://www.bwwdw.com/article/tr2o.html

Top