Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何将像素列表转换为遮罩?_Matlab_Computer Vision - Fatal编程技术网

Matlab 如何将像素列表转换为遮罩?

Matlab 如何将像素列表转换为遮罩?,matlab,computer-vision,Matlab,Computer Vision,我有一个像素列表,包含二进制掩码的所有设置像素。这看起来如下:像素列表:{[1447x2 int32]} 如何有效地转换此像素列表使用维度dim进行二进制遮罩 简单的方法是: mask = zeros(dim); for i=1:length(pixellist) mask(pixellist(i,2), pixellist(i,1)) = 1; end 但这是非常缓慢的。如何有效地做到这一点 用于获取非零位置的线性索引并一次性设置: pixellist = PixelList{1};

我有一个
像素列表
,包含二进制掩码的所有设置像素。这看起来如下:
像素列表:{[1447x2 int32]}

如何有效地转换此
像素列表
使用维度
dim
进行二进制遮罩

简单的方法是:

mask = zeros(dim);
for i=1:length(pixellist)
    mask(pixellist(i,2), pixellist(i,1)) = 1;
end
但这是非常缓慢的。如何有效地做到这一点

用于获取非零位置的线性索引并一次性设置:

pixellist = PixelList{1}; % get the 1447x2 int32 array
mask = false(dim); % e.g. dim = [256 256]
mask(sub2ind(size(mask),pixellist(:,2), pixellist(:,1))) = true;
或者使用
accumarray
获得更优雅的解决方案:

mask = accumarray(fliplr(pixellist),true,dim,@any,false)
如果没有重复的元素,并且上述语法对输出维度更明确,则可以将其简化为accumarray(fliplr(pixellist),true,dim)。

另一种可能性(我认为更优雅)是使用稀疏矩阵:

mask = full(sparse(pixellist(:, 2), pixellist(:, 1), true, dim(1), dim(2));

如果您是从
regionprops
获取此数据,请尝试使用
'PixelIdxList'
而不是
PixelList
。这样你就可以直接得到线性指数

mask = zeros(dim);
pixlist = PixelIdxList{1};
mask(pixlist) = 1;