MATLAB:自适应索贝尔边缘检测

时间:2015-08-12 23:20:15

标签: matlab kernel edge-detection sobel

请帮忙! 我有一个类似于附着的图像(从深到浅的渐变从南向北移动,有一条感兴趣的水平白线)我试图从图像的底部开始沿y轴查看每个向量,找到白线的底部。我可以使用类似索贝尔的边缘探测器,但是在白线以南有黑点。所以进入一个点将给我的探测器一个大的负值,我可以忽略但是当它离开黑点并返回到梯度我从探测器得到一个很大的正值,我无法区分白线底部的边缘。 我试图拼凑的代码同时在每个点抓取sobel值和强度,并添加到两个不同的向量(带有sobel值的向量,我稍后使用它来定位每个y轴向量的最大值/白线的下边缘)。如果有一个很大的负sobel值(即进入暗点),我会在现场开始之前保持最后一个强度点并使用' while'用零填充索贝尔矢量,向上移动直到核心安全地离开暗点(强度值大于进入暗点之前),此时我再次开始收集实际的索贝尔值。我正在加载一个高度为715的图像,但是我的索贝尔载体的结果要大得多......不确定我做错了什么:

 for n=1:1:width
     sobVec=[];
     intVec=[];
     for k=height-5:-1:5 
         if (-4*double(J((k+4),n))-3*double(J((k+3),n))-2*double(J((k+2),n))-1*double(J((k+1),n))+0*double(J((k),n))+1*double(J((k-1),n))+2*double(J((k-2),n))+3*double(J((k-3),n))+4*double(J((k-4),n)))>-150
            sobVec(end+1)=-4*double(J((k+4),n))-3*double(J((k+3),n))-2*double(J((k+2),n))-1*double(J((k+1),n))+0*double(J((k),n))+1*double(J((k-1),n))+2*double(J((k-2),n))+3*double(J((k-3),n))+4*double(J((k-4),n));
            intVec(end+1)=J(k,n);
         else
            if isempty(intVec)
                intVec=[1];
            end
            while J((k-1),n)<intVec(end)
                k=k-1;
                sobVec(end+1)=0;          
            end
            if J((k-1),n)>intVec(end)*1.1
                for i=1:1:5
                    k=k-1;
                    sobVec(end+1)=0;
                end
            end 
        end
     end

 end 

enter image description here

0 个答案:

没有答案