指定超像素中每个像素的值

时间:2019-02-13 19:53:07

标签: matlab image-processing image-segmentation superpixels

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

public class TickersRoot
{
    public Dictionary<string, Ticker> Tickers { get; set; }
}

public class Ticker
{
    public string Symbol { get; set; }
    public long Timestamp { get; set; }
    public DateTime Datetime { get; set; }
    public double High { get; set; }
    public double Low { get; set; }
    public double Bid { get; set; }
    public double Ask { get; set; }
    public double Vwap { get; set; }
    public double Open { get; set; }
    public double Close { get; set; }
    public double Last { get; set; }
    public double BaseVolume { get; set; }
    public double QuoteVolume { get; set; }
    public Info Info { get; set; }
}

public class Info
{
    public List<string> a { get; set; }
    public List<string> b { get; set; }
    public List<string> c { get; set; }
    public List<string> v { get; set; }
    public List<string> p { get; set; }
    public List<int> t { get; set; }
    public List<string> l { get; set; }
    public List<string> h { get; set; }
    public string o { get; set; }
}

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

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

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

1 个答案:

答案 0 :(得分: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矩阵,具有标记为lab的N个像素中每个像素的RGB值。