网站建设招标办法,岳阳网站建设推广,长春盛网网站建设,国外优秀网页设计网站2014年认证杯SPSSPRO杯数学建模
B题 位图的处理算法
原题再现#xff1a; 图形#xff08;或图像#xff09;在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形#xff0c;位图则使用像素来描述图像。一般来说#…2014年认证杯SPSSPRO杯数学建模
B题 位图的处理算法
原题再现 图形或图像在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形位图则使用像素来描述图像。一般来说照片等相对杂乱的图像使用位图格式较为合适矢量图则多用于工程制图、标志、字体等场合。矢量图可以任意放缩图形不会有任何改变。而位图一旦放大后会产生较为明显的模糊线条也会出现锯齿边缘等现象。 第一阶段问题 矢量图从本质上只是使用曲线方程对图形进行的精确描述在以像素为基本显示单元的显示器或打印机上是无法直接表现的。将矢量图转换成以像素点阵来表示的信息再加以显示或打印这个过程称之为栅格化Rasterization见图 1。 栅格化的逆过程相对比较困难。假设有一个形状较为简单的图标保存成一定分辨率的位图文件。我们希望将其矢量化请你建立合理的数学模型尽量准确地提取出图案的边界线条并将其用方程表示出来。
整体求解过程概述(摘要) 本次的问题是让我们处理栅格化逆过程即根据位图图像像素点阵得到矢量图形的几何特征矢量图形本质上是使用曲线方程对图像进行精确描述利用计算机辅助我们提取位图像素点阵特征根据具体的拟合算法输出矢量图形。 首先我们仔细分析图形信息对图像进行了灰度处理即对图像去彩色化。通过观察图像的灰度直方图我们发现灰度直方图有双峰特性采用 ostu 算法对图像进行了分割以及区域二值化我们尝试了多种边缘检测算子通过画图比较决定使用ostucanny算子的方式进行边缘提取。从而得到边缘数据点。 然后观察边缘数据点的分布情况我们发现其在电脑内的存储状态没有构成点序列出于对后面数据操作的便利我们采用了 freeman 码的方式对边界数据进行边缘跟踪产生数据有序化并在此过程中找出边界数据的突变点尖点为下一步的轮廓曲线拟合做准备。 接着我们对有序化的边界数据进行了两种方式的拟合。第一种是采用抛物线样条曲线拟合在之前的步骤中我们得到了图形边界的尖点信息由于整个图形是封闭的我们以这些尖点作为分段点在分段点区间内进行抛物线样条拟合拟合标准便是所有点的偏差最小。从而得到边界轮廓方程。采取的第二种方法是针对于题目所给图像的特征我们采取了分段函数拟合的办法第一部分采用椭圆拟合的方式第二部分是图形下部尖端部分我们采用多项式拟合方式最终得到边界图与边界方程。第一种方法具有一定的普适性可以应用于任意形状的图形的拟合拟合效果较为理想第二种方法具有特殊性针对有特定图像的拟合效果相对更好。 随后在得到边界拟合曲线的基础上我们综合比较了现在较为主流的种子填充算法和扫描线填充算法并根据此次问题实际情况提出了改进版本的扫描线填充算法在进行边界内部填充的过程中我们针对难填充的区域进行了区域划分使得每一个区域都能够完美填充。 最后我们考虑到图形程序较为复杂与人的交互性较差我们采用了简单的 matlab gui 界面方式对部分程序结果进行了统一展示提高了程序的可视化以及人机交互性。
问题分析 这次的问题是栅格化的逆过程也即是从位图到矢量化图形的过程。由于位图计算机存储的是每个像素点的信息而矢量图形计算机存储的是其几何特征。所以在栅格化逆过程中我们必须要考虑位图图像的几何特征并想办法提取这些几何特征。对于一个封闭图形我们如果能够知道图形的边界方程、线条的粗细以及颜色那么我们最后的工作就是展现这些特征所标识的矢量图形。 图形的边界方程的获取一般会涉及边界区域的确定进而得到边界数据点并将数据点有序化。一般对于边界的拟合有多边形近似、样条插值拟合和分段函数拟合而大部分拟合方法要求数据的有序化。 线条的粗细可以根据边界提取后的边界数据来确定而颜色可以通过对于位图像素点的提取来确定。
模型假设 假设 1照片像素在 MATLAB 的处理范围内。 假设 2填充的图形是封闭的如果边缘本身有断点用函数 bwfill 进行“补洞”操作 假设 3对于图片的比较微细小的部分用膨胀函数 dilate 进行原图膨胀。
论文缩略图 全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码(代码和文档not free)
function clclusterp(pic)
apic;
countimhist(a);
[m,n]size(a);
Nm*n;
L256;
countcount/N;
for i1:L
if count (i)~0
sti-1;
break;
end
end
for iL:-1:1
if count (i)~0
ndi-1;
break;
end
end
Fcount(st1:nd1);
pst;
qnd-st;
u0;
for i1:q
uuf(i)*(pi-1);
ua(i)u;
end;
for i1:q
w(i)sum(f(1:i));
end;
d(u*w-ua).^2./(w.*(1-w));
[y,tp]max(d);
thtpp;
for i1:m
for j1:n
if a(i,j)th
a(i,j)0;
else
a(i,j)255;
end
end
end
imshow(a);clear all
clc
Fimread(C:\Users\pc\Desktop\gui\图片1.png);
F1rgb2gray(F);
F2im2bw(F1);
m1edge(F2,canny);
m2edge(F2,sobel);
m3edge(F2,roberts);
m4edge(F2,log);
m5bwperim(F2,4);
Frgb2gray(F);
m6F;
countimhist(m6);
[m,n]size(m6);
Nm*n;
L256;
countcount/N;
for i1:L
if count(i)~0
sti-1;
break;
end
end
for iL:-1:1
if count(i)~0
ndi-1;
break;
end
end
fcount(st1:nd1);
pst;
qnd-st;
u0;
for i1:q
uuf(i)*(pi-1);
ua(i)u;
end;
for i1:q
w(i)sum(f(1:i));
end;
d(u*w-ua).^2./(w.*(1-w));
[y,tp]max(d);
thtpp;
for i1:m
for j1:n
if m6(i,j)th
m6(i,j)0;
else
m6(i,j)255;
end
end
end
subplot(2,2,2);
imshow(m6);
subplot(2,2,3);m6edge(m6,canny);
imshow(m6);
m11imcomplement(m1);
m21imcomplement(m2);
m31imcomplement(m3);
m41imcomplement(m4);
m51imcomplement(m5);
[L,W]size(m51);
m51(:,1)1;m51(:,W)1;m51(1,:)1;m51(L,:)1;
m61imcomplement(m6);
subplot(2,3,1),imshow(m11),title(canny算子)
subplot(2,3,2),imshow(m21),title(sobel算子)
subplot(2,3,3),imshow(m31),title(roberts算子)
subplot(2,3,4),imshow(m41),title(log算子)
subplot(2,3,5),imshow(m51),title(bwperim)
subplot(2,3,6),imshow(m61),title(ostucanny算子)全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可