图像单元阵列的黑色像素百分比

时间:2016-03-07 14:09:40

标签: matlab image-processing

我已将图像分割成碎片并使用/* Your CGFloat example */ let str = "17.30" let flt = CGFloat((str as NSString).doubleValue) + 2.0 /* Use NSNumberFormatter to display your CGFloat with exactly 2 fraction digits. */ let formatter = NSNumberFormatter() formatter.maximumFractionDigits = 2 formatter.minimumFractionDigits = 2 print(formatter.stringFromNumber(flt)!) /* 19.30 */ 将它们存储在单元格数组中。我想计算每个单元格中黑色像素的百分比。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:5)

你可以循环遍历每个元素,并计算黑色像素的数量(将像素的总和== 0)并除以该单元格中的总像素数。

for k = 1:numel(CA)
    % Number of black pixels (For RGB ensures all channels are 0)
    nBlack = sum(sum(all(CA{k} == 0, 3));

    % Total number of pixels divided by 3rd dimension (RGB-compatible)
    nPixels = numel(CA{k}) / size(CA{k}, 3);

    percentBlack(k) = nBlack / nPixels;
end

或者你可以使用cellfun为你做一些循环。

percentBlack = cellfun(@(x)sum(sum(all(x == 0, 3))) / (numel(x) / size(x,3)), CA); 

输出的大小与CA相同。

  

关于sum(sum(all(x == 0, 3)))成语的说明。基本上我们创建一个逻辑矩阵(大小为x),其中x(k) == 0为1,其他地方为0。对于RGB图像,我们需要检查所有通道(第三维)是否为0(all(x == 0, 3))。然后通过对这个逻辑数组中的所有元素(sum(sum()求和,我们实际上计算黑色像素的数量。