在图像处理中进行低通滤波器代码



该片段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 = 141,然后当i = 22j = 2 to 42等到cols - 21,因此j = cols - 41最多为cols - 1。从技术上讲,我们应该以i = cols - 20结束,但是如果您想错过计算信号的最终有效输出,那是可以的。

i控制的循环确定窗口的中心是什么,而由j控制的循环收集了由i指示的正确样本。您需要考虑一下,尤其是如果您不习惯,但最终将是有道理的。

最新更新