1

有没有人使用取景器对齐方法?第一步(边缘检测)或多或少是可以理解的。它写道:“为了提取边缘,我们在四个等距方向上获取图像的平方梯度:水平、垂直和两个对角线方向。” ( 1 )。并且“我们然后在垂直于梯度方向的方向上对每个梯度图像进行积分投影”2)。对于水平方向,我以这种方式实现了该算法:

function pl = horgrad(a)
[h,w] = size(a);
b = uint8(zeros(h,w));
for i = 1 : h
        for j = 2 : w
                % abs() instead of squaring
                b(i,j) = abs(a(i,j) - a(i,j-1));     % (1)
        end
end
pl = sum(b);     % (2)

对我来说真正的问题是第二步:边缘对齐px[i]1py[i]1pu[i]1pv[i]1是什么意思?为什么它们等于 1?i-counter如何变化?

4

1 回答 1

1

据我了解该算法,pxpypupv是向 4 个方向中的每一个方向的积分投影。因此,pxpl您的代码中。px[i]0 是该向量中的每个点 - 代码中的 pl(i)。px[i]1是获取用于生成投影的总点数(归一化系数?)。所以所有px[i]1的总和将是图像高度h。其他方向类似。

重复我对您的问题的评论,为了获得更好的性能,您应该尽量避免循环,特别是嵌套循环,特别是当它像您的情况一样简单时:

b(:,2:end)=abs(diff(a,1,2));
于 2011-12-19T04:15:09.407 回答