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变换进行图像压缩可以节约大量的存储空间。压缩应该在最合理地近似原图像的情况下使用最少的系数。使用系数的多少也决定了压缩比的大小。