我试图从底部穿过手中的白色像素。它只跟踪一些像素然后它不起作用。我无法找到原因。图像如下。我试图遍历白色像素,并创建一个精确的副本,以确保遍历..
代码如下..
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);
答案 0 :(得分:0)
问题是你的算法。你只使用当地的决定,在某个方向往后退的优先级高于前进。
看看A *算法,它适合您的情况。
答案 1 :(得分:0)
您的图片存在不连续性,这就是算法失败的原因。何时放大图像,可以看到不连续性。您需要扩大图像Image Dilation-wiki。您可以使用以下命令在MATLAB中实现此目的:
se = strel('square',2);
img = imdilate(img,se);
代码显示了如何使用结构元素,然后使用结构扩展图像。为了您的目的,尝试使用一个小的结构元素,这将帮助您找到一个非常接近原始图像中看到的路径。