【问题标题】:How to convert rgb to labels for image segmentation如何将 rgb 转换为标签以进行图像分割
【发布时间】:2021-08-13 08:00:54
【问题描述】:

我有大约 4000 个 rgb 标签图像,它们是一些其他图像的掩码。在回归方法的帮助下,我可以在深度学习编码器-解码器结构(例如:UNet)架构中使用这个图像标签对。但我想做分割方法。为此,我该如何转换这些图像?

示例图片: (上面的示例图像应该包含 3 个类。一个椭圆形部分,剩下的红色部分和背景白色部分。在其他一些图像对中,这可以达到 7 个类)

整个数据集应该有 7 个类,包括背景。但是当我试图在 RGB 标签中查找唯一值时,会出现 30 多个唯一值对。否则我会选择唯一的 rgb 对并进行处理。如何克服这个

【问题讨论】:

  • 对于这一张图片,你可以使用kmeans处理分割成3类。
  • @fmw42 我不明白你。可以分享一些链接吗?
  • 你想要 3 节课。 Kmeans 将分段处理成 k 个类,您可以为其选择 3 个。例如参见 thepythoncode.com/article/… 或在 Google 中搜索 python opencv kmeans 处理。

标签: python matlab image-processing computer-vision


【解决方案1】:

这是处理此问题的一种潜在方法(在 MATLAB 中,但在其他情况下类似)

您分享的图像相当像素化,因此很难处理。如果您的数据集包含类似像素化的图像,我会探索某种预处理来消除虚假的边缘变色,因为它们会破坏聚类。为了在这里演示,我创建了一个正好包含三种颜色的测试图像。

% Create a test image - one shared is very pixelated.
I = uint8(zeros(100, 100, 3));
I(10:20, 10:20, 1) = 255;
I(40:50, 40:50, 2) = 255;

如果这里的颜色数量未知,但最多 7 种,这里有一种使用 imsegkmeans 的快速方法,它是 'C' 输出来查找唯一中心的数量。

% Specify max clusters
maxNumClusters = 7;

% Run clustering using the max value
[~, C] = imsegkmeans(I, maxNumClusters);
nUniqueClusters = size(unique(C, 'rows'), 1);

'nUniqueClusters' 现在应该包含图像中的“真实”簇数。在某种程度上,这几乎就像在图像本身中查找像素 RGB 三元组的唯一条目的数量 - 我认为影响您工作的是像素化引起的噪声 - 这是一个单独的问题。

[L, C] = imsegkmeans(I, nUniqueClusters);

% Display the labeled image for further verification.
B = labeloverlay(I, L);
figure, imshow(B)

尝试解决像素化问题的一种方法是绘制图像像素的直方图(对于三个颜色平面之一),然后以某种方式管理低值 - 可能用一种独特的新颜色标记所有这些像素例如,您知道数据集中不存在其他 (0, 0, 0) - 并将其标签标记为“未知”。这稍微超出了您原始问题的范围 - 因此这里只是一个文字描述。

【讨论】:

    猜你喜欢
    • 2019-07-22
    • 2021-05-01
    • 2021-09-12
    • 1970-01-01
    • 2019-04-03
    • 2021-12-15
    • 2020-07-03
    • 1970-01-01
    • 2016-05-31
    相关资源
    最近更新 更多