在类似位图的数据中查找凸形状

时间:2014-10-21 18:00:21

标签: algorithm image-processing

数据结构网络: - 假设一个细胞网格。每个单元格都知道它的右边,顶部,左边,底部邻居。 - 单元格打开或关闭,或者换句话说是黑色或白色。两个州。 - 一个单元如果连接到相邻单元,如果它们处于相同的状态 - 例如白色

我想知道连接的细胞是否形成凸形。仅限一个州 - 但我想这应该不重要。

基本理念: 迭代网格并使用泛洪填充算法将ID绘制到数组[grid.width] [grid.length]中。

问题: 我怎么可能知道连接的单元格区域是凸的而不是这个信息的凹凸不平。

我正在寻找一种算法或定义,它根据邻居的知识告诉我一组连接的单元格是凹凸还是凹凸。

示例 - 红色凹面,蓝色凸面: Concav vs. convex

2 个答案:

答案 0 :(得分:1)

您可能希望了解凸包算法:

http://en.wikipedia.org/wiki/Convex_hull_algorithms

您可以计算每个ID的凸包,并检查原始形状和计算凸形之间的差异。

答案 1 :(得分:0)

一种可能性是

1) identify the boundary points of each shape (i.e. the cells that are in contact with cells of another colour) 
2) trace along them using the cross-product to check if local curvature changes sign at any point on the boundary 

(参见,例如this SO answer

但是我认为你很明确地定义你的意思是很重要的。如果将每个单元格视为位图中像素的表示,则任何非水平或垂直的边都将包含局部凹陷的截面。考虑例如由单元(0,0),(0,1)和(1,0)组成的连接形状。这个形状是否代表一个三角形(因此是凸的),或者“L”因此是凹的吗?

enter image description here