华工电信数学实验轮廓线的提取教材.docx
14页题目:轮廓线的提取学 院: 电子与信息学院班 级: 2010 级信工五班学 生: 陈耿涛序 号: 3号一.实验内容1.任意选取一幅灰度图像和一幅彩色图像,对算法中若干关键语句中进行调整,得出不同的实验结果,对这些结果进行分析,并与 MATLAB自带的边缘检测做对比2.提出其它的轮廓线提取方法,与简单阈值法进行比较分析 二.实验过程1. (1)代码①灰度图轮廓线提取函数function linegray(pix,n)%灰度图的轮廓线提取figure;A=imread(pix);%读取指定的灰度图T=linecalculate(A,n);%计算矩阵轮廓线subplot(2,1,1);%将窗口分割为两行一列,下图显示于第一行imshow(A);%显示原图像title('灰度图原图 ');%图释axis image;%保持图片显示比例subplot(2,1,2);%下图显示于第二行imshow(T);%显示提取轮廓线后的图片title('提取轮廓线 ');%图释axis image;%保持图片显示比例②计算矩阵轮廓线函数(利用sin 函数进行非线性变换)function tlab=linecalculate(piclab,n) %计算矩阵轮廓线[a,b]=size(piclab);%a,b分别等于矩阵的行数和列数B=double(piclab);%将矩阵变为双精度矩阵D=40*sin((pi/2)*(1/255)*B);%将矩阵进行非线性变换tlab=piclab;%新建同等大小矩阵for p=2:a-1 % 计算矩阵轮廓线for q=2:b-1if abs((D(p,q)-D(p,q+1)))>n||abs((D(p,q)-D(p,q-1)))>n||abs((D(p,q)-D(p+1,q)))>n||abs((D(p,q)-D(p-1,q)))>n||abs((D(p,q)-D(p-1,q+1)))>n||abs((D(p,q)-D(p+1,q-1)))>n||abs((D(p,q)-D(p-1,q-1)))>n||abs((D(p,q)-D(p+1,q+1)))>ntlab(p,q)=0; % 置轮廓线点为黑色elsetlab(p,q)=255; % 置非轮廓线点为白色end;end;end;所得图像:1、linegray('E:\pixx.jpg',1)灰度图原图提取轮廓线2、linegray('E:\pixx.jpg',3.5)灰度图原图提取轮廓线③计算矩阵轮廓线函数(利用 log 函数进行非线性变换)function tlab=linecalculate1(piclab,n) %计算矩阵轮廓线[a,b]=size(piclab);%a,b分别等于矩阵的行数和列数B=double(piclab);%将矩阵变为双精度矩阵D=40*log(B./255+1)% 将矩阵进行非线性变换tlab=piclab;%新建同等大小矩阵for p=2:a-1%计算矩阵轮廓线for q=2:b-1if abs((D(p,q)-D(p,q+1)))>n||abs((D(p,q)-D(p,q-1)))>n||abs((D(p,q)-D(p+1,q)))>n||abs((D(p,q)-D(p-1,q)))>n||abs((D(p,q)-D(p-1,q+1)))>n||abs((D(p,q)-D(p+1,q-1)))>n||abs((D(p,q)-D(p-1,q-1)))>n||abs((D(p,q)-D(p+1,q+1)))>ntlab(p,q)=0; % 置轮廓线点为黑色elsetlab(p,q)=255; % 置非轮廓线点为白色end;end;end;所画图像如下:1、linegray('E:\pixx.jpg',2)灰度图原图提取轮廓线2、 linegray('E:\pixx.jpg',4)灰度图原图提取轮廓线④彩色图轮廓线提取函数function linecolor(pix,n) % 彩色图片轮廓线提取函数figure;A=imread(pix); % 读取指定彩色图片subplot(3,3,2);imshow(A);title(' 彩色图原图 ');axis image;T=A;T(:,:,2)=0;T(:,:,3)=0;subplot(3,3,4);imshow(T);axis image;title(' 红色强度原图 ');T=linecalculate(A(:,:,1),n); % 计算红色矩阵轮廓线subplot(3,3,7);imshow(T);axis image;title(' 红色强度轮廓线 ');T=A;T(:,:,1)=0;T(:,:,3)=0;subplot(3,3,5);imshow(T);axis image;title('绿色强度原图');T=linecalculate(A(:,:,2),n);%计算红色矩阵轮廓线subplot(3,3,8);imshow(T);axis image;title('绿色强度轮廓线');T=A;T(:,:,1)=0;T(:,:,2)=0;subplot(3,3,6);imshow(T);axis image;title('蓝色强度原图');T=linecalculate(A(:,:,3),n);%计算红色矩阵轮廓线subplot(3,3,9);imshow(T);axis image;title('蓝色强度轮廓线');1、利用sin函数进行非线性变换,所画图像为:linecolor('E:/pingguo.jpg',3)彩色图原图红色强度原图 绿色强度原图 蓝色强度原图红色强度轮廓线 绿色强度轮廓线 蓝色强度轮廓线linecolor('E:/pingguo.jpg',3)彩色图原图红色强度原图 绿色强度原图 蓝色强度原图红色强度轮廓线 绿色强度轮廓线 蓝色强度轮廓线3、利用 log 函数进行非线性变换,所画图像为:linecolor('E:/pingguo.jpg',1)彩色图原图红色强度原图 绿色强度原图 蓝色强度原图红色强度轮廓线 绿色强度轮廓线 蓝色强度轮廓线linecolor('E:/pingguo.jpg',2.5)彩色图原图红色强度原图 绿色强度原图 蓝色强度原图红色强度轮廓线 绿色强度轮廓线 蓝色强度轮廓线④利用 MATLAB自带的边缘检测进行轮廓线提取。
利用 canny 算子提取灰度图轮廓线function opegray(pix) %灰度图的轮廓线提取figure;A=imread(pix);%读取指定的灰度图B=A(:,:,1);T=edge(B,'canny')%利用 nobel 算子计算矩阵轮廓线subplot(2,1,1);%将窗口分割为两行一列,下图显示于第一行imshow(B);%显示原图像title(' 灰度图原图 ');%图释axis image;%保持图片显示比例subplot(2,1,2);%下图显示于第二行imshow(T);%显示提取轮廓线后的图片title(' 提取轮廓线 '); %图释axis image;%保持图片显示比例所画图像为:灰度图原图提取轮廓线利用 laplace 算子提取彩色图轮廓线function operator(pix)%彩色图片轮廓线提取函数figure;A=imread(pix);%读取指定彩色图片subplot(。





