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…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...