个人微信网站建设,网站开发需求预算,建网站要多少钱一个,做网站外包群2014年认证杯SPSSPRO杯数学建模
B题 位图的处理算法
原题再现#xff1a; 图形#xff08;或图像#xff09;在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形#xff0c;位图则使用像素来描述图像。一般来说#…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 );
//将已读入系统的图像复制一份
//pImagecvCloneImage( 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;
}Iimread(写入图片存放的位置后缀.图像格式);
I1rgb2gray(I);
I2medfilt2(I1,[m,n]);
%%%I2 就是中值滤波后的图像medfilt2 是 matlab 中中值滤波函数直接调用即可m 和 n
是选取的平滑窗口一般为 3*3可以进行调整
要分离的话可以这样做
Mimread(D:\ebook\lena.bmp); %读取 MATLAB 中的名为 cameraman 的图像
subplot(2,2,1)
imshow(M) %显示原始图像
title(original)
P1imnoise(M,gaussian,0.02); %加入高斯躁声
subplot(2,2,2)
imshow(P1) %加入高斯躁声后显示图像
title(gaussian noise);
g1medfilt2(P1(:,:,1));%%红
g2medfilt2(P1(:,:,2));%%绿
g3medfilt2(P1(:,:,3));%%蓝
g(:,:,1)g1;
g(:,:,2)g2;
g(:,:,3)g3;
subplot(2,2,3)
imshow(g)
title(medfilter gaussian)全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可