视觉检测技术 - MATLAB数字图像处理
更新时间:2024-02-02 03:35:01 阅读量: 教育文库 文档下载
视觉检测技术实验指导书 ——图像处理与分析部分
实验一:图像预处理实验(验证性实验)
一、实验目的与要求:
目的:通过本次实验,学生可以掌握图像读取、显示和保存的方法,掌握空间域增强方法和频率域增强方法。
要求:上机运行,调试通过。
二、实验方案:
1) 对附录中的练习1~11、练习13,进行上机运行和调试。 2) 对上述练习,改变一些函数的参数,观察运行结果的变化。
三、实验结果与数据处理
对每个练习,要求学生获得相应的实验结果。 四、结论
可以是对某些MATLAB函数如何使用的认识,也可以是学生的实验后的心得体会。
五、问题与讨论
1)在显示傅里叶频谱前,为什么常常进行对数变换? 2)对实验中遇到的问题,进行讨论。
实验二:形态学处理、图像分割、表达与描述实验(验证性实验)
一、实验目的与要求:
目的:要求学生掌握形态学处理、图像分割和图像表达与描述的基本方法,掌握相关的MATLAB函数。
要求:上机运行,调试通过。
二、实验内容:
1) 对附录中的练习15~24、练习26、练习28~32,进行上机运行和调试。 2)对上述练习,改变一些函数的参数,观察运行结果的变化。
三、实验结果与数据处理
对每个练习,要求学生获得相应的实验结果。 四、结论
可以是对某些MATLAB函数如何使用的认识,也可以是学生的实验后的心得体会。
五、问题与讨论
1)在形态学处理中,结构元选取的原则是什么?举例说明。 2)对实验中遇到的问题,进行讨论。
实验三:直方图均衡化实验(设计性实验)
实验名称:直方图均衡化实验 实验项目性质:设计性实验 计划学时:2
一、 实验目的与要求
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。 三、实验方案
此方案为参考方案,鼓励学生提出自己的方案。 实现直方图均衡化的实现步骤:
1. 列出原始图像的灰度级fj,j?0,1,?,L?1,其中L是灰度级的个数。 2. 统计各灰度级的像素数目nj,j?0,1,?,L?1。
3. 计算原始图像直方图各灰度级的频数Pf(fj)?nj/n,j?0,1,?,L?1,其中n为原始图像总的像素数目。
4. 计算累积分布函数C(f)??j?0Pf(fj),j?0,1,?,k,?L?1。
5. 应用以下公式计算映射后的输出图像的灰度级gi,i?0,1,?,k,?,P?1,P为输出图像灰度级的个数:
gi?INT[(gmax?gmin)C(f)?gmin?0.5] 其中,INT为取整符号
6.统计映射后各灰度级的像素数目ni,i?0,1,?,k,?,P?1。 7.计算输出直方图Pg(gi)?ni/n,i?0,1,?,P?1。
8.用fj和gi的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀分布的输出图像。
四、实验(设计)仪器设备和材料清单 1.计算机1台/每人 五、考核形式 1.验收调试结果; 2.实验报告 六、实验报告要求 1.技术路线;
k2.MATLAB程序; 3.运行结果; 4.心得体会 七、思考题
1.直方图均衡化的目的是使图像直方图尽可能地分布均匀,你有什么改进的思
路?
2.你是如何理解步骤5的?
3. 对实验中遇到的问题,进行讨论。
附录一:MATLAB数字图像处理
1 MATLAB简介
1.1 主要用途及特点 主要用途:算法研究
主要特点:语句功能强大;不能生成可执行文件。
1.2 MATLAB工作环境 1.2.1 Matlab桌面
桌面包括5个子窗口:命令窗口、工作空间窗口、当前目录窗口、历史命令窗口、一个或多个图形窗口(仅在用户显示图形式出现)。
命令窗口是用户在提示符(>>)处键入MATLAB命令和表达式的地方,也是显示那些命令输出的地方。
工作空间窗口显示对话中创建的变量和它们的某些信息。 当前目录窗口显示当前目录的内容(即路径)。
历史命令窗口包含用户已在命令窗口中输入的命令的纪录。
1.2.2 使用MATLAB编辑器创建M文件
1.2.3 获得帮助
(1)help <函数名> (2)lookfor <关键词>
2 数字图像的读取、显示、保存、数据类型和图像类型、数据类型间的转换、图像类型间的转换
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’)
>> f=imread('pout.tif'); >> imshow(f);
>> g=imread('trees.tif'); >> figure,imshow(g);
2.4 数据类型 名称 描述 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。
2.5 图像类型 名称 描述 亮度图像 uint8类范围为[0 255]、double类归一化为[0 1] 二值图像 图像取值只有0和1的逻辑数组 索引图像 索引图像 RGB图像 彩色图像 2. 6 数据类与图像类型间的转换
2.6.1 数据类间的转换
语法:B = data_class_name ( A )
举例:若A是8位图像,则B = double ( A )转换为双精度图像。
2.6.2 图像类型间的转换 函数名称 将输入转换为 有效的输入图像数据类 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 亮度变换与空间滤波
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);
3.1.2 对比度拉伸变换
对数变换方法: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是归一化直方图。
num1(f)是求图像所有像素的灰度和的一个形式化的函数,需要自己
编写。例如:s=sum(f), s=sum(s),这两条语句合在一起,就实现了图像所有像素的灰度求和。
练习5
f = imread ( ‘pout.tif’); imhist(f);
3.2.2 直方图均衡化
语法: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=imsubtact(f, imfilter(f, w4, ‘replicate’)); g8=imsubtract( 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)
4 频域处理
4.1 在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, [ ]);
频域滤波
4.2.1 注意事项
假设函数f(x,y)和h(x,y)的大小分别为A×B和C×D,为了避免卷积运算造成的折叠误差(即混叠失真),必须通过对f和g补零,构造两个大小均为P×Q的扩充寒暑,才能在频率域中进行运算。其中,P、Q必须满足:
P?A?C?1
Q?B?D?1
4.2.2 DFT滤波的基本步骤 1、对f和g进行补零。
2、对f和g分别进行傅里叶变换,得到频域F和H。 3、将变换乘以滤波函数
G=H.*F;
4、获得G的傅里叶逆变换的实部: g=real(ifft2(G));
5、讲左上部的矩形修建为原始大小: 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 形态学图像处理
5.1 膨胀和腐蚀 5.1.1 膨胀
语法:A2=imdilate(A, B)
说明:B是结构元(由0和1组成的矩阵)。
练习15
A=imread(‘text.tif’); B=[0 1 0; 1 1 1; 0 1 0]; A2=imdilate(A, B); imshow(A);
figure,imshow(A2);
5.1.2 结构元的生成
语法:se=strel(shape, parameter) 说明:见下表。
5.1.3 腐蚀
语法:A2=imerode(A, B) 练习16
A=imread(‘text.tif’); se=strel(‘disk’,1); A2=imerode(A, se);
imshow(A); figure,imshow(A2); 5.2 膨胀和腐蚀的组合 5.2.1 开运算和闭运算
语法:C=imopen(A, B) 和 C=imclose(A,B) 练习17
f=imread(‘text.tif’); se=strel(‘square’,5); fo=imopen(f,se);
imshow(f); figure,imshow(fo);
fc=imclose(f,se); figure,imshow(fc);
5.2.2 击中击不中变换
语法:C=bwhitmiss(A, B1, B2) 练习18
A=imread(‘text.tif’);
B1=strel([0 0 0 0; 0 1 1 1; 0 1 1 0]); B2=strel([1 1 1 1; 1 0 0 0 ; 1 0 0 1]); g=bwhitmiss(f, B1, B2); imshow(g);
5.2.3 形态学函数
语法:g=bwmorph(f, operation, n)
说明:该函数可基于膨胀、腐蚀和查找表的组合实现许多有用的操作,n是一个用于指定将被重复操作次数的正整数。Operation说明见下表。
练习19
f=imread(‘circbw.tif’); G1=bwmorph(f, ‘thin’, 1); G2=bwmorph(f, ‘thin’, 1); Ginf= bwmorph(f, ‘thin’, Inf); Fs= bwmorph(f, ‘skel’, Inf); imshow(f);
figure,imshow(G1); figure,imshow(G2); figure,imshow(Ginf); figure,imshow(Fs);
5.3 标记连通分量
语法:[L, num]=bwlabel(f, conn)
说明:conn用于指定连接类型(4连接获8连接),num给出所找到的连接分量总数,L成为标记矩阵。
练习20
f=imread(‘blood1.tif’); [L,n]=bwlabel(f); [r,c]=find(L = = 3); rbar=mean(r);
cbar=mean(c);
plot(cbar, rbar, ‘Marker’, ‘o’, ‘MarkerEdgeColor’, ‘k’, ‘MarkerFaceColor’, ‘k’,‘MarkerSize’,10); plot(cbar, rbar, ‘Marker’, ‘*’, ‘MarkerEdgeColor’, ‘w’);
5.4 形态学重构
语法:out=imreconstruct(marker, mask)
5.4.1 由重构做开运算 练习21
f=imread(‘circbw.tif’); fe=imerode(f,ones(51,1)); fo=imopen(f,ones(51,1)); fobr=imreconstruct(fe, f); imshow(f);
figure,imshow(fe); figure,imshow(fo); figure,imshow(fobr);
5.4.1 填充孔洞
语法:g=imfill(f, ‘holes’)
5.4.2 清除边界对象
语法:g=imclearborder(f, conn)
6 图像分割
6.1 点、线和边缘检测 6.1.1 点检测 点检测模板w:
-1 -1 -1 -1 8 -1 -1 -1 -1 检测方法:
g=abs(imfilter(double(f), w))>=T
练习22
f=imread(‘moon.tif’);
w=[-1 -1 -1; -1 8 -1; -1 -1 -1]; g=abs(imfilter(double(f), w)); T=max(g(:)); T=T*0.5; g=g>=T;
imshow(f); figure, imshow(g);
6.1.2 线检测
水平模板、+45度模板、垂直模板、-45度模板。
练习23
f=imread(‘circbw.tif’); imshow(f);
w=[2 -1 -1; -1 2 -1; -1 -1 2]; g=abs(imfilter(double(f), w)); figure,imshow(g);
6.1.3 使用edge函数的边缘检测
语法:[g,t]=edge(f, ‘method’, parameter)
说明:g是一个逻辑数组,其值为:在f中检测到边缘的位置为1,其他位置为零;t是edge是用的阈值;method为边缘监测器方法,可选为: ‘sobel’, ‘prewit’, ‘roberts’, ‘log’(LoG), ‘zerocoss’, ‘canny’等;parameter包含两部分:T为指定的阈值,第二部分为dir(检测边缘的首选方向: ‘horizontal’, ‘vertical’, ‘both’),或sigma(标准方差),或H(指定的滤波函数)。
练习24
f=imread(‘rice.tif’); imshow(f);
[gsobel,t]=edge(f, ‘sobel’); figure, imshow(gsobel); [glog,t]=edge(f, ‘log’); figure, imshow(glog);
[gcanny,t]=edge(f, ‘canny’); figure, imshow(gcanny);
6.2 使用Hough变换的线检测
练习25
设计与实现一个基于Hough变换的直线检测器。
6.3 阈值处理
6.3.1 全局阈值处理
语法:T=graythresh(f)
说明:T是阈值,归一化为0至1之间的值。
6.3.2 局部阈值处理
通过一个形态学顶帽算子并对得到的结果使用graythresh来计算。
练习26
f=imread(‘moon.tif’); imshow(f);
T=graythresh(f); g=f>=T;
figure, imshow(g);
6.4 基于区域的分割 6.4.1 区域生长
6.4.2 区域分裂和合并
练习27
设计与实现一个基于区域生长的分割程序。
6.5 使用分水岭变换的分割
练习28
f=imread(‘cell.tif’); imshow(f);
g=im2bw(f, graythresh(f));%变成2值图像 figure,imshow(g); gc=~g;%取反,即非
D=bwdist(gc);%对二值图像距离变换 L=watershed(-D); w=L= =0; g2=g&~w;
figure,imshow(g2);
6.6 分割后处理
语法:BW2 = bwfill(BW1,c,r,n)
说明:填充二进制图像的背景色。(形态学处理)
练习29
BW1 =[1 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 0]
BW2 = bwfill(BW1,3,3,8) I = imread('blood1.tif');
BW3 = ~im2bw(I);
BW4 = bwfill(BW3,'holes'); imshow(BW3)
figure, imshow(BW4)
语法:bwareaopen
说明:二进制图像区域打开,清除小物体。
7 表示与描述
7.1 二进制图像对象的参数测量
语法:total = bwarea(BW)
说明:计算二进制图像对象的面积。 语法:eul = bweuler(BW,n)
说明:计算二进制图像的欧拉数。
练习30
BW = imread('circles.tif'); imshow(BW);
total=bwarea(BW); % total =15799 eul=bweuler(BW); % eul =-2
语法:BW2 = bwperim(BW1,n)
说明:计算二进制图像中对象的周长。 练习31
BW1 = imread('circbw.tif'); BW2 = bwperim(BW1,8); imshow(BW1)
figure, imshow(BW2)
语法:BW2 = bwselect(BW1,c,r,n) 说明:在二进制图像中选择对象
练习32
BW1 = imread('text.tif'); c = [16 90 144]; r = [85 197 247];
BW2 = bwselect(BW1,c,r,4); imshow(BW1)
figure, imshow(BW2)
7.2 其他参数测量
语法:b = std2(A)
说明:计算矩阵元素的标准偏移。 语法:B = mean2(A,[m n])
说明:计算矩阵元素的平均值
正在阅读:
投标方案11-14
高考诗歌鉴赏 - 诗歌景物形象学案 学生09-24
《21.古诗三首》教学案例08-28
西方音乐史最全面复习资料06-29
法理学阶梯-304-18
服装产业创新创业计划书优秀5篇04-02
(完整版)学生上课的基本要求04-14
自我介绍作文300字左右【精选8篇】03-27
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 检测技术
- 图像处理
- 视觉
- 数字
- MATLAB