Matlab机器视觉工具箱(MVTB)教程(1)——图像处理
前言
机器视觉工具箱(MVTB)提供了许多在机器视觉和基于视觉的控制中有用的功能。这是一个有点折衷的收藏品,反映了作者对光度学、摄影测量学、色度学等领域的个人兴趣。它包括100多个功能,包括图像文件读写、采集、显示、过滤、斑点、点和线特征提取、数学形态学、单应、视觉雅可比、摄像机校准和颜色空间转换等操作。
运行此教程的实例,需要在Matlab附加功能选项中安装如下图所示的机器视觉工具箱(MVTB)、vlfeat、MATLAB Support for MINGW-W64。
获取图像
获取图像的方法有读取本地图像、读取相机图像、生成图像。
读取本地图像
%读取本地照片文件
street = iread( 'street.png') ;
about (street ) %获取照片信息
idisp(street); %在matlab显示照片
结果如下:
读取相机图像
操作方法如下
cam =Videocamera("name"); %打开一个特殊相机:
im =cam.grab(); %使用grab方法抓取一幅图像
工具箱函数产生图像
工具箱函数testpattern可以产生各种形式的简单图像,包括直线、网格点或方块、光强斜坡变化和光强正弦变化,第二个参数代表所建图像的大小。
%首先建一个全是黑色像素的帆布(像素值是0):
canvas =zeros(200,200) ;
%然后创建两个正方一形模板:
sq1=0.5*ones(40,40) ;
sq2=0.9*ones(20,20) ;
%再创建一个圆:
circle = 0.6* kcircle(30) ;
%把它们粘贴到帆布上:
canvas =ipaste (canvas, sq1,[20,40]) ;
canvas =ipaste (canvas,sq2,[ 60,120]) ;
canvas = ipaste (canvas, circle, [100, 30]) ;
%最后,在帆布上画一条线段:
canvas = iline( canvas, [30, 40],[150,190], 0.8) ;
idisp(canvas); %显示图像
结果如下图。
一元操作
一元图像处理操作,输出结果是一幅与输人图像相同大小的图像,且每一个输出像素都是对应输人像素的函数。
street = iread( 'street.png') ;
>>idisp(street)
>>ihist(street); %显示直方图
结果如下。
其余一元操作指令如下。
%取灰度值在30到80之间的像素点。
shadows = (street >= 30) & (street<= 80) ;
idisp ( shadows )
%显示像素值的累积直方图
ihist(street,'cdf');
%直方图均衡化
im = inormhist(street);
如下图为直方图均衡化前后对比。
二元操作
二元操作中,每一个输出像素都是两个输人图像中对应像素点的函数。常用的二元操作包括二进制算术运算,如加法、减法、元素操作,或者是MATLAB内置的二元矩阵函数,如max、min、bitand、atan2等。用一个unit8图像减去另一个unit8图像,就会产生另外一个unit8图像,尽管结果可能是负的。MATLAB却可以正确地把值取在[0 ,255]区间中,所以小数减大数将会得出0,而不是负值。另外,大于255的结果将会被设为255。为了实现这种纠正,图像应该首先用MATLAB函数cast转换成有符号整型,或者使用工具箱函数idouble转换成浮点型。
空间操作
平滑处理
%互相关核
K = ones(21,21) / 21^2;
lena = iread('lena.pgm', double');
%平滑处理
idisp( iconv(K,lena) ) ;
这种平均化会使图像光滑化、模糊化或者散焦,效果如下图。
每一个输出像素都是输人图像中与之对应的21 x21相邻像素的平均值。
边缘检测
castle =iread('castle_sign.jpg','double','gray');
p=castle(360,:) ;
figure(9);
idisp