遍历二进制图像

时间:2014-03-19 19:23:34

标签: matlab image-processing traversal

我试图从底部穿过手中的白色像素。它只跟踪一些像素然后它不起作用。我无法找到原因。图像如下。我试图遍历白色像素,并创建一个精确的副本,以确保遍历..

enter image description here

代码如下..

I=imread('data\out1.jpg');
img = im2bw(I, graythresh(I));
image=zeros(240,120);
for i=1:240
    for j=1:120
        if(img(i,j)==1)
        image(i,j)=1;
        end
    end
end
imshow(image);
x=240;y=37;count=0;
im=zeros(240,120);
dir=7;

whitecount=nnz(image);

while(count < whitecount)

    if(mod(dir,2)==1)
        dir=dir+6;
        dir=mod(dir,8);
    elseif(mod(dir,2)==0)
        dir=dir+7;
        dir=mod(dir,8);
    end

    for i=1:8
        if(dir==0)
            xx=x;
            yy=y+1;
        elseif(dir==1)
            xx=x-1;
            yy=y+1;
        elseif(dir==2)
            xx=x-1;
            yy=y;
        elseif(dir==3)
            xx=x-1;
            yy=y-1;
        elseif(dir==4)
            xx=x;
            yy=y-1;
        elseif(dir==5)
            xx=x+1;
            yy=y-1;
        elseif(dir==6)
            xx=x+1;
            yy=y;
        elseif(dir==7)
            xx=x+1;
            yy=y+1;
        end

        if(xx < 241 && xx > 0 && yy>0 && yy<241)
            if(image(xx,yy)==1)
                x=xx;
                y=yy;
                im(x,y)=1;
                count=count+1;
            end
        end
        dir=dir+1;

    end
    end
    figure,imshow(im);

2 个答案:

答案 0 :(得分:0)

问题是你的算法。你只使用当地的决定,在某个方向往后退的优先级高于前进。

看看A *算法,它适合您的情况。

答案 1 :(得分:0)

您的图片存在不连续性,这就是算法失败的原因。何时放大图像,可以看到不连续性。您需要扩大图像Image Dilation-wiki。您可以使用以下命令在MATLAB中实现此目的:

se = strel('square',2);
img = imdilate(img,se);  

代码显示了如何使用结构元素,然后使用结构扩展图像。为了您的目的,尝试使用一个小的结构元素,这将帮助您找到一个非常接近原始图像中看到的路径。

有关结构元素strel和扩张imdilate的更多信息,请点击此处