四叉树问题.docx
《四叉树问题.docx》由会员分享,可在线阅读,更多相关《四叉树问题.docx(12页珍藏版)》请在第一文库网上搜索。
1、四叉树问题编写人:张天骥,景宇轩,张华添,刘凤麟,周弋涛,熊林学号:008120040081200500812008120230081202300812030编写时间:09-5-11一、问题描述使用四叉树来存储栅格图像要求:(1)能够用四叉树存储给定的黑白图像并能显示图像;(2)图像的格式:bmp格式的黑白图像。(bmp格式见文件“BMP文件格式说明W);对于图像的显示可以分别用两个不同的字符来表示黑点和白点,比方上面的字母,A,可以这样显示:二、问题分析和数据结构算法的设计程序应有三个局部:读取文件头的必要信息,构建四叉树,在控制台输出。三个局部按顺序进行。为了使四叉树能够表示各个子图像的大
2、小,位置,必须要有其左下角的坐标和各级节点的层数,其结构设计如下:tyedefstructfour_branches_tree四叉树结构intxx,yy;/结点的坐标,是子图像左下角的坐标,最顶层根节点是(0,0)ShortintIayer;四叉树层数,可用来计算子图像长宽,顶层为0,表示整个图像ShOrtintVakie;该值为1时表示该子图像的所有像素白色,0为黑色,2那么黑白都有,需要有子结点four_branches_tree*next4;连接子结点,仅当va1ue=2时才有,否那么值为NU11FBT,*PFBT;要处理图像,首先要知道图像中数据的大小size,宽wid,高hei,bm
3、p文件中文件头的长度(黑白图像为十六进制的3E)每行像素的实际位数为W(w=(size-3E)*8hei,3E是文件头的长度,和SiZe都以字节为单位,故乘以8表示位数),这样才能用坐标方式进行处理。而对于构建四叉树,其根本原理是:图像按四角均分成四块子图像(子图像wid,hei相等且均为2=的大小),每块从该子图像左下角(因为bmp图像数据是从左下角开始一行一行存起的)一行一行比拟像素;均为黑/白时赋值0/1,不均为黑白时,赋值2,并进一步再分为四块,直到子图像均为纯黑/纯白。这个过程中需要递归,但系统栈空间显然缺乏,所以程序用栈结构,其结构如下:tyedefstructstacknode以
4、下为链栈,用于构建四叉树和输出PFBTs;structstacknode*next;)ST,*PST;typedefstruct!stackPSTtop;)*P1ST,1ST;先将每次处理时,从栈中取出新节点,假设需再分那么构建四个子结点并将之压入栈中。这是构建二叉树的主循环。由以上概述知,程序最关键的地方在于构建逻辑坐标和实际图像文件中该点像素位置处的映射。而在操作中有两处难点:一,黑白图像一个字节代表一像素,但最小读取单位是byte,所以不但要读该像素所在字节byte,还要读该像素所在字节的bit(0-7);二,对于非整2长宽的普通图像,应当将其逻辑上用“白像素补足为2徇长宽的图像,而那些
5、虚拟的像素是不能与文件对应的,构建四叉树时必须考虑这种特殊情况。在理想的宽高都是2的图像中,设取出栈后的子图像S节点坐标(x,y)(x,y均从。记起),该子图像的宽高为q=heiQAS.1ayer),该节点起始像素在文件中的字节的位置是:B=(x+y*w)8(取整),而在该字节中从左数的位数bit,那么是:bit=(x+y*w)mod8(07位),按照这个方法读取该像素位置后,为便于比拟,应将对该像素位操作使该字节其它的像素除去,该像素那么移到本字节最后一位上(让十六进制数m=80右移bit位和byte按位与操作,再将m右移7bit位),得至IJm=O或1(黑/白)。然后进行两层循环(设循环变
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 四叉树 问题