关于从图像的梯度计算邻接矩阵,我在python中发现了一些东西。 large-adjacency-matrix-from-image-in-python
我想基于4或8个相邻像素计算邻接矩阵。我还找到了http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3408910/
我如何与4或8个邻居一起做这件事?我想用C ++做到这一点。我已经有了渐变图像供使用。
答案 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
条目将更改为M
,M
代表sufficiently large
个数字(infinite
,因为相应的单元格不是邻居,但这需要实现采取特殊规定)。
A
将是稀疏的并且将具有规则结构,为了提高效率,您应该使用一个类来进行稀疏矩阵处理。 This SO question提供了一些建议。