六角网格上的图象算法及几何量定义
刘勇奎 邹善举
摘 要:很多研究已经证明,将网格点排列成六角网格的形式是一种最佳排列。文中首先描述六角网格相对于方形网格的优点,给出在六角网格上进行图象处理时所用到的一些几何量的定义。提出二个六角网格上的图象算法。
关键词:图象处理;算法;六角网格;几何学
中图分类号:TP301.6;TP391.41 文献标识码:A
文章编号:1000-7024(2000)01-0061-04
Image processing algorithms and
definitions of geometric quantities
Abstract:Many studies
have shown that the best disposition of a discrete set of points on the plane can be
reached if the points are on a hexagonal grid and gives its advantages over the square
grid in view of displaying graphics and images.Then Some geometric guantities in image
processing on hexagonal grid are given,and finally two image processing algorithms on this
grid are presented.
Key words:image processing;algorithm;hexagonal
grid;geometry
1 六角网格
人们现在所使用的光栅扫描显示器的显示屏,是由一些规律分布的网格点(称为象素)组成的。我们知道,只有3种正多边形可以覆盖一个平面,即正三边形、正四边形和正六边形。其中正四边形覆盖对应着方形网格系统,即直角坐标系统。它是目前光栅扫描显示器所使用的网格系统。
早在60年代初,数学家们就对如何分布平面上的取样点问题进行了深入的研究。其中Pogers就曾指出,平面上点的最佳分布是按六角网格的形式分布,它有许多很好的几何特性。这种分布对应着上述的正六边形覆盖(俗称蜂窝状),即每个象素对应着一个正六边形,并以正六边形的中心点做为网格点位置。图1示出了这种网格系统。

图1 六角网格
1991年,Wuthrick和Stucki证明了方形网格和六角形网格在几何意义上是相似的,并且提出了二个在六角网格上绘制直线和圆的算法。他们的模拟显示表明,六角网格的确具有很好的图形及图象显示特性。
我们曾对六角网格上的绘图算法进行过研究,并提出过二个基于六角象素的绘图算法。本文将继续我们的工作,对六角网格上的图象处理进行研究。
2 六角网格的优点
与方形网格相比,我们认为六角网格具有以下几个优点:
(1)所显示的直线或曲线没有“断开”的感觉。我们知道,在方形网格显示器上绘制直线或曲线时,屏幕上显示的线条好象是由一段段断开的水平或垂直小线段所组成,其间有明显的断点。这是因为在方形网格中每个象素点到其八个相邻象素点的距离是不相等的。它与其八个相邻象素之间即有边相邻的(有一公共边)也有点相邻的(有一共同顶点)。当直线或曲线中有一对点相邻的象素时,就会出现一个“断点”。这种情况影响了直线或曲线的美观性和平滑性。而在六角网格上,每个象素的六个相邻象素都是边相邻的,所以在直线或曲线中的每一对相邻象素之间都有一共同边,因而不会有“断开”的现象。
(2)象素点的分布更加合理和紧凑。自然界中的景象是连续的,而在光栅显示器上显示图象时只能用离散的点来表示。那么选取这些采样点的准则就应该是能够尽量反映出原始图象的微小细节,或者说使采样点之间的空隙尽量小。当然这可以通过增加采样点来达到,但由于制造工艺及成本等因素的限制,光栅点不可能无限制地小。因此在光栅点大小固定的情况下,只能通过点的合理分布来增加点数。实际上,光栅点是由电子束射击显示屏所形成的小圆点(从这一点来看,正六边形与四边形相比也更加相似于实际光点的形状),设小圆点的直径(或象素的跨度)长度为1,则对于一个面积为m×n譶的显示屏,如果采用方形网格分布可以容纳m×n譶个点;而若采用六角网格分布,m×n譶个点只需占用该显示屏 的空间(约86.6%的空间),因为这时点的行间距离是0.866而不是1。这样,整个显示屏就可容纳 n(约为1.155m×n譶)个点,即点数增加了15.5%。这表明点的密度增加了,因而可更好地表示图象的细节。
(3)由于每个象素与其所有相邻象素之间只有一种相邻关系,这就为许多图象处理算法提供了简便的实现途径,并且提高了算法的效率。由于传统的方形网格中的每个象素到其相邻象素的距离不等,所以其相邻象素有4邻接和8邻接两种定义。图象的许多几何性质和处理算法都随邻接定义的不同而有不同的结果。而对于六角网格,只有一种邻接定义(即6邻接),所以所有几何量的定义及图象处理算法都是唯一确定的。
3 六角网格上的几何量定义
邻接:在方形网格中,判断二个象素是否邻接要受到前提条件的影响,即是在4邻接(边邻接)前提下还是在8邻接(边、角邻接)前提下进行判断的。而在六角网格中,象素间只有一种邻接方式,即6邻接。其具体的定义是:如果二个象素有一共同边,则称它们是邻接的(或称相邻的),否则不邻接。这样,象素间的邻接性是唯一确定的,这就为许多图象处理过程提供了方便条件,如判断两个区域是否连通等。
.区域周长:在方形网格上,区域的周长有多种定义。一种定义是区域边缘象素的数量;另一种定义是用边缘跟踪算法对区域边缘跟踪所进行的步骤数。这两种定义的值一般来说是不同的,而对于4邻接和8邻接来说每种定义又可能产生两种不同的结果。也就是说,在方形网格上对于同一区域,由上述两种定义一般来说要产生4种不同的周长计算结果。而对于六角网格,上述的两种定义所产生的结果是相同的。这样,我们可定义在六角网格上的区域周长为该区域边缘象素的数量。所谓边缘象素即是至少与区域外象素有一个共同边的象素。在求周长时可使用边缘跟踪算法来进行。
.距离:方形网格中有欧几里得距离(直线距离)、市区距离和棋盘距离等定义,这些距离的值一般是不同的。在六角网格中具有六角网格坐标(x,y)和(x,y)两点的欧几里得距离(直线距离)为(参见图1):

因为对于相同的坐标系的原点,如果某一点的六角网格坐标为(x,y)则该点的方形网格坐标为 。另外,在六角网格上,市区距离和棋盘距离是相同的,在此我们称为网格距离,可定义成:d6=│x2-x1│+│y2-y1│。
例如在图1中右上角的两点(1,2)和(2,1)到坐标原点的网格距离为3;而距离原点最近的两点(1,0)和(0,1)到原点的网格距离为1;图中其余4点到原点的网格距离均为2。
4 六角网格上的二个图象算法
4.1 边缘跟踪算法
边缘跟踪算法是图象处理中最常用的算法之一。用边缘跟踪算法可将某个图象子集的边界点标识出来,以便进一步处理之用。在方形网格中,边缘的定义及跟踪算法都依赖于是4分量操作还是8分量操作。而在六角网格上则只有6个量操作,因而边缘的定义是唯一的。设图象元素的值为1,背景元素的值为0,则在六角网格上的边缘跟踪算法由以下几个步骤组成:
(1)在六角网格光栅上扫描图象,直到发现在0元素之右的1元素,或发现1元素出现在一行的左端为止。
(2)设上一步停止时的1元素为f,将其值置为3;又设与其相邻的0元素为b,将其值置为2。
(3)从b开始按顺时针顺序检查f的相邻象素(设这些相邻象素为e,e……)直到遇到1、3或4元素为止,该元素记为e。
(4)如果f=3,e=4和对于有些k<n时e=2,则变3为4,变2为0,然后转第(5)步;否则改变f的值为4。令e为新的f,e为新的b然后回到第(3)步。
(5)继续扫描执行上述过程,直到扫描完整个显示空间为止。
4.2 误差分散算法
来自自然界的图象是丰富多彩的,但一些计算机的显示器只有黑白两色(在机内表示为二值),或者有时需要在单色打印机上输出图象。这时只能将具有多级亮度(灰度)的图象用黑白二级来显示或打印。于是如何将多灰度级图象表示成二值图象就成为一个值得研究的问题。最简单的方法是设定一个阈值,当一个象素的灰度大于该阈值时,被置为“白”;否则被置为“黑”。但是这种方法有较大的误差。下面要讨论的误差分散算法就是要将一个象素的误差灰度(原灰度与显示灰度之差),分散到其相邻象素上,以使该象素的误差在相邻象素上得到补偿。例如一个象素有小于阈值的灰度值,则该象素在二值显示时就被显示成零灰度“黑”。误差分散算法要将象素被忽略的原灰度加到其相邻象素上。
在方形网格上,由于象素到其相邻象素的距离不同,所以向其角相邻或边相邻象素上分散的误差灰度是不同的。而对于六角形网格,象素到其相邻象素的距离都是相同的,所以可将其误差平均分散到其相邻象素上。由于光栅扫描是从上到下,由左到右进行的,所以可将一个象素的误差分为3等份分别加到其右邻象素、右下邻象素和左下邻象素的灰度上。下面是六角网格误差分散算法的伪语言描述,其中用I(x,y)和P(x,y)分别表示图象在(x,y)点的原灰度和转换之后的二值灰度:
T=(Black+White)/ 2; ∕*置阈值T*∕
for y=Ymax to Ymin
for x=Xmin to Xmax { ∕*扫描区间*∕
if I(x,y)<T then { P(x,y)=Black
Error=I(x,y) Black ∕*求误差*∕
}
else {P(x,y)=White;
Error=I(x,y) White ∕*求误差*∕
display P(x,y); ∕*显示一点*∕
E=Error/3;
I(x+1,y)=I(x+1,y)+E; ∕*向右邻象素分散误差*∕
I(x+1,y 1)=I(x+1,y 1)+E; ∕*向右下邻分散*∕
I(x,y 1)=I(x,y 1)+E ∕*向左下邻分散*∕
}
5 结束语
本文讨论了六角网格用于显示图象的优势及算法。要使六角网格得到实际应用还有一个人们如何适应的问题。人们习惯于方形网格的直角坐标系,而对六角网格的60。角坐标系则不很适应(对应图形显示,这一问题突出一些)。这一问以这样解决:使用六角网格显示器的坐标系,即提供给使用者的坐标系成为如图2所示的类直角坐标系,以便于人们使用;而在研制图形图象算法时,则使用如图1所示的严格的六角网格坐标系。对于同一点,这两种坐标可用如下简单的关系进行转换:
x类直角=x六角+y六角DIV2
y类直角=y类直角

图2 类直角坐标系
其中DIV2表示整除2,即一位右移操作。这样,只需在一个六角网格算法前增加一个语句x=x yDIV2,以便将类直角坐标转换成六角网格坐标,并在输出坐标值的地方增加一个语句x=x+yDIV2,将六角网格坐标变回到类直角坐标,则该算法就变成了类直角坐标系中的算法。
制造一个六角网格显示器并无技术上的困难,希望有显示器生产厂家能对六角网格显示器感兴趣,以使其尽快得到应用。
基金项目:国家自然科学基金及辽宁省科技基金资助项目。
作者简介:刘勇奎,教授、博士,主要研究方向为计算机图形学,图象处理等。邹善举,硕士,主要研究方向为计算机图形学,CAD等。
作者单位:刘勇奎(沈阳工业大学计算机学院,110023)
邹善举(营口市信息中心,115002)
参考文献:
[1] C.A.Rogers.Packing and Covering.Cambridge University
Press.
[2] C.A.Wuthrich and P.Stucki.An Algorithmic Comparison between Square-and Hexagona
l-Based Grids.CVGIP:Graphical Models and Image Processing,53(4).
[3] Liu Yong-Kui.The Generation of Straight Lines on Hexagonal Grids.Computer Graphics
Forum,12(1).
[4] Lin Yong-Kui.The Generation of Circular Arcs on Hexagonal Grids.Computer Graphics
Forum,12(1).
收稿日期:1998-05-11 |