2014年认证杯SPSSPRO杯数学建模B题(第二阶段)位图的处理算法全过程文档及程序
2014年认证杯SPSSPRO杯数学建模
B题 位图的处理算法
原题再现:
图形(或图像)在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形,位图则使用像素来描述图像。一般来说,照片等相对杂乱的图像使用位图格式较为合适,矢量图则多用于工程制图、标志、字体等场合。矢量图可以任意放缩,图形不会有任何改变。而位图一旦放大后会产生较为明显的模糊,线条也会出现锯齿边缘等现象。
第二阶段问题: 位图在放大时,图像质量常会有所下降,如容易产生较为明显的模糊或马赛克等现象(见图2)。请你建立合理的数学模型,来设计一个放大位图的算法,使图像在被放大后仍能尽量保持较好的图像质量。
整体求解过程概述(摘要)
本文针对位图的放大问题,以题中所给的位图为切入点,综合分析了位图各像素点的坐标及其对应的RGB分量,并通过文献的查阅,基于插值图像边缘部分的分辨率对整个图像放大的重要影响,确立了对边缘部分与非边缘部分采取不同插值算法的建模思路,建立了基于Sobel算子改进后的彩色图像边缘检测模、Thiele - Newton插值法图像边缘部分放大模型、图像放大的分片连续模型和图像“质检—去噪—后处理”模型,运用Matlab软件,C++对图像数据进行处理、分析。最后,对整个模型存在的不足与优点进行讨论,提出对原模型的改进和推广。
针对问题一,首先,使用改进后的适用于彩色图像的Sobel算法对原图像,借助C++程序对图像进行边缘检测,得到边缘像素点及其RGB值。然后,对边缘像素点进行精密的Thiele - Newton二元有理插值,实现边缘区域的放大算法。
针对问题二,通过对非边缘图像划分区域段,建立段内连续函数,连续段间的延拓将其分为分片连续的曲面。然后,将整个非边缘曲面表示为了二元的分片连续函数,通过像素RGB分量在新坐标系中的映射关系实现非边缘区域的放大算法。
针对问题三,首先,问题一与问题二中模型所产生两部分区域放大的组合已初步实现了整个图像的高保真放大,但基于对图像清晰度及背景平滑性的考虑,需要对放大后的图像进行进一步处理。使用彩色图像矢量中通滤波进行去噪处理,并利用反锐化掩模法对插值图像的细节进行进一步增强。本文还对模型的误差进行了具体分析;对模型的优化提出了针对性的改进,分析了模型存在优势与不足。最后,我们又对模型进行了多个方向的推广,分析了其在三维图像放大处理与二维图像缩小处理上的应用前景。
问题分析:
问题一:对彩色图像进行边缘区域检测并对其进行边缘插值。
将问题一拆分为两个部分:第一,改进Sobel算子,对目标彩色图像边缘区域进行检测;第二,对边缘区域像素点进行插值。首先,运用数学软件Matlab对检测目标图像的边缘区域,得到轮廓像素点的坐标及其对应的RGB分量。考虑到Sobel算子对灰度图像边缘检测效果较好,但是对彩色图像边缘检测会出现边缘模糊的现象,影响后续图像处理。因此,根据彩色图像特点,通过计算RGB分量梯度值,改进Sobel边缘检测方法,提升边缘检测效果。其次,在图像边缘区域采取自适应插值算法,运用较小的运算价,以便能够得到更好的放大效果。
问题二:对图像进行分片处理,确定局部连续区域(非边缘区域)分片为曲面,并对曲面进行插值。经过模型Ⅰ和模型Ⅱ对图像边缘像的检测提取并进行插值放大处理后,我们需要对大量的非边缘图像部分进行放大处理。使用较为普遍的算法如最近邻域法,双线性内插法,三次内插法等方法虽然能够快速生成较为视觉效果较为良好的目的图像,但仍然存在图像中物体边界区域模糊的问题,限制了其在实际生活场合以及专业图像处理场合的应用。基于此,我们采用一种图像的分片连续数学模型,先将图像分片为连续的曲面,再对曲面进行插值,将原始图像用二元分片连续函数表示,进而对非边缘部分进行放大处理。
问题三:对目标图像进行放大后的质量提升处理。经过对目标图像两部分有针对性地进行不同的插值放大算法后,我们得到了目标图像初步放大后的结果。但为了保证放大后图像的视觉质量,我们需要对放大后的图像进行如下操作:
模型假设:
1.假设目标图像水平清晰度较高,图像质量较高。
2.假设目标图像尺寸较小,像素点数量有限,可以进一步进行图像放大。
3.假设目标图像可能被噪声污染,存在一定噪点,需要进行去噪处理。
4.假设对目标图像的像素点进行插值得到的曲线或平面具有一定的光滑性。
论文缩略图:
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码:(代码和文档not free)
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
int _tmain(int argc, _TCHAR* argv[])
{
// TODO: Add your command handler code here
//定义的变量
IplImage* pImage= NULL; // 声明 IplImage 变量
IplImage* pImgSobelgray= NULL;// 声明 IplImage 变量,用于灰度图像 Sobel 变换
IplImage* pImg8u= NULL;// 声明 IplImage 变量,用于图像格式转换
IplImage* pImg8uSmooth= NULL;// 声明 IplImage 变量,用于存储平滑后的图像
IplImage* pImgColor= NULL;// 声明 IplImage 变量,用于 Sobel 变换IplImage* pImgSobelcolor= NULL;// 声明 IplImage 变量,用于彩色图像 Sobel 变换
IplImage* pImgPlanes[3] = { 0, 0, 0 };
IplImage* pImage = cvLoadImage ( "barbara.png", CV_LOAD_IMAGE_GRAYSCALE );
cvNamedWindow ( "Original Image " , 1 );
cvShowImage ( " Original Image " , img );
//将已读入系统的图像复制一份
//pImage=cvCloneImage( img );
//建立和原始图像一样图像内存区,图像元素的位深度设为 IPL_DEPTH_8U
//即无符号 8 位整型
pImg8u = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U, 1);
pImg8uSmooth = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U, 1);
//对灰度图像进行 Sobel 变换
//将彩色图像转换为灰度图像
cvCvtColor(pImage, pImg8u, CV_BGR2GRAY);
//对图像进行高斯滤波
cvSmooth( pImg8u, pImg8uSmooth,CV_GAUSSIAN,3,0,0);
//建立一新图像内存区,图像元素的位深度设为 IPL_DEPTH_16S 有符号 16 位整型
//因为 cvSobel 函数要求目标图像必须是 16-bit 图像
pImgSobelgray = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_16S, 1);
//计算一阶 x 方向的图像差分,可根据需要设置参数
cvSobel(pImg8uSmooth, pImgSobelgray,0,1,3);
//将图像格式再转换回来,用于显示cvConvertScaleAbs(pImgSobelgray,pImg8u,1,0 ) ;
//创建窗口,显示图像
cvvNamedWindow( "Sobel gray Image", 1 ); cvvShowImage( "Sobel gray Image", pImg8u );
//对彩色图像进行 Sobel 变换
//建立 3 个图像内存区,分别存储图像 3 个通道,图像元素的位深度设为 IPL_DEPTH_8U
int i;
for( i = 0; i < 3; i++ )
pImgPlanes[i] = cvCreateImage( cvSize(pImage ->width, pImage ->height), 8, 1 );
//建立一新图像内存区,图像元素的位深度设为 IPL_DEPTH_16S 有符号 16 位整型
pImgSobelcolor = cvCreateImage( cvSize(pImage ->width, pImage ->height),
IPL_DEPTH_16S, 1 );
//要求输出图像是 16 位有符号的
pImgColor = cvCreateImage( cvSize(pImage ->width, pImage ->height), 8, 3 );
//将彩色图像分成 3 个单通道图像
cvCvtPixToPlane(pImage, pImgPlanes[0], pImgPlanes[1], pImgPlanes[2], 0 );
for( i = 0; i < 3; i++ )
{
//分别对每通道图像进行 Sobel 变换
cvSobel( pImgPlanes[i], pImgSobelcolor,0,1,3 );
//转化为 8 位的图像
cvConvertScaleAbs(pImgSobelcolor, pImgPlanes[i], 1, 0 );
}
//将各通道图像进行合并
cvCvtPlaneToPix( pImgPlanes[0], pImgPlanes[1], pImgPlanes[2], 0, pImgColor);
//创建窗口,显示图像
cvvNamedWindow( "Sobel color Image", 1 );
cvvShowImage( "Sobel color Image", pImgColor);
//等待按键
cvWaitKey(0);
//销毁窗口
cvDestroyWindow( " Sobel gray Image " );
cvDestroyWindow( " Sobel color Image " );
//将程序开始定义的变量释放
cvReleaseImage( & pImage);
cvReleaseImage( & pImgSobelgray);
cvReleaseImage( & pImgSobelcolor);
cvReleaseImage( & pImg8u);
cvReleaseImage( & pImg8uSmooth);
return 0;
}
I=imread('写入图片存放的位置,后缀.图像格式');
I1=rgb2gray(I);
I2=medfilt2(I1,[m,n]);
%%%I2 就是中值滤波后的图像,medfilt2 是 matlab 中中值滤波函数,直接调用即可,m 和 n
是选取的平滑窗口,一般为 3*3,可以进行调整
要分离的话,可以这样做:
M=imread('D:\ebook\lena.bmp'); %读取 MATLAB 中的名为 cameraman 的图像
subplot(2,2,1)
imshow(M) %显示原始图像
title('original')
P1=imnoise(M,'gaussian',0.02); %加入高斯躁声
subplot(2,2,2)
imshow(P1) %加入高斯躁声后显示图像
title('gaussian noise');
g1=medfilt2(P1(:,:,1));%%红
g2=medfilt2(P1(:,:,2));%%绿
g3=medfilt2(P1(:,:,3));%%蓝
g(:,:,1)=g1;
g(:,:,2)=g2;
g(:,:,3)=g3;
subplot(2,2,3)
imshow(g)
title('medfilter gaussian')
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可
相关文章:

2014年认证杯SPSSPRO杯数学建模B题(第二阶段)位图的处理算法全过程文档及程序
2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现: 图形(或图像)在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形,位图则使用像素来描述图像。一般来说&#…...

C++基本语法
C是如何工作的 文章目录 C是如何工作的1、新建Hello World工程1.1使用Visual Studio新建项目1.2 HelloWorld1.2.1 命名空间1.2.2 输出输出 1.3 注释1.4 函数1.4.1 使用有返回的函数1.4.2 自定义函数 1、新建Hello World工程 1.1使用Visual Studio新建项目 按照下面的图片&…...

Node Sass does not yet support your current environment
项目运行时报错:Node Sass does not yet support your current environment 原因是node版本过高。 解决办法: 使用nvm管理node版本,(如何安装nvm?请点击跳转) 具体步骤如下: 1.查看当前node…...

长陆工业自动控制系统邀您到场参观2024第13届生物发酵产品与技术装备展
参展企业介绍 珠海市长陆工业自动控制系统股份有限公司于2004年在素有“百岛之市,浪漫之城”的珠江口西岸核心城市—珠海成立。长陆工业是流程工业智能制造自动化、信息化综合解决方案的提供者。产品遍及冶金、化工、建材、食品、石油、橡塑、能源、环保、物流、粮…...

数据仓库——维度表更新
维度表的更新 维度表修改规律: 绝大部分维度表都是不变的很多维度虽然会变化,但是变化的很缓慢源记录产品键不会改变产品描述及其他属性的改变都很缓慢在源OLTP 系统中,新的值会覆盖旧的值在数据仓库中,覆盖维度表的属性并不总是适当的做法…...

Web3创作整理 - 2024-02-23 ~ 2024-03-25
Web3 创作整理 - 2024-02-23 ~ 2024-03-25 整理下3月份的文章,方便大家阅读 分类文章地址🫑ETH什么是Dapp🎼ETH什么是以太坊🎵ETH如何才能拥有ETH🎶ETHBTC网络 vs ETH网络🎙️ETHETH网络中的区块链…...

CSS(一)---【CSS简介、导入方式、八种选择器、优先级】
零.前言 本系列适用于零基础小白,亦或是初级前端工程师提升使用。 知识点较为详细,如果追求非常详细,请移步官方网站或搬运网站。 1.CSS简介 CSS全称:“Cascading Style Sheets”,中文名:“层叠样式表”…...

智慧公厕解决方案打造更加智能的卫生空间
一、智慧公厕方案概述 智慧公厕方案旨在解决现有公厕存在的诸多问题,包括民众用厕困难、环境卫生状况不佳、管理效率低下等方面。针对民众的需求和管理方面的挑战,智慧公厕提供了一套综合解决方案,包括智能导航、环境监测、资源管理等功能&a…...

美团0316春招笔试题
下面是美团2024-03-16笔试真题,进行了VP,由于未参与评测,故不保证正确性,仅供参考。 第一题 小美点外卖 求和然后减去满减和红包即可。 #include <bits/stdc.h> using namespace std; using LL long long ; int n, t, x,…...

typescript 实现RabbitMQ死信队列和延迟队列 订单10分钟未付归还库存
Manjaro安装RabbitMQ 安装 sudo pacman -S rabbitmq rabbitmqadmin启动管理模块 sudo rabbitmq-plugins enable rabbitmq_managementsudo rabbitmq-server管理界面 http://127.0.0.1:15672/ 默认用户名和密码都是guest。 要使用 rabbitmqctl 命令添加用户并分配权限…...

怎样才能把重建大师的空三导进去CC?
导出空三文件xml两者都是通用的,cc和photoscan都可以兼容。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件,输入倾斜照片,激光点云,POS信息及像控点,输出高精度彩色网格模型,可一键…...

命令模式(请求与具体实现解耦)
目录 前言 UML plantuml 类图 实战代码 模板 Command Invoker Receiver Client 前言 命令模式解耦了命令请求者(Invoker)和命令执行者(receiver),使得 Invoker 不再直接引用 receiver,而是依赖于…...

开发一款MMOARPG难度到底有多大
开发一款MMOARPG难度到底有多大 MMORPG游戏开发到底有多难,我们按照过去开发的标准,就比如开发一款传奇,那时候哪会用什么别人的引擎,都是自研,从基础图形API开始。我们不考虑美术和策划,就单指程序&#x…...

RTSP应用:实现视频流的实时推送
在实现实时视频流推送的项目中,RTSP(Real Time Streaming Protocol)协议扮演着核心角色。本文将指导你通过安装FFmpeg软件,下载并编译live555,以及配置ffmpeg进行视频流推送,来实现一个基本的RTSP流媒体服务…...

Java八股文(数据结构)
Java八股文の数据结构 数据结构 数据结构 请解释以下数据结构的概念:链表、栈、队列和树。 链表是一种线性数据结构,由节点组成,每个节点包含了指向下一个节点的指针; 栈是一种后进先出(LIFO)的数据结构&a…...

ActiveMQ Artemis 系列| High Availability 主备模式(消息复制) 版本2.19.1
一、ActiveMQ Artemis 介绍 Apache ActiveMQ Artemis 是一个高性能的开源消息代理,它完全符合 Java Message Service (JMS) 2.0 规范,并支持多种通信协议,包括 AMQP、MQTT、STOMP 和 OpenWire 等。ActiveMQ Artemis 由 Apache Software Foun…...

QGIS插件系列--WhiteBox Tools
WhiteBox Tools(官网机翻): WhiteboxTools是由圭尔夫大学地貌测量和水文地理信息学研究小组(GHRG)开发的高级地理空间软件包和数据分析平台。该项目始于2017年<>月,并在分析能力方面迅速发展。WhiteboxTools的一…...

SpringMVC设置全局异常处理器
文章目录 背景分析使用ControllerAdvice(RestControllerAdvice)ExceptionHandler实现全局异常全局异常处理-多个处理器匹配顺序存在一个类中存在不同的类中 对于过滤器和拦截器中的异常,有两种思路可以考虑 背景 在项目中我们有需求做一个全…...

Acwing_795前缀和 【一维前缀和】+【模板】二维前缀和
Acwing_795前缀和 【一维前缀和】 题目: 代码: #include <bits/stdc.h> #define int long long #define INF 0X3f3f3f3f #define endl \n using namespace std; const int N 100010; int arr[N];int n,m; int l,r; signed main(){std::ios::s…...

docker 部署 gitlab-ce 16.9.1
文章目录 [toc]拉取 gitlab-ce 镜像创建 gitlab-ce 持久化目录启停脚本配置配置 gitlab-ce编辑 gitlab-ce 配置文件重启 gitlab-ce配置 root 密码 设置中文 gitlab/gitlab-ce(需要科学上网) 拉取 gitlab-ce 镜像 docker pull gitlab/gitlab-ce:16.9.1-ce.0查看镜像是不是有 Vo…...

29.Python从入门到精通—Python3 面向对象继承 多继承 方法重写 类属性与方法
29.从入门到精通:Python3 面向对象继承 多继承 方法重写 类属性与方法 继承多继承方法重写类属性与方法 继承 在面向对象编程中,继承是指通过继承现有类的属性和方法来创建新类的过程。新类称为子类(或派生类),现有类…...

jQuery如何获取元素宽高?
在jQuery中,获取元素的宽和高有多种方法,取决于你是否需要包括边框、内边距或其他额外空间。以下是几种常用的方式: 获取元素内容区域的宽和高(不包括边框和内边距): var width $(#yourElement).width(); …...

springdata框架对es集成
什么是spring data框架 Spring Data是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持 map-reduce框架和云计算数据服务。Spring Data可以极大的简化JPA(Elasticsearch…)的…...

jvm(虚拟机)运行时数据区域介绍
Java虚拟机(JVM)运行时数据区域是Java程序在运行过程中使用的内存区域,它主要包括以下几个部分: 程序计数器(Program Counter Register): 程序计数器是一块较小的内存区域,是线程私有…...

C++ MFC 只启动一个程序实例 唤醒之前的实例(完整源码)
初级代码游戏的专栏介绍与文章目录-CSDN博客 很多时候我们希望只允许启动一个程序实例,如果再次运行,就唤醒之前的实例。 目录 1 概述 2 相关技术介绍 2.1 互斥对象 2.2 查找窗口 2.3 唤醒窗口 1 概述 技术上并不难,涉及到以下几个技术…...

2024多云管理平台CMP排名看这里!
随着云计算技术的迅猛发展,多云管理平台CMP应运而生。多云管理平台CMP仅能够简化对多个云环境的统一管理,还能提高资源利用效率和降低成本。因此了解多云管理平台CMP品牌是必要的。2024多云管理平台CMP排名看这里!仅供参考哈! 20…...

MySQL 数据库的日志管理、备份与恢复
一. 数据库备份 1.数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中,数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因: 程序错误人为,操作错误,运算错误,磁盘故障灾难(如火灾、地震࿰…...

一、Go开发环境搭建
文章目录 1、开发工具2、开发环境配置3、Hello World4、语法 1、开发工具 https://code.visualstudio.com/download 2、开发环境配置 类比Java的JDK,go的SDK下载:https://studygolang.com/dl 解压: 配置环境变量path,将命令&quo…...

包子凑数(蓝桥杯,闫氏DP分析法)
题目描述: 小明几乎每天早晨都会在一家包子铺吃早餐。 他发现这家包子铺有 N 种蒸笼,其中第 i 种蒸笼恰好能放 Ai 个包子。 每种蒸笼都有非常多笼,可以认为是无限笼。 每当有顾客想买 X 个包子,卖包子的大叔就会迅速选出若干笼…...

Java八股文(JVM)
Java八股文のJVM JVM JVM 什么是Java虚拟机(JVM)? Java虚拟机是一个运行Java字节码的虚拟机。 它负责将Java程序翻译成机器代码并执行。 JVM的主要组成部分是什么? JVM包括以下组件: ● 类加载器(ClassLoa…...