我有需要分成块的图像,然后计算每个块的直方图。我认为这样做的最好方法是使用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矩阵。
我怎么能实现这个目标?
谢谢!
答案 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