该片段MATLAB代码的目的是通过应用低通滤波器来平滑水平直方图。
使用了图像的相邻像素,列和行之间相邻像素之间灰度差异的总和。水平直方图命名为HORZ1 SO HORZ1(i(= sum,其中'i'是列数,而'sum'是差异的总和。然后,应用低通滤波器。我不了解"应用低通滤波器"部分。我对图像处理了解不多。如果有人可以帮助我了解我真的很感激。
%% horizontal histogram
disp('Processing Edges Horizontally...');
max_horz = 0;
maximum = 0;
for i = 2:cols
sum = 0;
for j = 2:rows
if(I(j, i) > I(j-1, i))
difference = uint32(I(j, i) - I(j-1, i));
else
difference = uint32(I(j-1, i) - I(j, i));
end
if(difference > 20)
sum = sum + difference;
end
end
horz1(i) = sum;
%%applying low pass filter
sum = 0;
horz = horz1;
for i = 21:(cols-21)
sum = 0;
for j = (i-20):(i+20)
sum = sum + horz1(j);
end
horz(i) = sum / 41;
end
结束
它只是在41个元素窗口上找到平均值。低通滤波器保留低频组件并抑制高频组件。平均是低通滤波器的示例。
在计算过滤输出时,最后两个for
循环的解释如下。它从i = 21
开始,因为它需要在不超出范围的情况下收集20个值,包括中间:20 + 20 + 1 = 41
。当i = 21
,然后将j = 1
到41
,然后当i = 22
,j = 2 to 42
等到cols - 21
,因此j = cols - 41
最多为cols - 1
。从技术上讲,我们应该以i = cols - 20
结束,但是如果您想错过计算信号的最终有效输出,那是可以的。
由i
控制的循环确定窗口的中心是什么,而由j
控制的循环收集了由i
指示的正确样本。您需要考虑一下,尤其是如果您不习惯,但最终将是有道理的。