参考:理想边缘产生的方法研究

在亚像素的检测中,如何验证自己算法的精度,此时需要一个标准的样本来检测算法的精度,在上诉论文中,关于dn的计算有一定的理解差异。

边缘像素关系

参数计算

Dm计算

设过B、C的直线方程为y=kx+b,

AC=abs(b)/sqrt(1+k^2);
AB=b;
k=BD/0.5;
b=0.5+BD=0.5*(1+k)
AC=abs(0.5*(1+K))/sqrt(1+K^2)

##Dn计算

k=DE/DF=2*DE; DE=0.5k;
k=EG/AG;
AE=0.5-DE;
AE^2=EG^2+AG^2;
Dn=(1-k)*0.5/sqrt(1+k^2);

从上面的Dm和Dn的计算中可以看出,Dm的计算与原文一直,但是Dn的计算却不一致,文中公式计算的是点到直线L的距离,而不是Dn的值。

关于标准边缘坐标

当直线穿过像素时,边缘点的坐标为(x,y)到直线y=kx+b的垂足

理想边缘坐标

Code

%% 理想边缘
clc;clear;close all

p=[0.3, -50/3];
row=255;
col=255;
Pl=0;
Pr=1;
imag=(zeros(row,col));

dm=0.5*abs(p(1)+1)/sqrt(1+p(1)^2)
dn=0.5*(1-p(1))/sqrt(1+p(1)^2)
pt=[];
for i=1:row
    for j=1:col
        d=(p(1)*j-i+p(2))/sqrt(1+p(1)^2);
        if d<-dm
            Ar=0;
            Al=1;
        elseif d>dm
            Ar=1;
            Al=0;
        else
            x=j;y=i;k=p(1);b=p(2);
            if -dm<d && d<=-dn
                Ar=0.5*(x+0.5-(y-0.5-b)/k)*(k*(x+0.5)+b-y+0.5);
                Al=1-Ar;
            elseif -dn<d && d<=dn
                Ar=0.5*(k*(x-0.5)+b-y+0.5+k*(x+0.5)+b-(y-0.5));
                Al=1-Ar;
            elseif dn <d && d <=dm
                Al=0.5*(y+0.5-k*(x-0.5)-b)*((y+0.5-b)/k-x+0.5);
                Ar=1-Al;
            end
            pt=[pt;gcl_footPoint_point_line([p(1),-1,p(2)],[j,i])];

        end
        imag(i,j)=Ar*Pr+Al*Pl;
    end
end
figure,imshow(imag,[]),hold on
% line([0,col],[p(2),p(1)*col+p(2)],'Color','r')
plot(pt(:,1),pt(:,2),'r.')