c++ - 来自梯度图像的邻接矩阵

标签 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++ 来做这个。我已经有渐变图像可供使用。

最佳答案

为简单起见,假设渐变图像是大小为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 代表一个足够大 的数字(无限,因为各自的小区没有邻居,但这需要实现采取特殊规定)。

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

关于c++ - 来自梯度图像的邻接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33806984/

相关文章:

c++ - WaitForSingleObject 中的 Windows C++ 应用程序错误

c++ - 公共(public)常量和私有(private)可写属性的名称?

algorithm - 无向图中的路径

c++ - 在邻接矩阵上应用广度和深度优先搜索?

python - 你如何制作一个模拟二维网格的邻接矩阵

data-structures - 这种图表示矩阵叫什么?

c++ - 为什么递归返回调用会在没有显式返回语句的情况下跳出堆栈?

c++ - 什么是?和 : mean in C++?

algorithm - 正确性证明 : Algorithm for diameter of a tree in graph theory

python - 如何识别图中未连接的 sibling ?