我有一个 RGB 图像(uint8 类型),我想执行以下过程:
- 将图像量化为 16 级(每层)
- 计算每个RGB 组合的直方图:首先我需要一个 16*16*16 矩阵来保存这些值 - 即,如果我们表示直方图矩阵
hist
,那么hist(2,9,3)
应该保存直方图中的像素数量,强度级别为 r=2,g= 9, b=3 etc. 下一阶段是将其重塑为 4096*1 向量(但这是最简单的部分)
现在我有以下实现:
function hist = compRGBHist(I)
I = I./16 % quantize to 16 color levels
hist = zeros(16,16,16);
[m, n, ~] = size(I);
for i=1:m
for j = 1:n
rgb = impixel(I,j,i);
r = rgb(1);
g = rgb(2);
b = rgb(3);
A(r,g,b) = A(r,g,b) + 1;
end
end
hist = reshape(hist, 4096, 1);
end
此实现有效,但速度非常慢 - 我需要重复该过程 100 次(作为实现粒子过滤器的一部分),即使在尺寸为 ~80*40 的非常小的图像(实际上是图像部分)上执行它需要很长时间。我正在寻找一种更有效的方法来做到这一点。谢谢!