使用openCv和C ++创建voronoi图

时间:2013-03-20 10:07:27

标签: c++ opencv image-segmentation voronoi

我有点问题。我需要使用openCV和C ++创建BW图像的voronoi图。我应该有像Matlab函数voronoin的输出。

目标是为图表的每个区域创建一个遮罩。

这是我在Matlab中做的一个例子:

matlab voronoi diagram

因此,对于每个区域,我应该创建一个蒙版或具有不同的颜色。 我尝试使用openCV函数distanceTransform来获取voronoi标签。

Mat bwCoresGoodInv = 255 - bwCoresGood;
distanceTransform(bwCoresGoodInv, distTr,voronoiLabels, CV_DIST_L2, CV_DIST_MASK_PRECISE, DIST_LABEL_PIXEL);

namedWindow( "voronoiDistLab", CV_WINDOW_AUTOSIZE );
voronoiLabels = voronoiLabels*5;
imshow( "voronoiDistLab", voronoiLabels );

结果如下图: voronoi labels openCV

正如你在每个区域看到的那样,有不同的颜色(特别是与细胞相对应的东西),有没有办法只有一种颜色? 提前谢谢你

1 个答案:

答案 0 :(得分:0)

如果您询问如何获得与显示标签所提供的灰度值不同的颜色,一种方法(可能不是最有效的)是在标签图像的边缘检测图像上运行cv::findContours ,然后遍历找到的每个轮廓并将其绘制到新图像上,可以填充或勾画。它不是非常精确并且可能留下间隙,可能需要在边缘图像上进行一些扩张。

如果distanceTransform返回一个数据结构,将标签图像中的强度值范围映射到具有该值的每个像素,可能是二进制图像的向量,其中向量中的第n个图像是一个非常好的具有隔离的第n个标签区域的二进制掩码 - 但我认为现在这必须由用户完成。