2014年认证杯SPSSPRO杯数学建模B题(第一阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模

B题 位图的处理算法

原题再现:

  图形(或图像)在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形,位图则使用像素来描述图像。一般来说,照片等相对杂乱的图像使用位图格式较为合适,矢量图则多用于工程制图、标志、字体等场合。矢量图可以任意放缩,图形不会有任何改变。而位图一旦放大后会产生较为明显的模糊,线条也会出现锯齿边缘等现象。
  第一阶段问题: 矢量图从本质上只是使用曲线方程对图形进行的精确描述,在以像素为基本显示单元的显示器或打印机上是无法直接表现的。将矢量图转换成以像素点阵来表示的信息,再加以显示或打印,这个过程称之为栅格化(Rasterization),见图 1。
  栅格化的逆过程相对比较困难。假设有一个形状较为简单的图标,保存成一定分辨率的位图文件。我们希望将其矢量化,请你建立合理的数学模型,尽量准确地提取出图案的边界线条,并将其用方程表示出来。
在这里插入图片描述

整体求解过程概述(摘要)

  本次的问题是让我们处理栅格化逆过程,即根据位图图像像素点阵,得到矢量图形的几何特征,矢量图形本质上是使用曲线方程对图像进行精确描述,利用计算机辅助我们提取位图像素点阵特征,根据具体的拟合算法输出矢量图形。
  首先,我们仔细分析图形信息,对图像进行了灰度处理,即对图像去彩色化。通过观察图像的灰度直方图,我们发现灰度直方图有双峰特性,采用 ostu 算法对图像进行了分割以及区域二值化,我们尝试了多种边缘检测算子,通过画图比较决定使用ostu+canny算子的方式进行边缘提取。从而得到边缘数据点。
  然后,观察边缘数据点的分布情况,我们发现其在电脑内的存储状态没有构成点序列,出于对后面数据操作的便利,我们采用了 freeman 码的方式,对边界数据进行边缘跟踪,产生数据有序化,并在此过程中找出边界数据的突变点(尖点),为下一步的轮廓曲线拟合做准备。
  接着,我们对有序化的边界数据进行了两种方式的拟合。第一种是采用抛物线样条曲线拟合,在之前的步骤中,我们得到了图形边界的尖点信息,由于整个图形是封闭的,我们以这些尖点作为分段点,在分段点区间内进行抛物线样条拟合,拟合标准便是所有点的偏差最小。从而得到边界轮廓方程。采取的第二种方法是针对于题目所给图像的特征,我们采取了分段函数拟合的办法,第一部分采用椭圆拟合的方式;第二部分是图形下部尖端部分,我们采用多项式拟合方式,最终得到边界图与边界方程。第一种方法具有一定的普适性,可以应用于任意形状的图形的拟合,拟合效果较为理想;第二种方法具有特殊性,针对有特定图像的拟合效果相对更好。
  随后,在得到边界拟合曲线的基础上,我们综合比较了现在较为主流的种子填充算法和扫描线填充算法,并根据此次问题实际情况,提出了改进版本的扫描线填充算法,在进行边界内部填充的过程中,我们针对难填充的区域进行了区域划分,使得每一个区域都能够完美填充。
  最后,我们考虑到图形程序较为复杂,与人的交互性较差,我们采用了简单的 matlab gui 界面方式对部分程序结果进行了统一展示,提高了程序的可视化以及人机交互性。

问题分析:

  这次的问题是栅格化的逆过程,也即是从位图到矢量化图形的过程。由于位图计算机存储的是每个像素点的信息,而矢量图形计算机存储的是其几何特征。所以在栅格化逆过程中我们必须要考虑位图图像的几何特征,并想办法提取这些几何特征。对于一个封闭图形,我们如果能够知道图形的边界方程、线条的粗细以及颜色,那么我们最后的工作就是展现这些特征所标识的矢量图形。
  图形的边界方程的获取一般会涉及边界区域的确定,进而得到边界数据点,并将数据点有序化。一般对于边界的拟合有多边形近似、样条插值拟合和分段函数拟合,而大部分拟合方法要求数据的有序化。
  线条的粗细可以根据边界提取后的边界数据来确定,而颜色可以通过对于位图像素点的提取来确定。

模型假设:

  假设 1:照片像素在 MATLAB 的处理范围内。
  假设 2:填充的图形是封闭的,如果边缘本身有断点,用函数 bwfill 进行“补洞”操作;
  假设 3:对于图片的比较微细小的部分,用膨胀函数 dilate 进行原图膨胀。

论文缩略图:

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

function cl=clusterp(pic)
a=pic;
count=imhist(a);
[m,n]=size(a);
N=m*n;
L=256;
count=count/N;
for i=1:L
if count (i)~=0
st=i-1;
break;
end
end
for i=L:-1:1
if count (i)~=0
nd=i-1;
break;
end
end
F=count(st+1:nd+1); 
p=st; 
q=nd-st;
u=0;
for i=1:q
u=u+f(i)*(p+i-1); 
ua(i)=u;
end;
for i=1:q
w(i)=sum(f(1:i)); 
end;
d=(u*w-ua).^2./(w.*(1-w));
[y,tp]=max(d); 
th=tp+p;
for i=1:m
for j=1:n
if a(i,j)<th
a(i,j)=0;
else
a(i,j)=255;
end
end
end
imshow(a);
clear all
clc
F=imread('C:\Users\pc\Desktop\gui\图片1.png');
F1=rgb2gray(F);
F2=im2bw(F1);
m1=edge(F2,'canny');
m2=edge(F2,'sobel');
m3=edge(F2,'roberts');
m4=edge(F2,'log');
m5=bwperim(F2,4);
F=rgb2gray(F);
m6=F;
count=imhist(m6);
[m,n]=size(m6);
N=m*n;
L=256;
count=count/N;
for i=1:L
if count(i)~=0
st=i-1;
break;
end
end
for i=L:-1:1
if count(i)~=0
nd=i-1;
break;
end
end
f=count(st+1:nd+1); 
p=st; 
q=nd-st;
u=0;
for i=1:q
u=u+f(i)*(p+i-1); 
ua(i)=u;
end;
for i=1:q
w(i)=sum(f(1:i)); 
end;
d=(u*w-ua).^2./(w.*(1-w));
[y,tp]=max(d); 
th=tp+p;
for i=1:m
for j=1: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);m6=edge(m6,'canny');
imshow(m6);
m11=imcomplement(m1);
m21=imcomplement(m2);
m31=imcomplement(m3);
m41=imcomplement(m4);
m51=imcomplement(m5);
[L,W]=size(m51);
m51(:,1)=1;m51(:,W)=1;m51(1,:)=1;m51(L,:)=1;
m61=imcomplement(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('ostu+canny算子')
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/491511.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

既有理论深度又有技术细节——深度学习计算机视觉

推荐序 我曾经试图找到一本既有理论深度、知识广度&#xff0c;又有技术细节、数学原理的关于深度学习的书籍&#xff0c;供自己学习&#xff0c;也推荐给我的学生学习。虽浏览文献无数&#xff0c;但一直没有心仪的目标。两周前&#xff0c;刘升容女士将她的译作《深度学习计…

爬虫实践(1)

这一篇只提登录模拟&#xff0c;主要介绍chrome开发者窗口的使用&#xff0c;实际上相关接口调用都是用到cookie&#xff0c;需要再加一篇从token到cookie&#xff0c;以保证实践的完整性 以migu登录为例&#xff0c;分析其登录过程&#xff0c;之后可以使用任意语言模拟登录&…

蓝桥杯真题Day40 倒计时19天 纯练题!

蓝桥杯第十三届省赛真题-统计子矩阵 题目描述 给定一个 N M 的矩阵 A&#xff0c;请你统计有多少个子矩阵 (最小 1 1&#xff0c;最大 N M) 满足子矩阵中所有数的和不超过给定的整数 K? 输入格式 第一行包含三个整数 N, M 和 K. 之后 N 行每行包含 M 个整数&#xf…

Linux实现m4a格式转换为wav格式

需要在linux上安装ffmpeg 参考博客 Linux上安装ffmpeg修改环境变量【这一点很重要&#xff0c;自己因为没有添加环境变量&#xff0c;捣鼓了很长时间】 将ffmpeg的绝对路径添加到 PATH 环境变量中&#xff0c;以让系统能找到ffmpeg的安装路径。 # /home//project/ffmpeg-6.1-a…

数据库安全性

背景&#xff1a;数据库的一大特性就是数据共享&#xff0c;这样我们就不能不考虑数据库的安全性问题。 1.数据库的不安全因素 1.1非授权用户对数据库的恶意存取和破坏 一些黑客&#xff08;Hacker&#xff09;和犯罪分子在用户存取数据库时猎取用户名和用户 口令&#xff0…

图像处理与视觉感知---期末复习重点(4)

文章目录 一、图像复原与图像增强1.1 概述1.2 异同点 二、图像复原/退化模型2.1 模型图简介2.2 线性复原法 三、彩色基础四、彩色模型五、彩色图像处理 一、图像复原与图像增强 1.1 概述 1. 图像增强技术一般要利用人的视觉系统特性&#xff0c;目的是取得较好的视觉效果&…

canvas跟随鼠标画有透明度的矩形边框

提示&#xff1a;canvas跟随鼠标画有透明度的矩形边框 文章目录 前言一、跟随鼠标画有透明度的矩形边框总结 前言 一、跟随鼠标画有透明度的矩形边框 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

Hana数据库 No columns were bound prior to calling SQLFetch or SQLFetchScroll

在php调用hana数据库的一个sql时报错了&#xff0c;查表结构的sql&#xff1a; select * from sys.table_columns where table_name VBAP SQLSTATE[SL009]: <<Unknown error>>: 0 [unixODBC][Driver Manager]No columns were bound prior to calling SQLFetch …

Kibana的安装(Linux版)

Kibana是一个针对Elasticsearch的开源分析及可视化平台&#xff0c;用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana&#xff0c;可以通过各种图表进行高级数据分析及展示。 Kibana让海量数据更容易理解。它操作简单&#xff0c;基于浏览器的用户界面可以快速创…

Eladmin-jpa基于SpringBoot和Vue的前后端分离后台管理系统​

在当今快速发展的软件开发领域&#xff0c;前后端分离的架构模式已经成为主流。这种架构模式不仅可以提高开发效率&#xff0c;还能使系统更加易于维护和扩展。Eladmin-jpa是一个基于Spring Boot 2.6.4、Spring Boot Jpa、JWT、Spring Security、Redis和Vue的前后端分离的后台管…

分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)

目录 分布式系统面试全集通第一篇什么是分布式?和微服务的区别什么是分布式分布式与微服务的区别 什么是CAP?为什么不能三者同时拥有分区容错性一致性可用性 Base理论了解吗基本可用软状态最终一致性 什么是分布式事务分布式事务有哪些常见的实现方案?2PC&#xff08;Two Ph…

docker安装elasticseachkibana

1.docker安装es 创建本机挂载目录&#xff0c;与容器上目录映射 /Users/wangpei/2024/mydata/elasticsearch conf下创建yml文件 echo "http.host : 0.0.0.0" >> /Users/wangpei/2024/mydata/elasticsearch/config/elasticsearch.yml 安装容器&#xff1a; d…

【Effective Web】html/css优化和技巧

html/css优化和技巧 html/css可以做到一些js的功能&#xff0c;减少js操作dom的高昂成本。 巧用伪类 显示勾选时文案 checkbo勾选时触发&#xff0c;实现checkbox的简单选中事件处理 <template><input type"checkbox" /><span class"checkb…

谷粒商城——缓存——SpringCache

1. 配置使用 首先需要导入相关的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency> 随后在配置文件中进行配置&#xff1a; spring:cache:t…

纳斯达克大屏媒体尺寸与投放费用:一次投放需要多少钱?

纳斯达克大屏媒体尺寸与投放费用&#xff1a;一次投放需要多少钱&#xff1f; 1. 纳斯达克图片要求 1.1 像素要求 高度&#xff1a;2336 像素宽度&#xff1a;1832 像素 1.2 分辨率要求 像素比率&#xff1a;1.0 px 72 dpi 1.3 文件格式要求 静态图片格式&#xff1a;.…

java网络原理(四)----tcp特性

一.滑动窗口 滑动窗口&#xff1a;可以提高传输效率&#xff0c;准确的来说是让tcp在可靠传输的前提下&#xff0c;效率不要太拉胯。使用滑动窗口不能使tcp变的比UDP块&#xff0c;但能减少差距。 前面谈过tcp的传输数据的时&#xff0c;会把数据进行编号&#xff0c;每次传固…

canvas跟随鼠标画有透明度的椭圆边框

提示&#xff1a;canvas跟随鼠标画有透明度的椭圆边框 文章目录 前言一、跟随鼠标画有透明度的椭圆边框总结 前言 一、跟随鼠标画有透明度的椭圆边框 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

Ps:必须知道的四大混合模式

在 Photoshop 中有多达六组 27 种混合模式&#xff0c;不仅可应用于图层之间&#xff0c;在画笔等工具、图层样式等里面也都有&#xff0c;几乎可以说是无处不在。 有关混合模式的原理及说明&#xff0c;请参阅&#xff1a; 《Ps 混合模式&#xff08;合集&#xff09;》 在所有…

RN封装的底部向上弹出的弹出层组件

组件代码 import React from react; import { View, StyleSheet, Modal, TouchableOpacity, Text, TouchableWithoutFeedback } from react-native;const BottomPopup ({ visible, onClose, children, leftButtonTitle, rightButtonTitle, onLeftButtonPress, onRightButtonP…

day5-QT

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QFontDialog> //字体对话框类 #include<QFont> //字体类 #include<QMessageBox> //消息对话框类 #include<QColorDialog> //颜色对话框类 #include<QColor> //颜…