【问题标题】:Specifying value of each pixel in a superpixel指定超像素中每个像素的值
【发布时间】:2019-07-07 18:28:05
【问题描述】:

我可以为图像指定超像素及其属性。

  L = superpixels(A, 200);
    K=regionprops(L, 'PixelIdxList');

我知道每个超像素的平均强度值可以指定如下:

K=regionprops(L, 'MeanIntensity')

问题是如何指定超像素内所有像素的值?

【问题讨论】:

  • 此行给出错误:K=regionprops(L, 'MeanIntensity') 这是只能用于灰度图像数据的选项之一,而不是像您从superpixels 获得的标签矩阵。您必须遍历数组 K 并使用像素索引列表来收集原始图像 A 中每个标记区域的值向量。
  • 应该是K=regionprops(L, A, 'MeanIntensity')
  • 当您说“指定超像素内所有像素的值”时,您的意思是要获取每个超像素内所有像素的值,还是要在图像中设置它们的值。前者是K=regionprops(L, A, 'PixelValues')。后者需要一个循环,如the documentation page for superpixels所示。
  • @CrisLuengo,@gnovice,在 MATLAB 2018 中,参数 A 产生错误。
  • @CrisLuengo,感谢您的评论,情况是前者,但它不适用于 RGB 图像。是否有任何解决方法可以将其用于这些图像?

标签: matlab image-processing image-segmentation superpixels


【解决方案1】:

获取每个标签内所有像素值列表的语法是K = regionprops(L, A, 'PixelValues')。但这仅适用于灰度值A

最简单的解决方案是遍历通道,并为每个通道调用上述函数:

A = imread('~/tmp/boat.tiff'); % whatever RGB image
L = superpixels(A, 200);

n = size(A,3); % number of channels, typically 3
K = cell(max(L(:)),n);
for ii=1:n
   tmp = regionprops(L, A(:,:,ii), 'PixelValues');
   K(:,ii) = {tmp.PixelValues};
end

我们现在有一个元胞数组K,其中包含每个标记像素的值:K{lab,1} 是标记为lab 的像素值的集合,用于第一个通道。

以下代码将每个像素的分量整理成一个数组:

K2 = cell(size(K,1),1);
for ii=1:numel(K2)
   K2{ii} = [K{ii,:}];
end

现在K2 包含 RGB 数据数组:K{lab} 是一个 Nx3 矩阵,其中 N 个像素中的每一个像素都标记为 lab

【讨论】:

  • 感谢您的回答,我面临的错误是错误使用单元格大小输入必须是标量。 pixsvalue 错误(第 5 行)K = cell(max(L),n);
  • 非常感谢您的回答。由于错误:未定义的函数或变量“实验室”,应如何在 MATLAB 中定义变量“实验室”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 2018-10-20
  • 2019-07-24
相关资源
最近更新 更多