2018年认证杯SPSSPRO杯数学建模B题(第二阶段)动态模糊图像全过程文档及程序

2018年认证杯SPSSPRO杯数学建模

动态模糊图像复原

B题 动态模糊图像

原题再现:

  人眼由于存在视觉暂留效应,所以看运动的物体时,看到的每一帧画面都包含了一段时间内 (大约 1/24 秒) 的运动过程,所以这帧画面事实上是模糊的。对电影的截图来说,动态画面的每一帧也都是模糊的,例如图 1 为某部电影截图,展现的是在高速飞行中的拍摄效果,所以俯拍到的路面字迹是模糊的。但是一般来说,电脑游戏的每一帧画面都是以清晰的静态方式绘制出的,所以需要较高的帧率才能感觉到平滑,否则感觉会不够流畅。为了以较低的帧率能够取得较流畅的感受,在计算机视觉技术中,人们开发出了能够模拟动态模糊效果的算法。
在这里插入图片描述
在这里插入图片描述
  第二阶段问题: 在拍摄到的某一帧画面中,往往只有部分场景处于运动状态。例如图 2 是伦敦的公交车经过电话亭时拍摄到的画面,图中的主要景观中,只有车辆是运动的,所以产生了运动模糊的效果。请你设计有效的数学模型,将只有部分景观存在动态模糊的帧恢复出尽可能清晰的画面。在论文中可以使用图 2 ,也可以另行选用动态模糊的图像作为算例。

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

  图像的模糊退化是数字图像处理和视觉系统中存在的一个重要问题,导致这种现象出现的原因有很多。根据产生模糊的原因不同,图像的模糊可以分为很多种,生活中常见的是运动模糊,它的实质大多是由于原目标图像与相机摄像头之间的相对运动造成了运动方向上的平滑滤波,即原始清晰图像与退化函数的卷积过程。在本题目中所给的图像,就是属于运动模糊,处理这种类型的图像,可以分为几个步骤。
  首先,对图像进行预处理,即对图像进行格式转换、加窗处理。相机在视觉范围之内进行成像时,成像范围之外的边缘信息并未被卷积关系牵涉进来,因而在图像复原时由于缺少这些边缘信息而在图像边缘处产生截断现象,即产生边缘振铃效应,为了有效地抑制复原图像的振铃效应,提出了一种基于边缘恢复的抑制运动模糊图像振铃效应的方法——最优窗算法。其可在保留原图像边缘细节,且不增加运算量的前提下,有效抑制图像恢复过程中的振铃效应。然后对预处理后的图像进行傅里叶变换,和灰度均衡,得到图像的频谱,以便进行下一步的图像处理。
  其次,为了得到点扩散函数的计算模型,需要对图像进行二值化和 Radon 变换。图像二值化就是将图像上的像素点的灰度值设置为 0 或 255,就是将整个图像呈现出明显的黑白效果的过程,从而得到图像的轮廓信息,图像的二值化有很多方法,有固定门限二值化、Dither 矩阵二值化、基本自适应门限二值化等,这些方法的运用需要选定一个合适的阈值,阈值可以手动选择也可以自动生成,按图片的需要进行选择。然后对图像进行 Radon 变换,在数学上,Radon 是一种积分变换,这个变换将二维平面函数变换成一个定义在二维空间上的一个线性函数,即相当于得到函数的投影讯号,对图像做 1 到180 的 Radon 变换,得到一个变换矩阵,找出这个矩阵中的最大值,此最大值所对应的列数即为图像的模糊角度。模糊的图像的频谱会出现黑色带条,通过分析频谱图,得到一个量化的反比关系公式和黑带的精确位置,通过微分自适应可以估算出运动模糊图像的模糊长度。
  通过以上的分析,用 MATLAB 和 OPENCV 建立相应的数学模型,处理题目中和自行拍摄的图像,得出模拟结果,并对结果进行分析,指出缺点和不足。

问题分析:

  观察所给图片,图中所示为公交车在路上行驶的画面,其中静止的行人和电话亭,以及商店的招牌都清晰可见,公交车因为运动而造成了在图像中的模糊。分析可知,图像的拍摄与公交车的平面有一定的角度,本题中的相机拍摄时是静止的,只有公交车是运动的,所以在求解时,需要对动态模糊的角度和动态模糊的长度的估算。在处理这种部分模糊的图像时,可以分为以下步骤:
  1.首先需要对部分动态模糊图像进行分离,将图像中模糊部分和非模糊部分分离。
  2.对分离后的模糊图像进行傅里叶变换得出其频谱,从而观察动态模糊的方向。
  3.利用灰度均衡和消除噪声技术,对图像进行预处理,方便后面的处理过程。按照不同的方式分类,噪声分为白噪声、椒盐噪声、冲击噪声和量化噪声等,对噪声的消除有很多种方法,比如均值滤波,自适应维纳滤波,中值滤波等方法都可以很好的消除图片的噪声;
  4.运用二值化和 Radon 变换求出图片的轮廓信息。
  5.综合以上的处理过程,求出模糊图像处理中的两个重要参数:模糊角度和模糊长度。得到模糊图像的点扩散函数。
  6.对模糊图像进行去模糊处理。其方法主要有逆滤波恢复、有约束最小二乘法恢复、维纳滤波恢复和 Richardson-Lucy 滤波恢复等方法。
  在本文中我们基于 MATLAB 和 OPENCV 建立模糊图像的模型,利用改进后的维纳滤波方法处理模糊图像,并取得了较好的效果。因为带最优窗维纳滤波法可以有效的抑制振铃效应,获得高质量的恢复图像。

模型假设:

  1、假设镜头已经准确的对焦
  2、假设所有的噪声因素是白噪声
  3、不考虑其他因素对图片造成的运动模糊
  4、拍照的过程是一个瞬间动作。

论文缩略图:

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

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

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

close all;
clear all; 
%% 读入并显示图像
filename = '图 2.jpg'; 
I = imread(filename);
figure(1), imshow(uint8(I)); title('原图');
%% 对动态模糊图像进行灰度化,并进行二维快速傅里叶变换,生成其频谱图
gb = rgb2gray(I);
figure(4), imshow(uint8(gb)); 
[p,q]=size(gb);
gb=rot90(gb,2);
figure(5), imshow(uint8(gb)); 
PQ = paddedsize(size(gb)); 
F = fft2(gb, PQ(1), PQ(2)); 
figure(5), imshow(uint8(F)); 
%% 作出倒频谱
F1 = log(1+abs(F)); 
F2 = abs(F1).^2; 
F3 = real(ifft2(F2)); 
figure(6), imshow(uint8(F3)); 
%% 将倒频谱压缩,居中
H = log(1+abs(F3));% 将倒频谱动态范围进行压缩
Hc = fftshift(H); % 将压缩结果进行循环移位,使低频成分居中
figure(9), imshow(uint8(Hc)); 
%% 通过阈值处理,边缘检测“canny”算子二值化倒频谱
T = graythresh(Hc); 
bw=edge(Hc, 'canny', T); 
figure(7), imshow(bw);
%% 对倒频谱从 1°到 180°作 radon 变换,以求出模糊角度
theta = 1:180; 
R = radon(bw, theta); 
figure(8), imshow(R); 
%% 计算出通过倒频谱 radon 变换估计出的模糊角度
MAX = max(max(R)); 
[m, n] = find(R == MAX); 
if 90 < n <= 180 beita = n - 90; 
elseif 0 < n < 90 
beita = n + 90; 
elseif n == [90;90] | n == [180;180] 
beita = n(1) 
end
beita
len=5;
nsr=0.005;
psf=fspecial('motion',len, beita);
wnr1=deconvwnr(gb,psf,nsr);
figure(8),imshow(wnr1,[0 255]),title('维纳滤波复原图像(NSR=0.015)');
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

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

相关文章

C++入门学习(一)写一个helloworld

1、头文件 #include <iostream> using namespace std; 任何程序都需要这两句的&#xff0c;写上就好。 2、主文件 int main() {cout<<"Hello World!"<<endl;return 0; } 由于是int型数据&#xff0c;所以要返回一个值&#xff0c;即return0。…

JVM:垃圾回收机制(GC)

垃圾判断&#xff1a; 引用计数算法&#xff1a; 在对象中添加一个引用计数器&#xff0c;当每有一个地方引用它时&#xff0c;计数器值加一。当引用失效时&#xff0c;计数器值就减一。当一个对象的计数器为零时&#xff0c;表示该对象没有被任何其他对象引用&#xff0c;因此…

【动态规划】【数学】【C++算法】18赛车

作者推荐 视频算法专题 本文涉及知识点 动态规划 数学 LeetCode818赛车 你的赛车可以从位置 0 开始&#xff0c;并且速度为 1 &#xff0c;在一条无限长的数轴上行驶。赛车也可以向负方向行驶。赛车可以按照由加速指令 ‘A’ 和倒车指令 ‘R’ 组成的指令序列自动行驶。 当…

mycat实现mysql读写分离

一. mycat集群HaproxyKeepalived mycat集群HaproxyKeepalivedmysql1主2从 环境规划 centos7.9 1主2从&#xff0c;读写分离 名称ip端口mysql-master192.168.1.2203306mysql-slave1192.168.1.2213306mysql-slave2192.168.1.2223306mycat-1192.168.1.2218066mycat-2192.168.1.…

Redis集群搭建

为什么要有集群 之前我们已经讲了主从的概念&#xff0c;一主可以多从&#xff0c;如果同时的访问量过大(1000w),主服务肯定就会挂掉&#xff0c;数据服务就挂掉了或者发生自然灾难 大公司都会有很多的服务器(华东地区、华南地区、华中地区、华北地区、西北地区、西南地区、东…

Android Studio读写低频RFID T5557卡源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?id675212889085&spma1z10.5-c.w4002-21818769070.13.21166f89nKgnJ7 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xml…

【Docker】实战多阶段构建 Laravel 镜像

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 本节适用于 PHP 开发者阅读。Laravel 基于 8.x 版本&#xff0c;各个版本的文件结构可能会有差异&#xff0c;请根据实际自行修改。 准备 新…

webpack面试题学习

说说你对webpack的理解&#xff1f;解决了什么问题&#xff1f; 说说webpack的构建流程? 说说webpack中常见的Loader&#xff1f;解决了什么问题&#xff1f; 说说webpack中常见的Plugin&#xff1f;解决了什么问题&#xff1f; 说说Loader和Plugin的区别&#xff1f;编写Load…

leetcode 013二维区域和检索---矩阵不可变

给定一个二维矩阵 matrix&#xff0c;以下类型的多个请求&#xff1a; 计算其子矩形范围内元素的总和&#xff0c;该子矩阵的左上角为 (row1, col1) &#xff0c;右下角为 (row2, col2) 。 实现 NumMatrix 类&#xff1a; NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进…

Failed to connect to github.com

链接github超时 hosts文件夹下加上

Python使用HTTP代理实现网络请求的自动化

随着网络技术的发展&#xff0c;网络请求成为了许多应用的重要组成部分。然而&#xff0c;手动发送网络请求不仅效率低下&#xff0c;而且容易出错。为了解决这个问题&#xff0c;我们可以使用Python来实现网络请求的自动化。而HTTP代理可以帮助我们更好地控制和管理这些请求。…

【小笔记】时序数据分类算法最新小结

2024.1.15 最近基于时序数据训练分类算法&#xff0c;对其进行了一番了解&#xff0c;主要围绕以下几点&#xff1a; 时序数据算法有哪些细分类&#xff1f;时序数据分类算法经典模型&#xff1f;当下时序分类算法模型强baseline&#xff1f;有没有现成的工具&#xff1f; 1…

二、VTK 最简单的示例代码-创建圆柱体

今天来使用VS2019 CMake 项目 测试VTK 9.0.0 的环境是否配置好 来测试一段简单的代码 // 1.cpp: 定义应用程序的入口点。 //#include <vtkActor.h> #include <vtkCamera.h> #include <vtkCylinderSource.h> #include <vtkNamedColors.h> #include &l…

【FPGA Modsim】序列检测

实验题目&#xff1a; 序列检测器设计 实验目的&#xff1a; 掌握应用数字逻辑设计集成开发环境进行序列检测器设计的方法&#xff1b;掌握时序逻辑电路设计的过程。 实验内容&#xff1a; 1、设计一个序列检测器…

Talk|香港中文大学高瑞元:MagicDrive - 基于3D几何控制的自动驾驶街景数据生成

本期为TechBeat人工智能社区第565期线上Talk。 北京时间1月18日(周四)20:00&#xff0c;香港中文大学博士生—高瑞元的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “MagicDrive - 基于3D几何控制的自动驾驶街景数据生成”&#xff0c;介绍了他的…

湛江涡轮壳工件实物扫描三维测绘广州抄数公司造型stl转面3d打印

湛江涡轮壳上门实物三维扫描及抄数打印案例&#xff08;CASAIM中科广电&#xff09;&#xff1a; 涡轮壳三维扫描及逆向设计技术是一种基于计算机辅助设计&#xff08;CAD&#xff09;和逆向工程&#xff08;RE&#xff09;的方法&#xff0c;用于对涡轮壳进行精确的三维测量和…

基于小波多普勒变换的回波信号检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1小波变换基础 4.2 多普勒效应与多普勒变换 4.3 小波多普勒变换 4.4 回波信号检测 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 %回波…

解决打开 json 文件中文乱码的问题

如下图&#xff0c;pycharm 打开是下面的样子 右下角的编码尝试了好久&#xff0c;依然打不开 用代码打开就成功了 import jsonwith open(./Mydata/garbage_classification.json,encodingutf8,moder) as f:data json.load(f) print(data)控制台结果&#xff1a;

时序分解 | Matlab实现SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN时间序列信号分解

时序分解 | Matlab实现SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN Matlab语言…

JVM性能调优-垃圾收集器G1详解

目录 G1收集器(-XX:UseG1GC) G1垃圾收集分类 YoungGC MixedGC Full GC G1收集器参数设置 G1垃圾收集器优化建议 什么场景适合使用G1 G1收集器(-XX:UseG1GC) G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足…