MATLAB数字图像的腐蚀、填充、细化与粗化(共10页)

上传人:vc****3p 文档编号:50528372 上传时间:2022-01-20 格式:DOCX 页数:10 大小:421.20KB
收藏 版权申诉 举报 下载
MATLAB数字图像的腐蚀、填充、细化与粗化(共10页)_第1页
第1页 / 共10页
MATLAB数字图像的腐蚀、填充、细化与粗化(共10页)_第2页
第2页 / 共10页
MATLAB数字图像的腐蚀、填充、细化与粗化(共10页)_第3页
第3页 / 共10页
资源描述:

《MATLAB数字图像的腐蚀、填充、细化与粗化(共10页)》由会员分享,可在线阅读,更多相关《MATLAB数字图像的腐蚀、填充、细化与粗化(共10页)(10页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上数字图像处理实验报告姓名 学号 专业 电子科学与工程学院实验 5一、 实验目的本次实验的处理对象是二值图像,关于二值图像的处理运算主要包括腐蚀和膨胀。它们是其他处理过程的主要运算环节。开闭操作通过腐蚀和膨胀的不同顺序组合,能够使图像平滑,开闭操作再组合能够成噪声滤波器。形态学中的击中击不中变换也应用了腐蚀的运算,用于判断图像中能否找到目标结构,这在图像细化中也得到了应用。本次实验主要实现:1 图像的边缘提取;2 在边缘提取的基础上实现区域填充;3 在区域填充的基础上实现图像细化;4 在图像细化的基础上实现图像粗化。在Matlab软件的自带函数库中其实本身就包含有以上处

2、理过程的函数,为了深入理解每种处理过程的原理,本次实验所有运算都自行编写实现。二、 核心代码及运行后截图主函数:% 读取图像clear;clc;I = imread(onepiece.jpg);I = im2bw(I);% 转换为二值图像m,n = size(I); % 边界提取f = im2bw(0,1,0;1,1,1;0,1,0);% 腐蚀用的结构元素F = fs(I,f);BW = im2bw(I-F);% 用原图减去腐蚀获得边缘figure;imshow(I);title(原图);figure;imshow(F);title(腐蚀图像);figure;imshow(BW);title(

3、边界); 在上面的运行效果图上看来,由于原图选择的原因,周围一圈白线有一定宽度但不足够粗,大概只有23个像素宽度而腐蚀用元素大小为33,这导致腐蚀后图像留下的白线看起来残缺不全,用原图减去腐蚀后得到的边缘图像也在白线处有“粘在一块”的现象。只要使用更高一些分辨率的图片即可避免这样的情况。但出于后续试验的运行速度考虑,本实验就使用此图(300300)。观察图像其他地方,有足够的像素宽度被腐蚀,由此提取的边缘也很清晰。% 区域填充I1 = fillbw(BW,40,40);% fillbw函数实现指定坐标填充边缘内部,详见主函数后的各子函数I1 = I1 | fillbw(BW,40,260);%

4、 为避免不必要的计算量,每次填充迭代次数为70I1 = I1 | fillbw(BW,100,150);% 逐次在图像中选择需填充区域中的起始点以完成填充I1 = I1 | fillbw(BW,100,160);I1 = I1 | fillbw(BW,136,86);I1 = I1 | fillbw(BW,132,212);I1 = I1 | fillbw(BW,147,120);I1 = I1 | fillbw(BW,157,214);I1 = I1 | fillbw(BW,210,171);I1 = I1 | fillbw(BW,206,109);I1 = I1 | fillbw(BW,2

5、33,129);I1 = I1 | fillbw(BW,234,140);I1 = I1 | fillbw(BW,237,153);I1 = I1 | fillbw(BW,234,167);I1 = I1 | fillbw(BW,231,178);I1 = I1 | fillbw(BW,248,125);I1 = I1 | fillbw(BW,252,142);I1 = I1 | fillbw(BW,252,162);I1 = I1 | fillbw(BW,247,182);I1 = I1 | fillbw(BW,272,149);I1 = I1 | fillbw(BW,256,50);I1

6、= I1 | fillbw(BW,253,248);I2 = I1 | F;% 因外围白线边缘之间没有足够空间,很难逐个填充空洞figure;% 故此处直接叠加腐蚀图像,把外围白线加上subplot(1,3,1);imshow(I);title(原图);subplot(1,3,2);imshow(I1);title(区域填充);subplot(1,3,3);imshow(I2);title(区域填充+腐蚀); 实际上边缘图像是由原图像减去腐蚀图像得到的,而区域填充是在边缘图像的区域内填满的结果,故理论上来说最后区域填充的结果其实就是原来的腐蚀图像。从上图比较就可以看出,除了区域填充中未填的外围

7、白线外,叠加了腐蚀图像的结果与区域填充是一样的,也与腐蚀图像一样(具体可以查看附件中的”区域填充.jpg”、”腐蚀.jpg”和”区域填充+腐蚀.jpg”)。% 细化A1 = fs(I2,20);figure;imshow(A1); 实验效果图显示细化结果良好,表征了原图像的主要骨架特征。在实现细化算法过程中,一开始在判定是否满足结构元素时采用的方法是实现写好一个元胞数组Bk,然后在程序中调用数组进行比较。后来发现这样的运算速度大大降低,改为在程序中现写结构元素矩阵。% 粗化A2 = fs(A1,2);figure;imshow(A2);从上图看出在细化得到的骨架基础上,粗化得到的结果已经失去了

8、原图像骨架之外的信息了,只能够把骨架大致的等宽度变粗而已。虽然粗化与细化在运算上是对偶的,但不同于加减法、乘除法的对偶,由于细化过程中图像逐个减去判定击中点,余留图像的信息量实际在减少,作为骨架的剩余信息已不足够做恢复原状的逆运算。图像中粗化线条中掺杂了很多间断,这是由于间断处两边在判定击中而粗化后,中间点的形状不能满足判定结构元素中的任何一个,故不作为击中点而没有填白。子函数:function Y = fs( A,f )% fs函数实现用结构元素模板f将图像A腐蚀% 输入:A被腐蚀图像% f结构元素,此函数只编写了方形情% 况,大小可自定义m,n = size(A);% 获取图像大小 l =

9、 (size(f)-1)/2;Y = im2bw(zeros(m,n);% 初始化输出为0矩阵for i = 1+l:m-l% 遍历图像中33区域,若能放下结构元素f,则该点填白 for j = 1+l:n-l if (sum(sum(A(i-l:i+l,j-l:j+l) & f) = sum(f(:) Y(i,j) = 1; end endend endfunction Y = fillbw( A,x,y)%fillbw函数实现在图像A的第x行、第y列处开始,在边缘区域内填充白色% 输入:A需填充图像% x起始点行数% y起始点列数% 避免小块区域填充时间过久,迭代次数不宜取过大,为方便调用

10、,本函数在函数内部固定为70次m,n = size(A);YY(:,:,1) = zeros(m,n);% 起始图像为0矩阵YY(x,y,1) = 1;% 从指定位置开始填充f = 0,1,0;1,1,1;0,1,0;for k = 2:70% 填充迭代70次 YY(:,:,k) = zeros(m,n); for i = 2:m-1% YY(k)为YY(k-1)的膨胀图像 for j = 2:n-1 if YY(i,j,k-1) = 1 YY(i-1:i+1,j-1:j+1,k) = YY(i-1:i+1,j-1:j+1,k) | f; end end end YY(:,:,k) = YY(

11、:,:,k) & not(A);% 膨胀后与边界的取反图像相与,保证不溢出边界endY = YY(:,:,70);% 输出为第70次填充结果end function Y = fs( A,count )%fs函数将图像A细化count次% 输入:A细化图像% count细化迭代次数m,n = size(A);Y = A;for k = 1:count% 设定迭代次数YY = ones(m,n);% 初始化中间变量for i = 2:n-1 for j = 2:m-1% 在图像中寻找8个结构对元素位置并涂黑(即细化) if Y(j-1,i-1) = 0 & Y(j,i-1) = 0 & Y(j+1

12、,i-1) = 0 & Y(j,i) = 1 & Y(j-1,i+1) = 1 & Y(j,i+1) = 1 & Y(j+1,i+1) = 1 YY(j,i) = 0; end endendY = Y & YY;YY = ones(m,n);for i = 2:n-1 for j = 2:m-1 if Y(j,i-1) = 0 & Y(j+1,i-1) = 0 & Y(j+1,i) = 0 & Y(j,i) = 1 & Y(j-1,i) = 1 & Y(j-1,i+1) = 1 & Y(j,i+1) = 1 YY(j,i) = 0; end endendY = Y & YY;YY = ones

13、(m,n);for i = 2:n-1 for j = 2:m-1 if Y(j+1,i-1) = 0 & Y(j+1,i) = 0 & Y(j+1,i+1) = 0 & Y(j,i) = 1 & Y(j-1,i) = 1 & Y(j-1,i+1) = 1 & Y(j-1,i-1) = 1 YY(j,i) = 0; end endendY = Y & YY;YY = ones(m,n);for i = 2:n-1 for j = 2:m-1 if Y(j+1,i) = 0 & Y(j+1,i+1) = 0 & Y(j,i+1) = 0 & Y(j,i) = 1 & Y(j,i-1) = 1 &

14、 Y(j-1,i) = 1 & Y(j-1,i-1) = 1 YY(j,i) = 0; end endendY = Y & YY;YY = ones(m,n);for i = 2:n-1 for j = 2:m-1 if Y(j-1,i-1) = 1 & Y(j,i-1) = 1 & Y(j+1,i-1) = 1 & Y(j,i) = 1 & Y(j-1,i+1) = 0 & Y(j,i+1) = 0 & Y(j+1,i+1) = 0 YY(j,i) = 0; end endendY = Y & YY;YY = ones(m,n);for i = 2:n-1 for j = 2:m-1 if

15、Y(j,i-1) = 1 & Y(j,i) = 1 & Y(j+1,i-1) = 1 & Y(j+1,i) = 1 & Y(j-1,i) = 0 & Y(j-1,i+1) = 0 & Y(j,i+1) = 0 YY(j,i) = 0; end endendY = Y & YY;YY = ones(m,n);for i = 2:n-1 for j = 2:m-1 if Y(j+1,i-1) = 1 & Y(j+1,i) = 1 & Y(j+1,i+1) = 1 & Y(j,i) = 1 & Y(j-1,i) = 0 & Y(j-1,i+1) = 0 & Y(j-1,i-1) = 0 YY(j,i

16、) = 0; end endendY = Y & YY;YY = ones(m,n);for i = 2:n-1 for j = 2:m-1 if Y(j+1,i+1) = 1 & Y(j+1,i) = 1 & Y(j,i+1) = 1 & Y(j,i) = 1 & Y(j-1,i) = 0 & Y(j,i-1) = 0 & Y(j-1,i-1) = 0 YY(j,i) = 0; end endendY = Y & YY;endend三、 实验分析本次实验主要程序全部自行编写完成,主要是在实现算法的过程中理解每种处理方法的原理。二值图像的处理主要是通过矩阵加减法、逻辑值的与或非运算以及集合的运

17、算。腐蚀运算的形象定义是用一个小元素在原图像内,保证不超出边界的移动,其中心移动的位置集合就是腐蚀结果。按照这个定义,在图像内遍历每个与结构元素同大小的分块矩阵,与结构元素做与运算后(保留结构元素非零位置的值)与结构元素比较,若相同则表示结构元素在该位置没有超出边界,此处填白。不过处理的图像区域如果太小,就很难能使结构元素不超出边界,就会造成实验图像外围白线处理效果不明显的现象。经过一次腐蚀运算后,大部分情况是图像的外围被消除了一圈像素,因此此时用原图减去腐蚀图像的话得到的结果就很接近原图像的边缘,这是本次实验中提取边缘的原理。不过因为外围白线的腐蚀效果不好,所以其边缘提取的效果也会不好,看起

18、来是两条边缘黏在一起。图像细化一定程度上算是对图像的一种特殊的腐蚀过程。用常见的边缘结构作为腐蚀元素,不断对图像外层消除,最后留下单像素宽度的图像,这就是原图像的”骨架“,表现其主要形态分布和走向。但一开始没有理解好8个结构对元素的正确使用方法,把重点放在了击中击不中变换的实现过程上,用8个结构对元素通过腐蚀、求补、交集等大量运算实现目标匹配和背景匹配,然后再确定击中点,最后才细化一下,耗费大量计算时间。实际上用8个结构对元素在图像中对比的过程就是包含了目标匹配和背景匹配,直接可以寻找击中位置而不需要反复循环腐蚀运算。图像粗化是图像细化的对偶运算,可以有2种算法来实现:1.通过对原图的补集进行

19、细化,然后取处理结果的补集即为粗化结果;2.用原图并上击中区域。这两种算法实质上是等价的,由于之前已写好了细化程序,这里取前者可以直接调用函数,比较方便。本次实验深入了解了腐蚀图像的运算细节,还有提取边缘的一种算法,和图像形态骨架如何通过细化算法获取。主要经过一个误解算法的过程,查阅了较多资料和经过较多尝试,对击中击不中变换也有一些更深的理解。在网上找到了击中击不中变换的运算方程为A*B=(AB)(ACW-B)其中B是判定击中的结构元素,而W是一个比B大的模板,它通过等式右边的目标匹配和背景匹配两部分判定区域取交集,最终确定包含结果B的区域位置。如果通过上式求出击中位置,得到的是图像中与B完全相同的区域位置。而本实验查找的不是要与结构对元素完全一样的区域,而是要对包含这些结构的区域进行细化,故如果用上式来找出击中区域反而难以获得良好的细化效果。专心-专注-专业

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!