【问题标题】:Clusterization with mask带掩码的聚类
【发布时间】:2012-10-10 21:35:47
【问题描述】:

其实我已经在official Q&A问过这个问题,但还没有得到任何答案。

我的任务是不将kmeans clusterization 用于整个图像,而仅用于它的蒙版部分。所以作为输入,我有两张图片:

  1. 蒙面图像。
  2. 图像转换为 Lab 颜色空间。

如果我在 n 个集群上对图像进行聚类,则在使用掩码进行聚类后,我希望获得具有 n+1 个集群的图像(由于掩码而+1)。

当然,我研究并搜索了它,但一无所获。

感谢您的建议。

【问题讨论】:

    标签: image-processing opencv mask k-means


    【解决方案1】:

    创建另一个图像,复制其中的数据未屏蔽数据,并使用此矩阵执行您的 kmeans。事情是这样的:

    [编辑]

    以下不起作用,它只是遮罩中的像素,但 tmp 与原始图像具有相同的尺寸。 简历::垫 tmp; labImage.copyTo(tmp, mask);

    您应该预先分配 tmp 矩阵,并在掩码上用循环填充它:

    cv::Mat tmp = cv::Mat::zeros(cv::countNonZero(mask), 1, labImage.type());
    int counter = 0;
    for (int r = 0; r < mask.rows; ++r)
      for (int c = 0; c < mask.cols; ++c) 
        if (!mask.at<unsigned char>(r, c))
          // I assume Lab pixels are stored as a vector of floats
          tmp.at<cv::Vec3f>(counter++, 0) = labImage.at<cv::Vec3b>(r, c);
    

    [/编辑]

    cv::kmeans(tmp, k, labels);
    
    // Now to compute your image of labels
    cv::Mat labelsImage = cv::Mat(labImage.size(), CV_32S, k); // initialize pixel values to K, which is the index of your N+1 cluster
    
    // Now loop through your pixel mask and set the correspondance in your labelImage
    int counter = 0;
    for (int r = 0; r < mask.rows; ++r)
      for (int c = 0; c < mask.cols; ++c) 
        if (!mask.at<unsigned char>(r, c))
          labelsImage.at<int>(r, c) = labels.at<int>(counter++, 0);
    

    【讨论】:

    • 第二行是什么?您尝试调用哪种方法?
    • 抱歉,但您的解决方案对我来说是错误的 - copyTo 带有遮罩只会使未遮罩的像素变黑,但我根本不想聚集这些像素(再次阅读我的问题)。但无论如何感谢您的帮助 (+1)。
    • 我确信它会起作用,但我测试了代码,实际上,copyTo 只是将蒙面像素涂黑。然后,您应该创建自己的数据矩阵,其行数与非屏蔽像素的数量一样多(为此使用 countNonZero),并使用与我的答案相同的循环在 kmeans 之前填充 tmp 矩阵
    • 附带说明,如果您对直方图而不是完整像素数据进行聚类,k-means 的执行速度会更快。此外,calcHist 支持蒙版!但是 OpenCV k-means 实现不支持聚类直方图(必须为每个数据添加权重)。 C clustering library 可以!
    • 您的first question there 得到答案了吗?那将是cv::Mat mask = (labelImage == k),其中 k 是您要屏蔽的集群的 ID。
    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 2020-03-16
    • 2021-12-26
    • 2014-07-05
    • 2013-12-14
    相关资源
    最近更新 更多