利用前面的方法检测出边缘点,但由于噪声、光照不均等因素的影响,获得边缘点有可能是不连续的,必须使用连接过程将边缘像素组合成有意义的边缘信息,以备后续处理。
填充小的间隙可以简单地实现,通过搜索一个以某端点为中心的5×5或更大的邻域,在邻域中找出其它端点并填充上必要的边界像素,从而将它们连接起来。
对具有许多边缘点的复杂场景,这种方法可能会对图像过度分割。
为了避免过度的分割,可以规定:两个端点只有在边缘强度和走向相近的情况下才能连接。
分析图像中每个点(x,y)的一个小邻域,根据梯度确定边缘像素的相似性。
如果满足:
如果大小和方向准则得到满足,则在前面定义的(x,y)邻域中的点就与位于(x,y)的像素连接起来。
count=1;
c=0;
while ~isempty(count)
c=c+1;
num=0;
disp(length(count))
count=[];
disp(length(count))
for ii=2:row-1
for jj=2:col-1
if imgBW(ii,jj)==1
for x=-1:1
for y=-1:1
if (abs(gradm(ii+x,jj+y)-gradm(ii,jj))<5)&&(abs(jiaodu(ii+x,jj+y)-jiaodu(ii,jj))<2)&&imgBW(ii+x,jj+y)==0
imgBW(ii+x,jj+y) = 1;
num=num+1;
count=[count,num,ii+x,ii+y];
end
end
end
end
end
end
disp(count)
end