1

给定一个单色位图:

0000000000000000000000000000000000000000
00100010000000000000000000000000000000000
0001010000000000000000000000000000000000
0000100000000010000000000000000000000000
0001010000000101000000000000000000000000
0010001000001000100000000000000000000000
0000000000000101000000000000000000000000
000000000000001000000000000000000000000
0000000000000000000000000000000000000000
000000000000001111110000000000000000000
000000000000001000010000000000000000000
000000000000001000010000000000000000000
000000000000001111110000000000000000000
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000
0000000000000000000000000000000000000000

我希望能够在位图上找到每个对象的边界矩形。

有没有我可以使用的既定算法?

4

3 回答 3

3

您正在寻找的是所谓的“Blob”检测,它检测从周围区域突出的对象组。根据您需要的复杂性,您还可以跟踪面积、凸度、周长、边界框等。Blob 用于许多机器视觉和检测应用程序。

Wiki 等上有很多成熟的算法。

您还可以查看一些图像处理库,想到的一个叫做 AForge——它是一个用 C# 编写的开源库:aforge.net

或者,只需搜索“Blob 检测”,您就会找到大量有关您需要的信息。

祝你好运!

于 2009-07-22T02:05:57.730 回答
0

如果您可以访问 MATLAB,则可以查看regionprops函数源。它做了很多事情,包括寻找边界框。

基本上,您需要根据它们所属的连接组件标记所有像素,然后您可以为每个像素获取最小和最大 X 和 Y 坐标。

于 2009-07-22T02:06:46.903 回答
0

我要做的是查看任何标记算法。一种易于实现的是“Run-Track”算法。然后,当您完成标记后,您可以找到每个标记对象的(上、左、右、下)极值像素。这可能不是最快的方法(因为您将多次扫描图像),但它很容易实现。

以下是(很快)描述 RT 算法(以及其他算法)的讲座幻灯片:http ://www.cvl.isy.liu.se/Education/UnderGraduate/TSBB08/DBgrk7.pdf

于 2009-07-24T11:10:32.007 回答