Почему растущая реализация региона не работает должным образом? - PullRequest
0 голосов
/ 30 октября 2018

Регионирование - это простой метод сегментации изображений по регионам. Он также классифицируется как метод сегментации изображения на основе пикселей, так как он включает в себя выбор начальных начальных точек. Я написал следующее в matlab, и, похоже, существует бесконечный цикл. Я хотел бы знать, где реализация терпит неудачу.

import java.util.LinkedList
a=imread('C:\Users\hpw\Desktop\1.jpeg');

s=size(a);
visited=zeros(s(1),s(2));
x=179;
y=180;
%seed chosen
visited(179,180)=1;
boundaryx = LinkedList();
boundaryy = LinkedList();
boundaryx.add(x);
boundaryy.add(y);


while(boundaryx.size()>0 &&boundaryy.size()>0)
   nextx=boundaryx.pop();
   nexty=boundaryy.pop();
   if(a(nextx,nexty)>110)
       visited(nextx,nexty)=2;
   end
   %taking 4 neighbors only
   if(nextx>1 && nexty>1)%right neighbor
       if(visited(nextx+1,nexty)==0)
           boundaryx.add(nextx+1);
           boundaryy.add(nexty);
       end
       if(visited(nextx-1,nexty)==0)
           boundaryx.add(nextx+1);
           boundaryy.add(nexty);
       end
       if(visited(nextx,nexty+1)==0)
           boundaryx.add(nextx+1);
           boundaryy.add(nexty);
       end
       if(visited(nextx+1,nexty-1)==0)
           boundaryx.add(nextx+1);
           boundaryy.add(nexty);
       end
   end
end

1 Ответ

0 голосов
/ 30 октября 2018

При использовании цикла while у вас всегда будет такая проблема. Попробуйте реализовать условие, при котором это выходит за пределы. Или реализовать условие, при котором вы break; выходите из цикла.

Как-то так, прямо перед end %while:

if boundaryy.size() >= 1000 && boundaryx.size() >= 1000
   break;
end

Возможно, это не условие, которое вы ищете, но этот цикл был бесконечным, пока я не установил условие, при котором время может break;. Если вы посмотрите на ваше граничное условие для цикла while, вы увидите, что boundaryy.size()>0 ВСЕГДА истинно. Это приводит к другому методу остановки цикла while без break;.

while(boundaryx.size()<1000 &&boundaryy.size()<1000) 
...
end

Таким образом boundaryy.size() и boundaryx.size() в конечном итоге увеличатся и достигнут граничного условия 1000.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...