Numpy 检测角点

角点检测(http://en.wikipedia.org/wiki/Corner_detection)是计算机视觉领域的一项基本技术。角点检测是相当复杂的,而scikit-image提供了Harris角点检测器,这真是太棒了。显然,我们也可以选择从头开始自己来实现角点检测算法,但那样将违背“不做无谓的重复劳动”(not reinventing the wheel)的基本准则。

准备工作

你可能需要先安装jpeglib,以便加载scikit-learn中JPEG格式的图像。在Windows系统中,可以使用安装文件安装jpeglib。否则需要下载jpeglib的发行版,解压缩后在主目录中用如下命令完成构建和安装。

./configure
  make
    sudo make install

具体步骤

我们将从scikit-learn加载一幅范例图像。这一步不是绝对必要的,你也可以使用任何其他的图像替代。

  1. 加载范例图像。

scikit-learn当前包含了两幅JPEG格式的范例图像,存储在一个数据集结构中。我们只加载第一幅图像。

dataset = load_sample_images()
img = dataset.images[0]

  1. 检测角点。

调用harris函数,用来获取角点坐标。

harris_coords = harris(img)
print "Harris coords shape", harris_coords.shape
y, x = numpy.transpose(harris_coords)

运行环境中的scikit-image版本号为0.6、0.7时,该程序运行正常。0.8及之后的版本去掉了harris函数,需要改用corner_harris函数和corner_peaks函数。

角点检测的完整代码如下:

from sklearn.datasets import load_sample_images
from matplotlib.pyplot import imshow, show, axis, plot
import numpy
from skimage.feature import harris

dataset = load_sample_images()
img = dataset.images[0]
harris_coords = harris(img)
print "Harris coords shape", harris_coords.shape
y, x = numpy.transpose(harris_coords)
axis('off')
imshow(img)
plot(x, y, 'ro')
show()

在我们得到的图像中,检测到的角点被标记为红点,具体如下图所示。

Numpy 检测角点

攻略小结

我们把Harris角点检测算法应用于scikit-learn中的一幅范例图像。如你所见,检测结果是相当令人满意的。因为角点检测算法其实就是一个直截了当的线性代数类型的计算,所以我们也可以只用NumPy来做相同的事情,但代码看上去会非常混乱。scikit-image工具包中有很多类似的函数可用,所以当你需要编写一个图像处理程序时,最好先查看一下scikit-image的文档。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程