2016年认证杯SPSSPRO杯数学建模B题(第二阶段)多帧图像的复原与融合全过程文档及程序

2016年认证杯SPSSPRO杯数学建模

B题 多帧图像的复原与融合

原题再现:

  数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制,拍摄设备只能在较低的分辨率下成像。为简单起见,我们只考虑单色成像。假设成像的分辨率为 32 × 64,成像方式是将整个矩形视野划分成 32 × 64 个相同大小的矩形格子,图像中每个像素的取值为对应格子的亮度平均值。每间隔一定时间拍摄一帧图像,运动的画面体现为图像的序列。
  第二阶段问题: 对一副静态的图像而言,每个像素对应于视野中的一个格子,每个格子内部的细节信息已经无法还原。但如果在视野移动的过程中拍摄系列图像,我们通过对多帧图像进行对比分析,仍然有可能还原出来一些在单张照片中无法体现的细节。请建立合理的数学模型和算法,通过对多帧图像进行分析,尽可能多地还原出被摄物的细节。

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

  随着计算机技术的发展,人们对于图像美观的需求越来越高,图像处理技术也逐渐成为了一个热点问题。然而,人们所得到的图像并不一定是清晰而且完整的。在对图像的进行收集时,有众多的因素会引起所收集图像的分辨率的下降和图像失真,其主要表现为模糊、噪声和丢失像素点。造成模糊的因素有很多,例如由被拍摄的运动对象所带来的运动模糊现象、拍摄仪器的大光圈所带来的散焦现象以及当矢量图转化为位图时所导致的失真现象等。为了解决以上问题,我们对多种算法进行了分析比较:
  对于低分辨率下运动图片中的细节缺失问题,我们使用了基于维纳滤波器的几何均值滤波算法作为基础的复原模型。我们对多张合适的单色、模糊图片进行统计分析并优化得到合适的算法。通过实验我们发现:要保证模型所匹配到缺失细节的数量和准确度,需要重点考虑两点因素:相邻两幅运动图像的相似程度和特征块匹配及其融合。对于前者,我们使用了交叉熵和峰值信噪比作为评判指标;对于后者,我们在不同情况分别使用了傅里叶变换、小波变换的方式择优进行融合。
  在模型的对比验证阶段,我们分别利用了传统滤波算法和本文提出的多帧图像复原与融合模型进行图像复原,并通过实验体现了我们提出模型的效率;最后,我们使用峰值信噪比、信息熵、均方差等数据进行实验结果分析并验证了模型的健壮性。

问题分析:

  题目要求研究单色成像,那么每一个像素点的区别就是用格子的亮度来表示。对于一个32×64 的矩阵格子,我们可以生成一个大小为32×64 的亮度矩阵来模拟视野中观察到的图像。随着物体在视野区域向某个方向移动,亮度矩阵会随之有规律的变化。
  题目没有明确规定间隔多少时间拍摄一帧图像。由于视野向某个方向缓慢运动,不同的时间间隔拍摄图像,在同一帧中视野区域内容也不一样。将拍摄时间间隔作为变量,建立的算法要求在足够大的拍摄时间间隔下实现较高的识别度。
  题目要求通过多帧图像对比分析还原出在单张照片中无法体现的细节。在建立模型的过程中,我们仍需考虑现有的单张图片还原算法处理模糊图片,再将本文的算法模型进行对比,体现出多帧图像处理的优势。题目要求尽可能多的还原出被摄物的细节。即在不限定算法时间复杂度的前提下(电脑能够运行完成算法即可),还原出被摄物最多的细节。
  被摄物的细节可以由主观评价和客观评价组成。主观评价可以由多准则决策方法实现。但由于该题需要客观地评价被摄物的细节,我们的模型通过大量客观的图像评价指标评价算法细节还原效率以及准确度,主观评价部分展示经过算法处理的图片,文中不作主观评价。

模型假设:

  1. 假设计算机能接受的亮度的范围为0至255。那么亮度矩阵表示为由0至255构成,大小为32×64 的亮度矩阵。
  2. 假设原始的图像噪声足够少,使得肉眼能够分辨出图片的部分细节。
  3. 假设拍摄的时间间隔足够小,使相邻两组视野中图像有相同的特征便于算法提取。
  4. 假设相机在运动过程拍摄的照片会产生模糊,从而导致照片细节不清晰。
  5. 假设选取的进行实验的20张随机图片样本可以代表总体。
  6. 假设算法运行的实验环境相同。

论文缩略图:

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

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

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

1 clc
2 clear all
3 close all
4 %for i=1:2
5 I=imread(7.png’);
6 %subplot(231);
7 figure(1)
8 imshow(I);
9 I=rgb2gray(I);
10 %subplot(232);
11 figure(2)
12 imshow(I);
13 noise=0.1*randn(size(I));
14 PSF=fspecial(’motion’,21,11);
15 Blurred=imfilter(I,PSF,’circular’);
16 BlurredNoisy=im2uint8(Blurred);
17 NP=abs(fftn(noise)).ˆ2;
18 NPOW=sum(NP(:)/prod(size(noise)));
19 NCORR=fftshift(real(ifftn(NP)));
20 IP=abs(fftn(I)).ˆ2;
21 IPOW=sum(IP(:)/prod(size(noise)));
22 ICORR=fftshift(real(ifftn(IP)));
23 ICORR1=ICORR(:,ceil(size(I,1)/2));
24 NSR=NPOW/IPOW;
25 %subplot(233);
26 figure(3)
27 imshow(BlurredNoisy,[]);
28 %title(’第一帧’);
29 %subplot(234);
30 figure(4)
31 imshow(deconvwnr(BlurredNoisy,PSF),[]);
32 %title(’deconbwnr(A,PSF,NSR));
33 %subplot(235);
34 figure(5)
35 imshow(deconvwnr(BlurredNoisy,PSF,NCORR,ICORR),[]);
36 %title(’deconbwnr(A,PSF,NCORR,ICORR));
37 %subplot(236);
38 figure(6)
39 pic=imshow(deconvwnr(BlurredNoisy,PSF,NPOW,ICORR1),[]);
40 %title(’deconbwnr(A,PSF,NPOW,ICORR_1_D));
41 %end
1 load wbarb; X1 = X; map1 = map; subplot( 2,2,1) ;
2 image( X1) ; colormap( map1) ; title( ’图像wbarb’) ;
3 load woman; X2 = X; map2 = map; subplot( 2,2,2) ;
4 image( X2) ; colormap( map2) ; title( ’图像woman’) ;
5 [C1,L1]= wavedec2( X1,2,’sym4’) ; [C2,L2]=wavedec2( X2,2,’sym4’) ; C = C1
+ C2;
6 XX = waverec2( C,L1,’sym4’) ; subplot( 2,2,3) ; image( XX) ; colormap(map1) ; title( ’小波融
合1) ;
7 Csize1 = size( C1) ;
8 for i = 1: Csize1( 2)
9 C1( i) = 1.2*C1( i) ;
10 end
11 Csize2 = size( C2) ;
12 for j = 1: Csize2( 2)
13 C2( j) = 0.8* C2( j) ;
14 end
15 C = 0.5* ( C1 + C2) ; XXX = waverec2( C,L2,’sym4’) ;
16 subplot( 2,2,4) ; image( XXX) ; colormap( map2) ; title( ’小波融合2);
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

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

相关文章

如何在Java中调用DLL动态库

在Java编程中,有时我们需要调用本地代码库,特别是Windows平台上的DLL(动态链接库)。这种技术允许Java程序利用操作系统特定或性能敏感的功能。在本文中,我们将详细讨论如何在Java中加载和调用DLL动态库,并通…

react中useContext的用法

先在context文件中使用createContext创建初始值 import React from react;const TestContext React.createContext(true);export { TestContext };然后在父组件中引入&#xff0c;利用Provider传入新值 import { TestContext } from /utils/context;<TestContext.Provide…

【Golang入门教程】Go语言变量的声明

Go语言的变量声明是非常灵活和强大的。在Go语言中&#xff0c;你可以通过几种不同的方式来声明变量。下面是一些基本的示例来帮助你理解Go语言中如何声明变量。 ### 1. 使用var关键字 最基本的方式是使用var关键字&#xff0c;后跟变量名、变量类型。你可以在声明的时候初始化变…

NFT Insider #124:Aavegotchi 开启新一季稀有度挖矿,德克萨斯州奥斯汀市登陆 The Sandbox

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members&#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、…

多线程libtorch推理问题

一、环境 我出问题的测试环境如下: pytorch1.10+cu113 pytorch1.10+cu116 pytorch2.2+cu118 libtorch1.10.1+cu113 libtorch1.10.1+cu111 libtorch1.9.0+cu111 二、问题现象 最近封装libtorch的推理为多线程推理的时候,遇到一个现象如下: (1)只要是将模型初始化放到一个…

什么是few-shot learning

什么是few-shot learning Few-shot learning is a kind a meta learningmeta learning: learn to learn 与传统监督算法的不同 传统监督算法&#xff1a;要求模型识别训练数据&#xff0c;并且泛化到测试数据。meta learning的目标是自己学会学习。 教小朋友判断动物的异同…

【主函数参数和 fork 讲解】

主函数参数 main函数是有参数的&#xff0c;而且主函数可以在运行时传参数&#xff0c;举例如下&#xff1a; 【编写main.c文件】 主函数的三个参数&#xff1a;**参数个数&#xff0c;参数内容&#xff0c;环境变量**也可以这样写&#xff1a;环境变量最后一个元素为Null f…

JS判断一个元素是否在可视区域中

JS如何判断一个元素是否在可视区域中&#xff1f;下文分解。 方法一&#xff1a;利用 scrollTop、offsetTop、clientHeight 的关系 /*** 利用 offsetTop < clientHeight scrollTop;* param element* returns*/ export const isInViewPort element > {// clientHeight…

wma格式可以用u盘插音响播放吗?

WMA&#xff08;Windows Media Audio&#xff09;文件格式是由微软公司创建的一种音频文件标准。大多数现代车载音频系统、MP3设备、音响设备都支持播放WMA文件。但是&#xff0c;一些老旧的车载音频系统或设备可能不支持WMA格式&#xff0c;可以将WMA文件转换为更普遍支持的格…

白话transformer(四):整体架构介绍

transformer现在是最主流的深度学习框架&#xff0c;尤其是大模型的流程让transformer的作用更加凸显&#xff0c;他可以对话、分类、生成文本等功能&#xff0c;那么他到底是如何工作的呢。 B站视频 1、背景知识铺垫 1.1、生成式模型 相信大家在使用手机聊天的输入法时&am…

【C++】string类模拟实现

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. 构造函数和析构函数3. 遍历3.1 下标[]3.2 迭代器 4. Modifiers4.1 push_back和append4.2 4.3 insert4.4 erase4.5 swap 5.Capacity5.1 resize5.2 clear 6. 深浅拷贝6.1 浅拷贝&#xff08;值拷贝&#xff0…

C语言puts( )函数和 printf( )函数在输出字符串时有何区别?

一、问题 puts( )函数是专门⽤于字符串输出的函数&#xff0c;printf( )函数的&#xff05;s 格式也可以输出字符串&#xff0c;⼆者是否完全相同&#xff1f;怎样区分使⽤这两个函数&#xff1f; 二、解答 (1&#xff09;printf( )函数可以输出各种类型&#xff0c;并且⼀次…

wy的leetcode刷题记录_Day92

wy的leetcode刷题记录_Day92 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-3-22 前言 目录 wy的leetcode刷题记录_Day92声明前言2617. 网格图中最少访问的格子数题目介绍思路代码收获 695. 岛屿的最大面积题目介绍思路代码收获 2…

Springboot vue elementui 超市管理系统

Springboot vue elementui 超市管理系统 点击获取项目全套源码

适合新生儿的奶瓶有哪些?五款高分新生儿奶瓶分享!

每一个有新生儿的家庭都一定会挑选奶瓶&#xff0c;但是因为市面有太多品牌和款式&#xff0c;让大家难以挑选&#xff0c;更为重要的是还有可能会不小心选到劣质的产品&#xff0c;不仅奶嘴的仿真度差、易胀气&#xff0c;还可能高温消毒后散发有害物质&#xff01;那么新生儿…

python基础知识(四)

if not x % 2 > if x % 2 ! 0 Python HTML和XML解析的第三方库是 Beautifull Soup 不属于软件设计原则是 自底向上 用来表示实体之间联系的是 二维表 当对关系R和S进行自然连接时&#xff0c;要求R和S含有一个或者多个共有的 属性&#xff08;关系就是二维表&#xff09…

仿muduo库实现one thread one loop式并发服务器

文章目录 一、项目简介 二、项目整体认识 2、1 HTTP服务器 2、2 Reactor模型 三、预备知识 3、1 C11 中的 bind 3、2 简单的秒级定时任务实现 3、3 正则库的简单使用 3、4 通用类型any类型的实现 四、服务器功能模块划分与实现 4、1 Buffer模块 4、2 Socket模块 4、3 Channel模…

算法系列--递归(2)

&#x1f495;"什么样的灵魂就要什么样的养料&#xff0c;越悲怆的时候我越想嬉皮。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–递归(2) 前言:今天带来的是算法系列--递归(2)的讲解,包含六个和二叉树相关的题目哦 1.计算布尔⼆叉树的…

就业班 第二阶段 2401--3.21 day3 备份

一、逻辑备份 备份的是建表、建库、插入等操作所执行SQL语句&#xff0c;适用于中小型数据库&#xff0c;效率相对较低。 本质&#xff1a;导出的是SQL语句文件 优点&#xff1a;不论是什么存储引擎&#xff0c;都可以用mysqldump备成SQL语句 缺点&#xff1a;速度较慢&…

005——串口移植(基于鸿蒙liteos-a)

目录 一、 Liteos-a中串口的使用 1.1 内核里打印 1.2 APP控制台 ​编辑 1.2.1 /dev/console 1.2.2 /dev/serial 1.2.3 /dev/uartddev-0 1. 总体介绍 2. device_t 3. drvier_t 4. uartdev_fops 1.2.4 uart_ops 二、 鸿蒙串口内部的一些机制&#xff08;流水账&…