图像几何变换的实现Word文件下载.docx
《图像几何变换的实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《图像几何变换的实现Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
C++语言是是一种高级语言,由C语言发展而来的,C++语言不但继承了C语言的简练、高效和在某些操作上沿袭了汇编语言指令的特色,支持用C语言设计的系统基础类,C++也有其独特的特点:
支持面向对象编程,支持泛型编程和强大的标准模板库。
基于MFC的软件设计使用C++语言开发不仅可以使用其强大的类库,可以很方便的设计界面平台,还有利于程序文档的编写。
第一章图像基础
1.1图像的矩阵表示
通常在计算机平面上看到的画面是通过图形或者图像的形式显示的,图形和图像是计算机上两种不同的图像存储形式。
通常图形是以矢量结构的形式存储图形数据的;
图像则是以栅格结构的形式存储图的,每个栅格又被称为一个像素,图像就是将一幅图片分成很多的栅格,像素以数列矩阵的形式排列,就组成一个像素矩阵,一幅图像就以这种数列矩阵的形式存储在计算机上的;
像素描述一幅图像的基本信息包括图像的强度、颜色和坐标等,这种以像素和数列矩阵的形式存储图像数据的存储方式方便设计和实现数字图像处理操作。
图像存储了大量的信息,这样显示出的图像效果比较准确,但由此图像的存储空间就比较大,系统在显示图像是还要大量的内存,使用图像压缩算法将图像的数据进行压缩,可以使得系统在显示图像时花费的内存开销减少,保存文件时相应需要
的存储空间也降低。
自然界的图像可以用基于三维坐标的三维函数来表示,即:
}(1-1)
其中,,分别代表该位置像素点的红、绿、蓝三种原色的色彩分量值,协调不仅记录了像素值还保存了像素地址,每个组件是一个连续函数空间,即每个点的连续空间治疗后有一个精确的数值对比。
在每一个点的二维平面只包含两个坐标平面图像的功能,可以代表一个连续的一个二维函数,即:
x,y)(1-2)
连续数字图像f(x,y)的一个类似的表示,一般是由采样值矩阵由点现金图像存储算法:
(1-3)
在每个采样单元矩阵称为像素,在(1-3)型,M,N都记录在数字图像(横向),列(垂直)方向的像素数。
与二维阵列的矩阵形式表示的数字图像的通用计算机,根据不同的方法,该像素结构或保存,并可能构成不同的图像格式,以一种方式把图像数据保存为文件就能够得到图像文件。
以不同的数据格式处理图像之后,将图像保存而获得的图像文件后缀名通常不同。
比较常见的图像文件扩展名有JPG、BMP等。
本文做的软件以BMP格式的图像为目标。
1.2BMP位图文件
位图分为内部位图和外部位图两种格式,内部位图格式是一种系统设置有关的格式,当系统的设置不同时系统显示的图像也会不同;
与独立集系统内部和外部的位图格式的不同,通常后缀BMP位图文件。
BMP位图文件构造(文件头、信息头、颜色表和位图数据)
位图文件头结构 BMPFILEHEAD
位图信息头结构 BMPINFOHEAD
位图颜色表RGBQUAD
位图像素数据
(1)BMP位图文件头
BMP位图文件头结构包含了BMP位图文件存储类型,文件大小和位图起始坐标数据。
其结构类型定义如下:
typedefstructtagBMPFILEHEAD
{
WORDbfType;
DWORDbfSize;
WORDbfRserved1;
WORDbfRserved2;
DWORDbfOffBits;
}BMPILEHEAD;
(2)位图信息头
BMP位图文件头中用于声明一个位图大小属性。
typedefstructBMPINFOHEAD
{
LONGbiWidth;
LONGbiHeight;
WORDbiPlanes;
WORDbiBitCount;
DWORDbiSizeImage;
LONGbiXPerMeter;
LONGbiYPelsPerMeter;
DWORDbiClrUsed;
DWORDbiClrImporttant;
}BMPINFOHEAD;
第二章图像几何变换
2.1几何变换的概念及分类
图像的几何变换是一种图片像素值不会发生变化,只改变像素相对的位置的图片处理技术。
几何变更只针对图片像素点办理,图像在计算机内以数组形式存储,图像几何变更简单的包括:
图像平移变换、图像的缩放变换、图像的旋转变幻、图像的镜像变换和图像转置变幻,这些都是基本的几何变换,更繁杂的图像变换还有仿射变换和错切变换。
本文主要介绍了图像平移,图像转置,图像缩放。
2.2几何变换的插值算法
在几何变换的图像,通常坐标图像像素在计算机存储相应的值是一个正整数,这个改变将不会影响图像的像素,但当图像的几何变换,对非正整数输入值,将会影响到图像的像素值,如果不采用措施处理就会出现很多问题,像在图像的转制过程中,如果45.1度显示出来的画面会错节,因此这种情况的出现就要采用插值算法进行插值处理。
实践证明,图像缩放插值算法可以较小的情况下,有说服力的。
在一般情况下,超过0.5倍或3倍的减少,是任何可接受的图像。
2.2.1最邻近插值(近邻取样法)
最临近插值的的思想很简单。
关于一个像素点经过反向变换相应获得的一个浮点坐标,对该坐标的坐标值进行简单的取整,得到一个整数型的坐标,这个整数型坐标对应的像素值便是目标像素的像素值,简单地说就是取与该浮点坐标最邻近的左上角点对应的像素值。
可见,最邻近插值相对于简单且比较的直观,但经过该算法处理后获得的图像质量不高。
2.2.2双线性内插值
对一个像素(I,J)操作,对其数组坐标设置经过反向变换获得的坐标为(I+m,J+n),其中I、J均为非负整数,m、n均为小于1的整数数值,则这个像素得值f(I+m,J+n)可通过原图像像素中坐标为(I,J)、(I+1,J)、(I,J+1)、(I+1,J+1)所对应的周围四个像素的值决定,即:
f(I+m,J+n)=(1-m)*(1-n)*f(I,J)+(1-m)*n*f(I,J+1)+m*(1-v)*f(I+1,J)+m*n*f(I+1,J+1)(2-1)
式(2-1)中函数f(I,J)代表原图像(I,J)处的的像素值。
这就是双线性内插值法。
运用双线性内插值法对图像经过反响变换时数据的计算量大,但也有有益的一方面,双线性内插值法缩放后获得的图像质量高,不会发生像素值不连续的的情形。
因为双线性插值具备低通滤波器的性质,使得图像的高频分量部分受损,是以可能会使得图像通过插值处理后图像轮廓变得一定程度的模糊。
第三章图像几何变换软件的和图像的显示
3.1CDIB类库的创建
多半图像处理软件都是基于外部位图进行设计的,VisualStudio开发集成环境中MFC类(微软基础类)是专门用于界面软件的开发比较简洁高效,但MFC中没有专门用于处理外部位图格式图像的类,所以我们需要重新定义一个以CBitmap类为父类的处理DIB位图的类CDib类,该类应包含的基础功能:
文件的读、写操作,文件的基本属性及相关的基础操作。
因此我们需要定义一个用于处理DIB位图类CDIB专项使用,这种包装的必要和有效的DIB数据成员变量和成员函数。
该类具有的功能如下:
载入BMP位图文件LoadFile(CStringm_fileName),保存BMP位图文件SaveFile(constchar*pFilename),获取位图文件名GetFileName(),获取位图文件的大小GetSize(),获取位图的高度GetHeight(),获取位图文件的宽度GetWidth(),获取位图颜色数目GetNumberOfColors(),获取颜色表首地址GetRGB(),获取图像信息结构首地址GetInfo(),获取图像数据首地址GetData()。
创建一个CDIB类CDib类文件接口,包括DIB.H和DIB.CPP,两类可以实现图像的采集和几何变换。
3.2图像几何变换软件主菜单的设计与实现
将操作界面分为客户可操作区和非客户操作区两部分,在客户可操作区主要用于显示所要打开的图片,在非客户操作区显示操作后的图片效果图。
通过设计的软件主页面如下图(2-1):
图3-1主菜单
3.3图像显示的实现
图像的显示,就是将所要查看的图片通过设计的程序将图像数据的录入内存并显示在界面中,本文主要涉及Bitmap格式的图片,当取到了图像数据的首地址,你可以使用原始的颜色表的图像,创建一个调色板,加载后的调色板图像可以显示。
实现程序为:
voidCDynSplitView2:
:
QnDraw(CDC*pDC)
intn_temp=1;
//记录缩放比率
BYTE*pBitmapData=CDib->
GetData();
//CDib类的指针对象
LPBITMAPINFOpBitmapInfo=CDib->
GetInfo();
intbitmapHeight=CDib->
GetHeight();
intbitmapWidth=CDib->
GetWidth();
intscaledWidth=(int)(bitmapWidth*mscale);
intscaledHeight=(int)(bitmapHeight*mscale);
}
效果图如下图
图3-2显示图片的效果图
第四章图像的几何变换的实现
4.1图像的镜像变换
1.镜像变换的概念
图像变换是轴图像的水平(或垂直轴)作为相应的像素位置的中心(或垂直)操作,对应的图像的镜像变换分为图像的水平镜像和图像的垂直镜像变换。
水平镜像变换对原始图像的垂直轴的中心区域的图像处理,图像区域分为两部分,像素图像对应的对称变换将最终导