升压图库存在问题。
在初始化步骤中,我想将图像存储在此邻接图中:
typedef boost::adjacency_list<boost::vecS,
boost::vecS,
boost::undirectedS,
boost::property<boost::vertex_bundle_t, unsigned int>,
boost::property<boost::edge_bundle_t, float>,
boost::no_property> GraphType
我做了第一个循环来为图像的每个像素创建一个顶点(使用OTB库来处理图像,in_iter只是图像像素上的迭代器):
unsigned long int curr_id = 0;
for(in_iter.GoToBegin(); !in_iter.IsAtEnd(); ++in_iter)
{
boost::add_vertex(curr_id, *_graph);
curr_id++;
}
现在我想为一个顶点创建它与邻居的连接(4个连接点): 我尝试了这个,但它不起作用:
curr_id = 0;
long int neighbors[4];
auto iterBounds = boost::vertices(*_graph);
for(auto v_iter = iterBounds.first; v_iter != iterBounds.second; v_iter++)
{
FindNeighboring(curr_id, neighbors, rows, cols);
for(short j = 0; j<4; j++)
{
if(neighbors[j] > -1)
{
boost::add_vertex(*_graph->m_vertices[curr_id],
*_graph->m_vertices[neighbors[j]],
std::numeric_limits<float>::max();
*_graph);
}
}
}
我想要知道它的位置来访问顶点描述符。 是否有可能在BGL中做到这一点?
感谢您的帮助!
答案 0 :(得分:0)
答案是&#34;是和否#34;。
如果您为图表使用通用adjacency_list
,那么当然,您必须自己维护通信<coords> <--> <vertex>
。你可以把它保存为boost :: unordered_map&lt;提供的映射。 Point,vertex_descriptor&gt;或者作为boost :: bimap甚至是std :: map。您有责任填充地图并使其与图表保持一致。
或者,您可以考虑BGL内置类grid_graph
。它为您提供从坐标到顶点描述符的映射:
// Get the vertex associated with vertex_index
Traits::vertex_descriptor
vertex(Traits::vertices_size_type vertex_index,
const Graph& graph);
// Get the index associated with vertex
Traits::vertices_size_type
get(boost::vertex_index_t,
const Graph& graph,
Traits::vertex_descriptor vertex);
(以及边缘的类似功能)。
在这里,您不需要创建单个顶点,只要您指定图形的尺寸,它们就会由图形构造函数中的BGL创建。
您可能希望使用某种自定义属性贴图将像素与每个顶点相关联,但这是一个单独的故事。