我知道这看起来与代码错误和开发无关 我想知道是否有人能理解这些代码 积分图像和局部二值模式,并告诉我它们如何影响最终的直方图。
在使用积分图像之前,输出直方图是正常的,但在应用积分图像方法后,我发现大部分直方图都变为零。为了澄清事实,使用积分图像的预期收益是加速 lbp 方法的过程。事实上,我之前没有见过这个,因为我是第一次尝试它。有谁知道这个可以帮助我吗?
这些是每种方法的代码:
整体形象
function [outimg] = integral( image )
[y,x] = size(image);
outimg = zeros(y+1,x+1);
disp(y);
for a = 1:y+1
for b = 1:x+1
rx = b-1;
ry = a-1;
while ry>=1
while rx>=1
outimg(a,b) = outimg(a,b)+image(ry,rx);
rx = rx-1;
end
rx = b-1;
ry = ry-1;
end
% outimg(a,b) = outimg(a,b)-image(a,b);
end
end
% outimg(1,1) = image(1,1);
disp('end loop');
end
CS-LBP
function h = CSLBP(I)
%% this function takes patch or image as input and return Histogram of
%% CSLBP operator.
h = zeros(1,16);
[y,x] = size(I);
T = 0.1; % threshold given by authors in their paper
for i = 2:y-1
for j = 2:x-1
% keeping I(j,i) as center we compute CSLBP
% N0 - N4
a = ((I(i,j+1) - I(i, j-1) > T ) * 2^0 );
b = ((I(i+1,j+1) - I(i-1, j-1) > T ) * 2^1 );
c = ((I(i+1,j) - I(i-1, j) > T ) * 2^2 );
d = ((I(i+1,j-1) - I(i - 1, j + 1) > T ) * 2^3 );
e = a+b+c+d;
h(e+1) = h(e+1) + 1;
end
end
end
答案 0 :(得分:1)
Matlab有一个用于创建整体图像的内置函数integralimage()。如果您不想使用计算机视觉系统工具箱,可以通过以下方式获得相同的结果:
IntIm = cumsum(cumsum(double(I)),2);
如果需要,可能会添加填充。您应该检查图像是否饱和,有时它们会这样做。计算累积总和的速度会快速超过uint8和uint16的范围,我甚至可以用双倍的一次!