Matlab blockproc将矢量结果存储为第三维

时间:2013-03-06 14:57:53

标签: matlab image-processing matrix

我有需要分成块的图像,然后计算每个块的直方图。我认为这样做的最好方法是使用blockproc()函数计算每个块的直方图,但直方图是一个向量,我想将它存储在第三维中,以便进一步计算速度。

例如,我有1024 * 1024px图像,我分为64 * 64px块,并用hist()计算histrogram。所以blockproc应该返回一个16 * 16的矩阵。但是假设hist()返回一个我想要存储的向量,我想让blockproc()返回一个16 * 16 * 256矩阵,第三个维度是我的直方图的256个值。

我目前的代码是:

function [ counts ] = getHist( block )
    [counts,]=hist(block.data, 0:255);
end

HistA = blockproc(lbpA, [64 64], @(block_struct) getHist(block_struct));

但它返回(16 * 256)1024矩阵。

我怎么能实现这个目标?

谢谢!

1 个答案:

答案 0 :(得分:1)

我这里没有Matlab,所以这都是未经测试的。

我已阅读blockproc文档。我认为你得到一个2D(16 * 256)乘(16)矩阵(反之亦然)。你想要一个16乘16乘256矩阵。

尝试使用shiftdim更改直方图的输出 - 您的直方图是一个大小为[1,256]的行向量。

output = shiftdim(output,-1)

这应该产生[1,1,256]向量。

我想你想要计算块中所有像素的数量,而不是逐列,这是你现在正在做的。我认为将64 * 64块矩阵重新整形为(:)的向量应该可以工作:

function counts = getHist(block)
    counts = hist(block.data(:), 0:255);
end