2016年认证杯SPSSPRO杯数学建模B题(第一阶段)低分辨率下看世界全过程文档及程序

2016年认证杯SPSSPRO杯数学建模

B题 低分辨率下看世界

原题再现:

  数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制,拍摄设备只能在较低的分辨率下成像。为简单起见,我们只考虑单色成像。假设成像的分辨率为 32 × 64,成像方式是将整个矩形视野划分成 32 × 64 个相同大小的矩形格子,图像中每个像素的取值为对应格子的亮度平均值。每间隔一定时间拍摄一帧图像,运动的画面体现为图像的序列。
  第一阶段问题: 现在整个视野区域向某个方向缓慢运动,拍摄到的系列图像实时地传输到计算机中。请你建立合理的数学模型和算法,通过分析实时拍摄的图像,使用尽量少的时间,以判断出运动的方向。

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

  随着数码光学的软硬件发展,数码摄像技术得到广泛应用,由于成像设备等各方面因素的限制,设定成像分辨率为32×64,每个像素取对应网格亮度平均值。在图像摄取过程中,整个视野区域向某个方向(理解为直线)缓慢运动时,每隔一段时间拍摄一帧图像获得一组图像序列,实时传输给计算机,要求以尽量少的时间判断出运动的方向,并保证足够的精度。若图像满足“各向同性的一阶马尔科夫过程”假设,则使用一到两帧图像便可判断出运动方向。由于没有对帧率明确定义,进行分类讨论:
  一、摄像帧率较低,或者说不考虑单帧画面的运动性,图像是清晰的,则根据运动跟踪理论,利用至少两帧图像可判断出运动方向。拍摄了一组图像来模拟不同真实运动方向的连续两帧图像,在MATLAB编程环境下,建立了简洁的基于特征的图像跟踪算法模型,跟踪计算二值化处理后图像中的目标形心。涵盖全部方向范围的试验,结果验证了当背景中目标较明显时,模型可以以较高精度判断出运动方向,并可扩展到解决更复杂的图像跟踪问题。模型可应用到行人跟踪、智能交互等领域中。
  二、摄像帧率较高,每帧图像包含了因为视野区域发生运动导致的位移,即图像是模糊的,通过设计图像模糊算法,仅利用一帧图像便可判断出运动方向。利用Photoshop生成了一组模拟不同真实运动方向的模糊图像,基于滤波方向为运动模糊方向时,微分图像灰度绝对值之和最小,在MATLAB编程环境下,建立高通滤波算法模型,涵盖全部方向范围的试验结果验证了可以在大角度范围内准确地判断出运动方向;通过建立基于频谱预处理的算法模型补充解决小角度运动方向判断精度不足问题。这两个模型可应用到视频监视、智能交通等领域中。
  本文还对以上两种情况下建立的模型进行讨论、修正和优化。另外,两帧图像间的运动方向判断模型可以推广到序列图像的方向识别中;不过,本文只考虑了平面运动,没有分析空间运动情况。

问题分析:

  题目给出的前提和条件有:
  (1)成像方式
像素(Pixel)指基本原色素及其灰度的基本编码。通过数码摄像设备等设备获得图像传输到计算机,可得到由像素组成的点阵图(即题目中的相同大小矩形格子的组合),以每英寸的像素数(PPI,Pixels Per Inch)来衡量。图像分辨率的表达方式也为“水平像素数×垂直像素数”,题目给定成像分辨率取32×64。点阵图具有精细的图像结构、丰富的灰度层次和广阔的颜色阶调(色调值)。题目为简单起见,给定只需考虑单色成像,即用灰阶图(Gray Scale)来显示图像,图像的所有轮廓都是由深浅不同的灰色像素构成,是把白色和黑色之间按对数关系分为0~255共256阶,称为灰度,这里每个像素的取值为对应格子的亮度(lightness)平均值。其实,亮度是与颜色多明亮有关系的色彩空间的一个维度,调整亮度的方法就是设置Gamma值——其定义恰恰是图像的灰度值[14]。
  (2)运动方式
  运动方向:题目给定视野区域向“某个方向”运动,则认为始终是直线运动,即将成像系统看成线性系统。当然,并未说明是平面运动还是空间运动,即没有说明成像设备与成像目标物体之间的距离是否发生改变。首先讨论平面运动的情况,空间运动的情况将在后面进行说明。
  运动速度:“缓慢”是一个相对拍摄时间间隔(帧率)而言的概念,没有具体说明,我们进行讨论:
  一、帧率较低,也就是两帧图像之间隔了数秒甚至更久,成像目标物体发生相对很大位移变化的情况,如图2-1 a)所示,不考虑单帧画面存在运动,即对“运动的画面体现为图像的序列”的一种理解,那么每一幅图像都是清晰地,需要通过设计数学算法,对至少两幅连续图像进行追踪分析才能够判断出运动方向。
  二、考虑实际情况,帧率是较高的,一般是十几至数十秒分之一,则“缓慢”运动,也就是说在两帧之间成像设备与成像目标物体相对位移较小,必然产生模糊运动的情况,如图2-1 a)所示。那么可以通过设计数学算法,仅利用一帧图像便可判断出运动方向,以实现时间尽量少的要求。
在这里插入图片描述

  运动形式:可能匀速运动,加速运动,(振动),主要考虑匀速运动,对分析问题影响不大。
  (3)实时传输
  题目中说明了拍摄图像“实时”传递给计算机,则计算机可以进行实时分析运算,以判断运动方向和修正,认为这个传递时间可以忽略不计,理论上,求出的计算机每次运算耗时应足够短。
  第一阶段问题:要求用最优方法判断出摄影视野区域运动的方向。具体理解为应在结合数码摄像技术和生活实际的前提下,约定满足要求而尽量小的误差区间,以此前提给出以最快时间获取运动方向的数学模型和算法,并对若干满足题目给定条件的图像案例进行试验,验证模型是否符合运行时间最快、判断精度够高的要求。我们按照对题意的不同考虑及是否会产生图像运动模糊来分类,分别用运动跟踪算法和运动模糊算法建立不同模型,判断运动方向,计算误差。

模型假设:

  (1)假设摄像时的环境等客观条件不发生任何改变,即控制无关变量。
  (2)假设图像是自然图像,即每帧图像是“各向同性的一阶马尔科夫过程”,即图像的自相关及其功率谱是各向同性的,即每一帧图像只依赖于前一帧而不依赖过往图像。
  (3)假设是直线的相对运动,因为题目中说明了只是“向某个方向”。在实际应用中,匀速直线运动问题更具有一般性和普遍性;并且,变速的、非直线运动在某些条件下可以被分解成分段匀速直线运动。只要解决匀速直线运动图像序列的方向判断问题,变速的、非直线运动图像序列的方向判断问题就相对容易解决。
  (4)因为运动方向不变,则可将一序列图像移动问题简化成相邻两帧甚至一帧图像间移动的问题,制定出有效算法后再推广到序列图像问题。
  (5)依题,为了辨识方便和计算简单,可以将图像进行灰度化甚至二值化处理。
  (6)只考虑平面运动,不扩展到空间运动。

论文缩略图:

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

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

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

clc
clear
M=32; %图像的像素点宽度
N=64; %图像的像素点高度
%--------------将原始图像处理成符合要求的格式---------------------------%
A=read_seqim(5); %imread 函数读取图像 1 文件
B=read_seqim(8); %imread 函数读取图像 2 文件
for i=1:2if i==1Origin=A;elseOrigin=B;end
% imshow(Origin); %显示原图像
% title('原始彩色图像');
hsv=rgb2hsv(Origin); %提取黑白图像的亮度
H=hsv(:,:,1);%色彩
S=hsv(:,:,2);%深度
V=hsv(:,:,3);%亮度
A=size(Origin);%判断原始数据的像素
%-------------将原图像分割成 32X64 快区域,对每一个区域进行------------%
m=floor(A(1)/M); %原图宽度上将原图分为几块
n=floor(A(2)/N); %原图高度上将原图分为几块
Scolor=zeros(M,N);
t=1;
for i1=1:Mt1=1;for j1=1:NMedium=V(t:i1*m,t1:j1*n);Scolor(i1,j1)=sum(sum(Medium))/(m*n);t1=j1*n;endt=i1*m;
end
%----------------------------储存两张处理后的图像----------------------------%if i==1saveas(gcf,['C:\Users\diaosi\Desktop\matlab1\','图像 1 处理后图像.jpg']);pic_original=Scolor;elsesaveas(gcf,['C:\Users\diaosi\Desktop\matlab1\','图像 2 处理后图像.jpg']);pic_compare=Scolor;end
end
%------------显示原始图像与对比图像(都是经过处理后的)---------------%
figure(1)
imshow(pic_original);
title('图像 1 灰度处理');
figure(2)
imshow(pic_compare);
title('图像 2 灰度处理');
%----------------------------------二值化处理----------------------------------%
pic_original_bw=im2bw(pic_original);
figure(3)
imshow(pic_original_bw);
title('灰度图像 1 二值化处理');
saveas(gcf,['C:\Users\diaosi\Desktop\matlab1\','图像 1 处理后二进制图像.jpg']);
pic_compare_bw=im2bw(pic_compare);
figure(4)
imshow(pic_compare_bw);
title('灰度图像 2 二值化处理');
saveas(gcf,['C:\Users\diaosi\Desktop\matlab1\','图像 2 处理后二进制图像.jpg']);
%%_______X 代表高度,Y 代表宽度___________%%
%---------------求灰度图像 1 二值化处理后亮度的中心位置----------------%
t=0;%定义图像 1 亮度为 1 的个数
pic_original_local_sum_X=0;
pic_original_local_sum_Y=0;
for i=1:Mfor j=1:Nif (pic_original_bw(i,j)==1)pic_original_local_sum_X=pic_original_local_sum_X+i;pic_original_local_sum_Y=pic_original_local_sum_Y+j;t=t+1;endend
end 
pic_original_local_X=floor(pic_original_local_sum_X/t);%定义定义图像 1 亮度中心 X 方向上的位
置
pic_original_local_Y=floor(pic_original_local_sum_Y/t);%定义定义图像 1 亮度中心 Y 方向上的位
置 
%-----------求灰度图像 2 二值化处理后亮度的中心位置---------------%
t1=0;%定义图像 2 亮度为 1 的个数
pic_compare_local_sum_X=0;%x 方向上的位置
pic_compare_local_sum_Y=0;%Y 方向上的位置
for i=1:Mfor j=1:Nif (pic_compare_bw(i,j)==1)pic_compare_local_sum_X=pic_compare_local_sum_X+i;pic_compare_local_sum_Y=pic_compare_local_sum_Y+j;t1=t1+1;endend
end 
pic_compare_local_X=floor(pic_compare_local_sum_X/t1);%定义定义图像 2 亮度中心 X 方向的位
置
pic_compare_local_Y=floor(pic_compare_local_sum_Y/t1);%定义定义图像 2 亮度中心 Y 方向的位
置
%------------------判别运动的方向,并输出结果到命令窗口---------------------%
if(pic_compare_local_Y>pic_original_local_Y)&&(pic_compare_local_X>pic_original_local_X) 
degree=atan(abs(pic_compare_local_Y-pic_original_local_Y)/abs(pic_compare_local_X-pic_original_
local_X))*180/pi;fprintf('运动方向为右下,与 Y 轴的夹角为%f\n',degree)
elseif(pic_compare_local_Y>pic_original_local_Y)&&(pic_compare_local_X<pic_original_local_X) 
degree=atan(abs(pic_compare_local_Y-pic_original_local_Y)/abs(pic_compare_local_X-pic_original_
local_X))*180/pi;fprintf('运动方向为右上,与 Y 轴的夹角为%f\n',degree) 
elseif(pic_compare_local_Y<pic_original_local_Y)&&(pic_compare_local_X<pic_original_local_X) 
degree=atan(abs(pic_compare_local_Y-pic_original_local_Y)/abs(pic_compare_local_X-pic_original_
local_X))*180/pi;fprintf('运动方向为左上,与 Y 轴的夹角为%f\n',degree)
elseif(pic_compare_local_Y<pic_original_local_Y)&&(pic_compare_local_X>pic_original_local_X)
degree=atan(abs(pic_compare_local_Y-pic_original_local_Y)/abs(pic_compare_local_X-pic_original_
local_X))*180/pi;fprintf('运动方向为左下,与 Y 轴的夹角为%f\n',degree) 
elseif(pic_compare_local_Y>pic_original_local_Y)&&(pic_compare_local_X==pic_original_local_X
)fprintf('运动方向为右\n')
elseif(pic_compare_local_Y<pic_original_local_Y)&&(pic_compare_local_X==pic_original_local_X
)fprintf('运动方向为左\n')
elseif(pic_compare_local_Y==pic_original_local_Y)&&(pic_compare_local_X<pic_original_local_X
)fprintf('运动方向为上\n')
elseif(pic_compare_local_Y==pic_original_local_Y)&&(pic_compare_local_X>pic_original_local_X
)fprintf('运动方向为下\n')
end
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

持续集成工具Jenkins的使用之安装篇(一)

Jenkins是一个基于Java开发的开源的一种持续集成工具&#xff0c;主要用于环境部署&#xff0c;监控重复性的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。要想使用它&#xff0c;你就必须的先安装&#xff0c;接下来我们就介绍下J…

win10重启以后才能识别有线耳机

最近遇到一件让人很无奈的事情&#xff0c;win10重启以后才能识别有限耳机。奇怪的是无线耳机没有问题。 bing搜索了很多&#xff0c;就是解决不了问题。 偶然之间&#xff0c;文后的参考文献被搜索到&#xff0c;该文献提供的方法比较简单&#xff0c;经过验证&#xff0c;方…

恒创科技:云服务器配置中的vCPU与物理CPU有啥区别?

​  说到云服务器&#xff0c;您可能经常会遇到vCPU这个词&#xff0c;而且它和物理CPU经常被拿来谈论。尽管它们听起来相似&#xff0c;但两者之间存在显著差异。在本文中&#xff0c;我们将详细讨论云vCPU和物理CPU之间的差异。 物理与虚拟 CPU 和 vCPU 之间最显著的区别在…

H5112B 48V 60V 80V 100V 多路共阳 RGB调光 PWM调光芯片

多路共阳恒流芯片是一种常用于LED驱动等应用的电子元件&#xff0c;它可以实现多个LED灯共享一个电流源&#xff0c;并且保持每个LED灯的亮度稳定。其工作原理如下&#xff1a; 多路输入&#xff1a;多路共阳恒流芯片通常有多个输入引脚&#xff0c;每个引脚对应一个LED灯。这…

kafka集群和Filebeat+Kafka+ELK

一、Kafka 概述 1.1 为什么需要消息队列&#xff08;MQ&#xff09; 主要原因是由于在高并发环境下&#xff0c;同步请求来不及处理&#xff0c;请求往往会发生阻塞。比如大量的请求并发访问数据库&#xff0c;导致行锁表锁&#xff0c;最后请求线程会堆积过多&#xff0c;从…

攻防世界WEB新手训练区

view_source 此题我愿称之为网安领域的hello world 查看网页源代码的方式一般有—— 右键->查看网页源代码F12->源代码/来源Ctrlu 随后可以再代码第17行处找到flag&#xff0c;至此迈入网安第一步。可喜可贺&#xff0c;可喜可贺... get_post 考察http的两种请求方式&…

“JavaScript 循环中的 ‘await‘

目录 前言 for使用await -- 有效的 forEach使用await -- 无效的 for of 使用await 有效的 for await of 使用await 有效的 总结 前言 在JavaScript的forEach方法中使用await是无效的&#xff0c;因为forEach方法不支持异步操作的等待。 forEach是一个数组的遍历方法&…

精要图示:园区金融数字化服务蓝图,以园区为支点推动信贷业务增长

作为企业集聚地&#xff0c;园区已然成为银行业夯实客群基础的重要切口&#xff0c;各大行陆续围绕园区场景创新金融产品&#xff0c;以期抢跑园区金融新赛道、把握新增量。 启信慧眼首推一站式【园区金融】数字化服务方案&#xff0c;该方案同时支持启信天元私有化部署&#x…

windows下git pull超时,ping不通github

报错 ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 解决办法 修改hosts 最后加一行&#xff0c;文件位置&#xff1a;…

Kotlin Multiplatform项目推荐 | 太空人分布图

Kotlin Multiplatform项目推荐 | 太空人分布图 项目简介 Kotlin Multiplatform项目是一种跨平台开发技术&#xff0c;它可以同时使用SwiftUI、Jetpack Compose、Compose for Wear OS、Compose for Desktop、Compose for Web、Kotlin/JS React等客户端框架&#xff0c;并且使…

分表过多引起的问题/Apache ShardingSphere元数据加载慢

目录 环境 背景 探寻 元数据的加载策略 如何解决 升级版本到5.x 调大max.connections.size.per.query max.connections.size.per.query分析 服务启动阶段相关源码 服务运行阶段相关源码 受到的影响 注意事项&#xff08;重要&#xff09; 其他 环境 Spring Boot 2…

【linux】Debian防火墙

Debian系统默认没有安装防火墙&#xff0c;但用户可以根据需要自行选择并安装一个防火墙以增强系统安全性。 一、查看Debian 桌面系统的防火墙是否关闭 在Debian及其他基于Linux的桌面系统中&#xff0c;防火墙功能通常是由iptables或nftables规则集控制的&#xff0c;而ufw&…

docker容器启动后修改或添加端口 nacos容器 版本2.x需要额外开放9848、9849

1.输入docker ps -a查看需要修改的容器ID: 记录下、 docker ps -a 2.停止docker systemctl stop docker 3.进入docker 容器文件夹&#xff0c;找到对应容器的位置&#xff1a; docker的默认文件夹应该是/var/lib/docker 如果不是root用户查看的话&#xff0c;可能会出现权限…

LeetCode 热题 100 | 子串

目录 1 560. 和为 K 的子数组 2 239. 滑动窗口最大值 3 76. 最小覆盖子串 菜鸟做题第二周&#xff0c;语言是 C 1 560. 和为 K 的子数组 题眼&#xff1a;“子数组是数组中元素的连续非空序列。” 解决本问题的关键就在于如何翻译问题。子数组 s 的和可以看作数组 i 的…

智能充电桩,机器人 wifi蓝牙 解决方案

新联鑫威低功耗高性价比sdio wifi/蓝牙combo的模块单频2.4g的CYWL6208&#xff0c;双频2.4g/5g CYWL6312可以应用到一些低延时 高性能 低功耗 联网需求的交流直流充电桩&#xff0c;扭力扳手&#xff0c;agv机器人&#xff0c;目前支持主流的stm32F4/GD32F4 瑞萨 psoc的主控&am…

Shell脚本——循环语句(for、while和until循环)

一、命令 1.echo命令 echo -n 表示不换行输出 echo -e 输出转义字符&#xff0c;将转义后的内容输出到屏幕上 常见转义字符&#xff1a; \b 相当于退格键 转义后相当于退格键&#xff08;backspace&#xff09;&#xff0c;但是前提是“\b”存在字符。“\b”表示删除前一个…

Maven(上):Maven介绍、安装配置及工程构建

1. Maven介绍 Maven 是一款为 Java 项目管理构建、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 Maven就是一个软件&#xff0c;掌握安装、配置、以及基本功能 &#xff…

二叉树的最大深度[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个二叉树root&#xff0c;返回其最大深度。 二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a…

Java面试——基础篇

目录 1、java语言有哪些优点和缺点? 2、JVM 、 JDK 和 JRE的关系 3、为什么说 Java 语言“编译与解释并存”&#xff1f; 4、Java和c的区别 5、基本数据类型 5.1、java的8种基本数据类型&#xff1a; 5.2、基本类型和包装类型的区别&#xff1a; 5.3、包装类型的缓存机…

【大数据】YARN常用命令及Rest API

YARN 1.YARN常用命令 1.1 作业 命令说明yarn application -list列出所有的applicationyarn application -list -appStates [ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED]根据application状态过滤yarn application -kill [applicationId]…