武汉大学实验报告院系:XXX专业:地理信息系统2013年12月23日实验名称:地图代数实习指导教师:XX一、实验环境VC6..0和WINDOWS系统二、实验思路1.位图读取BMP图像文件格式位图文件头(bitmap-fileheader)包含有关于文件类型、文件大小、图象信息偏移量等信息位图信息头(bitmap-informationheader)BITMAPINFOHEADER结构包含有位图文件的大小、压缩类型和颜色格式彩色表包含(colortable)的元素与位图所具有的颜色数相同,象素的颜色用RGBQUAD结构来定义位图数据:在此部分记录着每点像素对应的颜色号2.距离变换a)距离变换是计算并标识空间点集各点(对参照体)距离的变换(或过程)b)棋盘距离棋盘距离指平面上A、B两点间取x,y两方向中的较大者作为距离,其数学表达式为:dE(A,B)=max(∣xA-xB∣,∣yA-yB∣)c)曼哈顿距离曼哈顿距离也称出租车距离,他特别适合于求取矩形城市街区中两点间出租车经过的路程,它实际是指平面A、B两点间x,y两方向上的距离之和,其数学表达式为:dE(A,B)=∣xA-xB∣+∣yA-y|d)欧氏距离dE(A,B)=[(xA-xB)2+(yA-yB)2]1/2位图文件的组成结构名称位图文件头(bitmap-fileheader)BITMAPFILEHEADER位图信息头(bitmap-informationheader)BITMAPINFOHEADER彩色表(colortable)RGBQUAD图象数据阵列字节BYTEe)八边形距离棋盘距离、曼哈顿距离的综合,比前两种能够更准确地描绘欧氏平面并且依然保持整数变换的特性。max(∣xA-xB∣,∣yA-yB∣)(棋盘距离)[(xA-xB)2+(yA-yB)2]1/2(欧氏距离)∣xA-xB∣+∣yA-yB∣(曼哈顿距离)f)栅格距离描述了一像元与其相邻像元的关系,中央栅格中心到周围栅格中心的距离。栅格矩形距离3x3模板栅格路径距离5x5模板g)求距类型外距变换:求任一空间点或全部空间点到最近实体的距离问题,这时,实体内任一点(栅格)到实体的距离为0,与实体边相邻的栅格距实体距离为1,其次为1.414,2,…内距变换:求实体上全部点到周围空间的最近距离,也即到非实体空间距离条件距离变换:这类变换要满足一定条件,例如f(x,y)=c,c为常数,其他点在距离变换中成为障碍。所谓障碍,即这些点本身无须算出距离,也不能传递距离,距离增长或减少时只能绕过它h)距离变换步骤主要介绍棋盘距离变换,其他距离变换与棋盘距离变换类似,仅仅是距离模板大小和模板值有所不同:步骤:把实体所在栅格赋距离值0,并把其余所有栅格赋一个足够大的距离值顺序访问各像元,以图左下角为原点,行号递增,列号递增。以所访问像元的左、下左、下中及下右的距离值推出所访问像元的距离值,并改写它。设像元坐标为列号i,行号j,则距离d(i,j)由下式推出:逆序访问各像元,以图左下为原点,右上角为起点,行号递减,列号递增(以下同),并改写距离值:采用与距离相应的色值,把上述各像元距离值改写为位图注:栅格路径距离变换3x3第二步公式:第三步公式:栅格路径距离变换5x5:第二步公式:第三步公式:3.形态变换缓冲区变换图形X的L缓冲区可定义为距该图形距离不大于L的点集。对应地可定义内、外L缓冲区,定义L1~L2间的缓冲区为距离大于L1而不大于L2的点集,则取该内缓冲区的过程或变换可表示为BI(L)或BI(L1,L2),取外缓冲区的过程或变换可表示为BO(L)或BO(L1,L2)a)加壳变换——外缓冲区变换加壳变换有填平凹部或缝隙即减凹的作用对图形X的加壳变换KO(L)定义为:XKO(L)=X∪DO(X)·BO(L)=X+DO(X)·BO(L)b)蜕皮变换——内缓冲区变换蜕皮变换的作用是保凹减凸对图形X的蜕皮变换KI(L)定义为:XKI(L)=X\DI(X)·BI(L)=X-DI(X)·BI(L)c)缓冲区变换算法根据不同性质缓冲区,使用相应距离尺度直接进行距离变换(内、外),得到全空间各点距离取距离值为1~L的所有像元进行缓冲区提取、成图4.反色变换即对像素值进行取反,具体数值为255-原色像素值for(inty=0;ynHeight;y++)//图像的行{for(intx=0;xnWidth;x++)//图像的列{lpTemp[y*nWidth+x]=255-lpTemp[y*nWidth+x];}}5.图像平滑压制、弱化或消除图像中的细节、突变、边缘和噪声,就是图像平滑化,这里采用的某点的九宫格平均值赋给该点的算法。for(inty1=0;y1=2;y1++){for(intx1=0;x1=2;x1++){sb+=lpBits[(y+y1)*nWidth+(x+x1)];}//endifx1}//endify1//平滑后的结果保存在数据lpTemp中lpTemp[y*nWidth+x]=sb/9;