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名片即可

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

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

相关文章

某某消消乐增加步数漏洞分析

一、漏洞简介 1&#xff09; 漏洞所属游戏名及基本介绍&#xff1a;某某消消乐&#xff0c;三消游戏&#xff0c;类似爱消除。 2&#xff09; 漏洞对应游戏版本及平台&#xff1a;某某消消乐Android 1.22.22。 3&#xff09; 漏洞功能&#xff1a;增加游戏步数。 4&#xf…

【MATLAB源码-第22期】基于matlab的手动实现的(未调用内置函数)CRC循环码编码译码仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 循环码是线性分组码的一种&#xff0c;所以它具有线性分组码的一般特性&#xff0c;此外还具有循环性。循环码的编码和解码设备都不太复杂&#xff0c;且检(纠)错能力强。它不但可以检测随机的错误&#xff0c;还可以检错突发…

RPA使用Native Messaging协议实现浏览器自动化

RPA 即机器人流程自动化&#xff0c;是一种利用软件机器人或人工智能来自动化业务流程中规则性、重复性任务的技术。RPA 技术可以模拟和执行人类在计算机上的交互操作&#xff0c;从而实现自动化处理数据、处理交易、触发通知等任务。帮助企业或个人实现业务流程的自动化和优化…

【绝对有用】“利用ChatGPT赋能学术写作:技巧、方法与创新策略“

为了帮助读者利用ChatGPT进行学术写作&#xff0c;我以一种引人入胜的信息图表形式&#xff0c;概括了以下步骤和技巧&#xff1a; 使用英文提问&#xff1a;用英文提出问题&#xff0c;可以获得更准确的回答。生成大纲&#xff1a;通过创建文章大纲&#xff0c;为写作提供清晰…

leetcode热题100.柱状图中最大的矩形

Problem: 84. 柱状图中最大的矩形 文章目录 题目思路复杂度Code 题目 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;hei…

按需自动加载 Element Plus 实测

按需加载是一种优化策略&#xff0c;可以提高前端应用程序的性能、用户体验和可维护性。在使用 Element UI 或其他大型 UI 组件库时&#xff0c;通过按需加载可以最大程度地发挥其优势&#xff0c;确保应用程序的性能和可扩展性得到有效的管理&#xff1b;其优势有&#xff1a;…

MySQL安装环境配置,工具(超详细讲解)

一、什么是MySQL MySQL与SQL server一样都是关系型数据库管理系统&#xff0c;起初它是由瑞典的MySQL AB公司开发的&#xff0c;该公司于2008年被Sun公司收购。之后&#xff0c;Sun公司在2009年被Oracle公司收购。现在MySQL是Oracle公司的重要产品之一。 1、MySQL版本 针对不…

python实战之基础篇(二)

一. 定义函数 二. 调用函数 1. 使用位置参数调用函数 2. 使用关键字参数调用函数 三. 参数的默认值 四. 可变参数 1. 基于元组的可变参数 2. 基于字典的可变参数 五. 函数中变量的作用域 global 可以将局部变量提升为全局变量 六. 过滤函数filter() 七. 映射函数map() 八. la…

Elasticsearch 和 Kibana 8.13:简化 kNN 和改进查询并行化

作者&#xff1a;Gilad Gal, Tyler Perkins, Srikanth Manvi, Aris Papadopoulos, Trevor Blackford 在 8.13 版本中&#xff0c;Elastic 引入了向量搜索的重大增强&#xff0c;并将 Cohere 嵌入集成到其统一 inference API 中。这些更新简化了将大型语言模型&#xff08;LLM&a…

【阿里近100人+花27.1万造的】中文医学数据集 ChineseBLUE 分析

中文医学数据集 ChineseBLUE 分析 基本介绍数据集分类构造成本 论文&#xff1a;https://arxiv.org/pdf/2106.08087v5.pdf 链接&#xff1a;https://github.com/alibaba-research/ChineseBLUE 基本介绍 需要注意的是&#xff0c;中文生物医学文本在语言上与英文不同&#xf…

基于Echarts的超市销售可视化分析系统(数据+程序+论文)

本论文旨在研究Python技术和ECharts可视化技术在超市销售数据分析系统中的应用。本系统通过对超市销售数据进行分析和可视化展示&#xff0c;帮助决策层更好地了解销售情况和趋势&#xff0c;进而做出更有针对性的决策。本系统主要包括数据处理、数据可视化和系统测试三个模块。…

ES学习日记(一)-------单节点安装启动

基于ES7.4.1编写,其实一开始用的最新的8.1,但是问题太多了!!!!不稳定,降到7.4 下载好的安装包上传到服务器或虚拟机,创建ES目录,命令mkdir -p /路径xxxx 复制安装包到指定路径并解压: tar zxvf elasticsearch-8.1.0-linux-x86_64.tar.gz -C /usr/local/es/ 进入bin目录安装,命…

工业智能物联网关如何助力工业防震减灾

地震灾害难以预料&#xff0c;一旦发生往往就损失重大。对于工业领域而言&#xff0c;地震灾害的影响不仅仅是对人员安全的威胁&#xff0c;还包括对生产设施的破坏、生产进程的中断以及伴生的持续性经济损失。 随着5G、大数据、物联网技术的发展&#xff0c;面向工业领域构建一…

高效批量管理文件,轻松实现文件批量复制并覆盖相同文件名,轻松管理文件

亲爱的用户们&#xff0c;您是否在批量复制文件时常常被相同文件名困扰&#xff0c;手动一个个改名繁琐又费时&#xff1f;现在&#xff0c;我们为您推出一款智能的文件批量改名工具&#xff0c;帮助您轻松处理复制时的相同文件名&#xff0c;让文件管理更从容&#xff01; 首…

洗车行业在线预约提前下单小程序源码系统 带完整的安装代码包以及搭建教程

随着人们生活水平的提高&#xff0c;汽车保有量不断增加&#xff0c;洗车服务市场需求也日益旺盛。然而&#xff0c;传统的洗车服务方式往往存在排队等待时间长、服务质量不稳定等问题&#xff0c;给消费者带来了不便。因此&#xff0c;开发一款在线预约提前下单小程序&#xf…

基于java+springboot+vue实现的宠物美容机构CRM系统(文末源码+Lw+ppt)23-364

摘要 随着网络科技的不断发展以及人们经济水平的逐步提高&#xff0c;网络技术如今已成为人们生活中不可缺少的一部分&#xff0c;而信息管理系统是通过计算机技术&#xff0c;针对用户需求开发与设计&#xff0c;该技术尤其在各行业领域发挥了巨大的作用&#xff0c;有效地促…

C语言--编译和链接

1.翻译环境 计算机能够执行二进制指令&#xff0c;我们的电脑不会直接执行C语言代码&#xff0c;编译器把代码转换成二进制的指令&#xff1b; 我们在VS上面写下printf("hello world");这行代码的时候&#xff0c;经过翻译环境&#xff0c;生成可执行的exe文件&…

PetaLinux安装详解(Xilinx , linux, zynq, zynqMP)

1 概述 PetaLinux 工具提供在 Xilinx 处理系统上定制、构建和调配嵌入式 Linux 解决方案所需的所有组件。该解决方案旨在提升设计生产力&#xff0c;可与 Xilinx 硬件设计工具配合使用&#xff0c;以简化针对 Versal、Zynq™ UltraScale™ MPSoC、Zynq™ 7000 SoC、和 MicroBl…

【机器学习】包裹式特征选择之序列后向选择法

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

jvm(虚拟机)运行时数据区域介绍

Java虚拟机&#xff08;JVM&#xff09;运行时数据区域是Java程序在运行过程中使用的内存区域&#xff0c;它主要包括以下几个部分&#xff1a; 程序计数器&#xff08;Program Counter Register&#xff09;&#xff1a; 程序计数器是一块较小的内存区域&#xff0c;是线程私有…