来自梯度图像的邻接矩阵

时间:2015-11-19 14:43:37

标签: c++ graph-theory adjacency-matrix

关于从图像的梯度计算邻接矩阵,我在python中发现了一些东西。 large-adjacency-matrix-from-image-in-python

我想基于4或8个相邻像素计算邻接矩阵。我还找到了http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3408910/

我如何与4或8个邻居一起做这件事?我想用C ++做到这一点。我已经有了渐变图像供使用。

1 个答案:

答案 0 :(得分:0)

为简单起见,假设梯度图像是大小为n x n的正方形像素位图。通过从西北角开始的行主要计数为每个像素分配序号。

定义(n^2 x n^2)邻接矩阵A = (a_ij)_i,j=1..n^2,如下所示:

a_i(i-n) = 1; i > n             // northern neighbour
a_i(i+1) = 1; (i-1) mod n < n-1 // eastern neighbour
a_i(i-1) = 1; (i-1) mod n > 0   // western neighbour
a_i(i+n) = 1; i <= n^2 - n      // southern neighbour
a_ij     = 0; else

每个像素添加8个邻居

a_i(i-n+1) = 1; i > n and (i-n-1) mod n < n-1          // northeastern neighbour
a_i(i-n-1) = 1; i > n and (i-n-1) mod n > 0            // northwestern neighbour
a_i(i+n+1) = 1; i <= n^2 - n and (i+n-1) mod n < n-1   // southeastern neighbour
a_i(i+n-1) = 1; i <= n^2 - n and (i+n-1) mod n > 0     // southwestern neighbour

您可以指定从相邻像素之间的渐变计算的权重,而不是1。请注意,0条目将更改为MM代表sufficiently large个数字(infinite,因为相应的单元格不是邻居,但这需要实现采取特殊规定)。

A将是稀疏的并且将具有规则结构,为了提高效率,您应该使用一个类来进行稀疏矩阵处理。 This SO question提供了一些建议。