作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 PixelList
包含二进制掩码的所有设置像素。这看起来如下:PixelList: {[1447x2 int32]}
。
我如何有效地将此 PixelList
转换为维度为 dim
的二进制掩码?
简单的方法是:
mask = zeros(dim);
for i=1:length(pixellist)
mask(pixellist(i,2), pixellist(i,1)) = 1;
end
但这很慢。如何有效地做到这一点?
最佳答案
使用sub2ind
获取非零位置的线性索引并一次性设置它们:
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)
,并且上述语法对输出维度更明确。
关于matlab - 如何将 PixelList 转换为 mask ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848050/
我有一个 PixelList 包含二进制掩码的所有设置像素。这看起来如下:PixelList: {[1447x2 int32]}。 我如何有效地将此 PixelList 转换为维度为 dim 的二进制
我是一名优秀的程序员,十分优秀!