洪水填充算法_区域填充算法和多边形填充的扫描线算法

本文深入探讨了区域填充算法,包括像素定义的区域填充,特别是洪水填充算法及其缺点,以及多边形填充的扫描线算法。通过算法思想、存在的问题和数据结构设计,详细阐述了扫描线填充的实现过程,并提供了代码实现和算法结果的演示。
摘要由CSDN通过智能技术生成

本文主要介绍几种区域填充算法,重点解释多边形的扫描线填充算法,最后实现了多边形填充算法,包括在附录文件中。在参考【5】中,作者详细介绍了一系列区域填充算法,可以查看相应网页。代码的下载地址为:https://github.com/twinklingstar20/twinklingstar_cn_region_polygon_fill_scanline/

1. 1.区域的定义和填充

1.1像素定义的区域(Pixel-Defined Region)

1.1.1        边界定义区域(boundary-defined)

定义某些像素是边界,边界包围着一块区域。填充所有在边界内的相连通的像素,主要分下面几个步骤:

从区域内部一个像素点开始

判断这个像素是否是一个边界像素点或者已经被填充了

如果都不是,就把它填充,然后开始设置邻居像素点。

用图片演示这个过程,如下面的幻灯片所示,代码片段如下所示:

void boundaryFill4 (int x, int y, int fill, int boundary)

{

int current;

current = getPixel (x,y);

if (current != boundary && current !=fill)

{

setColor(fill);

setPixel(x,y);

boundaryFill4 (x+1, y, fill, boundary);

boundaryFill4 (x−1, y, fill, boundary);

boundaryFill4(x, y+1, fill, boundary);

bonddaryFill4(x, y−1, fill, boundary);

}

}

1.1.2          内定义区域(interior-defined)

内定义区域的定义是:给定一个像素S,颜色是C,区域R指与S连通的且颜色都是C的像素集合(Region R is the set of all pixels having color C that are “connected” to a given pixel S)。

如果两个像素连通,则它们之间有一条“相邻(adjacent)”像素组成的连续路径,所以连通的概念就依赖“相邻”的定义。在图形学中,相邻通常有两种定义:

(1)       四相邻(4-Adjacent):两个像素是四相邻的,则它们在彼此水平或者垂直相邻的位置上,如图1所示:

图1. 四相邻

(2)       八相邻(8-Adjacent):两个像素是八相邻的,则它们在彼此水平、垂直或者是斜方向上相邻的位置,如图2所示:

图2. 八相邻

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值