前 言
图像是一种重要的信息源,图像处理的最终目的就是要帮助人类理解信息的内涵.数字图像处
理技术的研究内容涉及光学系统,微电子技术,计算机科学,数学分析等领域,是一门综合性很
强的边缘学科.随着计算机的迅猛发展,图像处理技术已经广泛应用于各个领域.
"数字图像处理"课程内容主要包括利用计算机对图像信息进行图像采集,图像变换,图像增强
与恢复,图像分割,图像分析与理解,图像压缩,图像传输等各种处理的基本理论,典型方法和实
用技术.
通过本课程的学习,可使学生掌握有关图像处理与图像分析的基本概念,基础理论,实用技术
和典型方法.通过该系列实验教学与实践,使学生了解和掌握利用各种图像采集设备__图像扫
描仪,数码照相机,录像机,数码摄像机等获取多种格式的静态,动态图像数据的方法及手段,了
解图像增强,图像分割,图像理解和分析算法的物理意义;了解图像传输,图像编码等相关技术
的基本原理,软/硬件构成以及典型的应用;此外对图像远程传输,存贮等网络流媒体远程通信
技术,数据库管理与维护,超文本系统等方法也进行必要的了解,为将来的研究和应用打下良
好的基础.
应用于图像处理的计算机软件技术平台很多,如 VC++,MATLAB 等.本实验指导书选用 MATLAB
做实验平台,MATLAB 是一种基于向量(数组)而不是标量的高级程序语言,而数字图像实际上
就是一组有序的离散数据,从而 MATLAB 从本质上就可以提供对图像处理的技术支持.
实验一:图像预处理实验(验证性实验)
实验目的:
要求学生掌握图像读取,显示和保存的方法,掌握空间域增强方法和频率域增强方法.
实验要求:
上机运行,调试通过.
实验内容:
对附录一中的练习 1~11,练习 13,进行上机运行和调试.
对上述练习,改变一些函数的参数,观察运行结果的变化.
实验二:形态学处理,图像分割,表达与描述实验(验证性实验)
实验目的:
要求学生掌握形态学处理,图像分割和图像表达与描述的基本方法,掌握相关的 MATLAB 函数.
实验要求:
上机运行,调试通过.
实验内容:
对附录一中的练习 15~24,练习 26,练习 28~32,进行上机运行和调试.
2)对上述练习,改变一些函数的参数,观察运行结果的变化.
实验三:直方图均衡化实验
(设计性实验)
实验名称:直方图均衡化实验
实验项目性质:设计性实验
所属课程名称:《图像处理与分析》
计划学时:4
实验目的
1.根据直方图均衡化的步骤,编程实现直方图均衡化的功能.
2.加深对直方图均衡化的基本原理的理解.
预习与参考
1.R. C. Gonzalez, R. E. Woods.《数字图像处理》(第二版).北京:电子工业出
版社,2003.
2.《图像处理与分析实验指导书》的附录一和附录二.
2.R. C. Gonzalez, R. E. Woods, S. L. Eddins.《数字图像处理》(MATLAB 版).
北京:电子工业出版社,2005.
3.徐飞,施晓红.《Matlab 应用图像处理》.西安:西安电子科技大学出版社,
2002.
实验要求(设计要求)
按下列步骤设计和实现直方图均衡化:
列出原始图像的灰度级,其中 L 是灰度级的个数.
统计各灰度级的像素数目.
计算原始图像直方图各灰度级的频数,其中 n 为原始图像总的像素数目.
计算累积分布函数.
应用以下公式计算映射后的输出图像的灰度级,P 为输出图像灰度级的个数:
其中,INT 为取整符号
6.统计映射后各灰度级的像素数目.
7.计算输出直方图.
8.用的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出图像.
实验(设计)仪器设备和材料清单
1.计算机 1 台/每人
考核形式
1.验收调试结果;
2.实验报告
实验报告要求
1.技术路线;
2.MATLAB 程序;
3.运行结果;
4.心得体会
思考题
1.直方图均衡化的目的是使图像直方图尽可能地分布均匀,你有什么改进的思路
2.你是如何理解步骤 5 的
附录一:MATLAB 数字图像处理
MATLAB 简介
1.1 主要用途及特点
主要用途:算法研究
主要特点:语句功能强大;不能生成可执行文件.
1.2 MATLAB 工作环境
1.2.1 Matlab 桌面
桌面包括 5 个子窗口:命令窗口,工作空间窗口,当前目录窗口,历史命令窗口,一个或多个图形
窗口(仅在用户显示图形式出现).
命令窗口是用户在提示符(>>)处键入 MATLAB 命令和表达式的地方,也是显示那些命令输出的
地方.
工作空间窗口显示对话中创建的变量和它们的某些信息.
当前目录窗口显示当前目录的内容(即路径).
历史命令窗口包含用户已在命令窗口中输入的命令的纪录.
使用 MATLAB 编辑器创建 M 文件
1.2.3 获得帮助
(1)help
(2)look
数字图像的读取,显示,保存,数据类型和图像类型,数据类型间的转换,图像类型间的转换
2.1 图像的读取
语法:imread ( 'filename' )
说明:读取图像
格式名称
描述
可识别扩展符
TIFF
加标记的图像文件格式
.tif, .tiff
JPEG
联合图像专家组
.jpg, .jpeg
GIF
图形交换格式
.gif
BMP
Windows 位图
.bmp
PNG
可移植网络图形
.png
XWD
X Window 转储
.xwd
语法:[M, N]=size ( 'filename' )
说明:给出一幅图像的行数和列数
2.2 图像的显示
语法:imshow ( f, G)
imshow (f, [low high])
imshow (f, [ ])
说明:G 是显示该图像的灰度级数;
小于或等于 low 的值都显示为黑色,大于或等于 high 的值都显示为白色.
[ ]自动将变量 low 设置为 f 的最小值,将 high 设置为 f 的最大值.
2.3 图像的保存
语法:imwrite ( f, 'filename')
说明:
练习 1
f = imread ( 'saturn.tif');
[M, N] = size( f );
g = imread ( 'trees.tif' );
imshow ( f );
figure, imshow (g); %显示另一幅图像
imwrite (f, 's2.jpg')
数据类型
名称
描述
double
双精度浮点数,范围为-10exp(308)~ 10exp(308),8 字节
uint8
无符号 8 比特整数,1 字节
uint16
无符号 16 比特整数,2 字节
uint32
无符号 32 比特整数,4 字节
int8
有符号 8 比特整数,1 字节
int16
有符号 16 比特整数,2 字节
int32
有符号 32 比特整数,4 字节
single
单精度浮点数,范围为-10exp(38)~ 10exp(38) ,4 字节
char
字符
logical
值为 0 或 1
四种常用类型:double,uint8,char,logical.
图像类型
名称
描述
亮度图像
uint8 类范围为[0 255],double 类归一化为[0 1]
二值图像
图像取值只有 0 和 1 的逻辑数组
索引图像
索引图像
RGB 图像
彩色图像
6 数据类与图像类型间的转换
数据类间的转换
语法:B = data_class_name ( A )
举例:若 A 是 8 位图像,则 B = double ( A )转换为双精度图像.
图像类型间的转换
函数名称
将输入转换为
有效的输入图像数据类
im2uint8
uint8
Logical, uint8, uint16 和 double
im2uint16
uint16
Logical, uint8, uint16 和 double
mat2gray
double
double
im2double
double
Logical, uint8, uint16 和 double
im2bw
logical
uint8, uint16 和 double
练习 2
f=[1 2; 3 4];
g=mat2gray(f);
gb=im2bw(g, 0.6) %0.6 is a threshold
亮度变换与空间滤波
3.1 亮度变换函数
3.1.1 基本亮度变换函数
语法:g=imadjust(f, [low_in high_in], [low_out high_out],gamma)
说明:将图像 f 中的亮度值影响到 g 中的新值,即将 low_in 至 high_in 之间的值映射到 low_out
至 high_out 之间的值, low_in 以下的值映射为 low_out, high_in 以上的值映射为 high_out.
参数 gamma 指定了映射曲线的形状.
练习 3
f = imread ( 'pout.tif'); imshow(f);
g1=imadjust(f, [0 1], [1 0]); figure, imshow(g1);
g2=imadjust(f, [0.5 0.75], [1 0], 0.5); figure, imshow(g2);
对比度拉伸变换
对数变换方法:g=c*log(1+double(f))
说明:对数变换的一项主要应用是压缩动态范围,常用于傅里叶频谱显示.
练习 4
f = imread ( 'pout.tif');
F=fft2(f); % Fourier Transform
FC=fftshift(F); %将变换原点移到频率矩形的中心.
imshow(abs(FC), [ ]);
S2= log(1+ abs(FC));
figure,imshow(S2, [ ]);
对比度拉伸方法:g=1./(1+(m./(double(f)+eps).^E)
说明:eps 是浮点数的相对精度,可避免 f 出现 0 值时的溢出现象.
3.2 直方图处理与函数绘图
3.2.1 生成并绘制图像的直方图
语法:h=imhist(f, b)
p= imhist(f, b)/num1(f)
说明:b 是用于形成直方图的灰度级的个数.P 是归一化直方图.
练习 5
f = imread ( 'pout.tif');
imhist(f);
直方图均衡化
语法:g=histeq(f, nlev)
说明:nlev 是为输出图像制定的灰度级数.
练习 6
f = imread ( 'tire.tif');
imshow(f);
figure,imhist(f);
ylim('auto'); %自动设定 y 轴坐标范围和刻度
g=histeq(f,256);
figure, imshow(g);
figure,imhist(g);
ylim('auto');
3.3 空间滤波
3.3.1 线性空间滤波
语法:g=imfilter(f, w, filtering_mode, boundary_options, size_options)
说明:w 为滤波掩模
选项
描述
滤波类型
'corr'
滤波器通过使用相关来完成.该值是默认值.
'conv'
滤波器通过使用卷积来完成
边界选项
P
输入图像的边界通过用值 P 来扩展.P 的默认值为 0.
'replicate'
图像大小通过复制外边界的值来扩展.
'symmetric'
图像大小通过反射其边界来扩展.
'circular'
图像大小通过将图像看成是一个二维周期函数的一个周期来扩展
大小选项
'full'
输出图像的大小与被扩展图像的大小相同
'same'
输出图像的大小与输入图像的大小相同
练习 7
f = imread ( 'saturn.tif');
w=ones(31); %单位矩阵掩模
gd=imfilter(f,w);
imshow(gd,[]);
3.3.2 非线性空间滤波
略.
3.4 图像处理工具箱的标准空间滤波器
3.4.1 线性空间滤波器
语法:w=fspecial('type',parameter)
说明:见下表
练习 8
f = imread ( 'saturn.tif');
w4=fspecial('laplacian', 0)
w8=[1 1 1; 1 -8 1; 1 1 1];
g4=f-imfilter(f, w4, 'replicate');
g8=f-imfilter(f, w8, 'replicate');
imshow(f);
figure, imshow(g4); figure, imshow(g8);
3.4.2 非线性空间滤波器
语法:g=ordfilt2(f, order, domain)
说明:使用邻域的一组排序元素中的第 oder 个元素来代替 f 中的每个元素,而该邻域则由
domain 中的非零元素指定.
语法:g=medfilt2(f, [m n],padopt)
说明:中值滤波器.padopt 指定了三个可能的边界填充选项之一.
'zeros'(默认值).
'symmetric',镜像反射.
'indexed',double 类图像,以 1 填充,否则以 0 填充.
练习 9
f = imread ( 'eight.tif');
fn=imnoise(f, 'salt&pepper', 0.2); %加椒盐噪声
gm=medfilt2(fn);
imshow(fn);
figure,imshow(gm);
语法:J = wiener2(I,[m n],noise)
说明:进行二维适应性去噪过滤处理(维纳滤波).
练习 10
I = imread('saturn.tif');
J = imnoise(I,'gaussian',0,0.005); %加高斯噪声
K = wiener2(J,[5 5]);
imshow(J)
figure, imshow(K)
频域处理
在 MATLAB 中计算并可视化二维 DFT
练习 11
f = imread ( 'saturn.tif');
F=fft2(f); % Fourier Transform
S=abs(F); %计算傅里叶频谱
imshow(S,[]);
FC=fftshift(F); %将变换原点移到频率矩形的中心.
figure,imshow(abs(FC), [ ]);
S2= log(1+ abs(FC));
figure,imshow(S2, [ ]);
频域滤波
注意事项
假设函数 f(x,y)和 h(x,y)的大小分别为 A×B 和 C×D,为了避免卷积运算造成的折叠误差(即混叠
失真),必须通过对 f 和 g 补零,构造两个大小均为 P×Q 的扩充寒暑,才能在频率域中进行运算.
其中,P,Q 必须满足:
DFT 滤波的基本步骤
对 f 和 g 进行补零.
对 f 和 g 分别进行傅里叶变换,得到频域 F 和 H.
将变换乘以滤波函数
G=H.*F;
获得 G 的傅里叶逆变换的实部:
g=real(ifft2(G));
讲左上部的矩形修建为原始大小:
g=g(1:size(f,1),1:size(f,2));
练习 12:
根据 DFT 滤波的基本步骤,进行编程实现.
从空间滤波器获得频率滤波器
语法:H=fft2(h, M, N)
说明:M,N 是滤波器的行数和列数,由被滤波的图像大小决定,是补零
的结果.
语法:H=freqz2(h, R, C)
说明:计算 FIR 滤波器的频率响应.
练习 13
h =[1 1 1; 1 -8 1; 1 1 1];
H=freqz2(h, 50, 50);
在频率域中直接生成滤波器
练习题 14:
编程实现在频率域中生成巴特沃兹低通滤波器(或高通滤波器,或高通强调滤波器).
形态学图像处理
5.1 膨胀和腐蚀