2015-03-11 12 views
6

mam ten rodzaj matrycy (13 x 13):MATLAB: Making matryca jak w algorytmie Wavefront

0 0 0 0 0 0 0 0 0 0 0 0 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 1 1 1 1 1 0 1 1 1 1 1 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 

można jakoś zwiększyć wartości wokół centralnego zera i zer które sprawiają, że „ściany” przez po jednym przy każdej iteracji i zrobić to tak jak to?

0 0 0 0 0 0 0 0 0 0 0 0 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 1 2 2 2 2 2 2 2 2 2 1 0 
0 1 2 3 3 3 3 3 3 3 2 1 0 
0 1 2 3 2 2 2 2 2 3 2 1 0 
0 1 2 3 2 1 1 1 2 3 2 1 0 
0 1 2 3 2 1 0 1 2 3 2 1 0 
0 1 2 3 2 1 1 1 2 3 2 1 0 
0 1 2 3 2 2 2 2 2 3 2 1 0 
0 1 2 3 3 3 3 3 3 3 2 1 0 
0 1 2 2 2 2 2 2 2 2 2 1 0 
0 1 1 1 1 1 1 1 1 1 1 1 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 

Odpowiedz

6

Jeśli masz zestaw narzędzi przetwarzania obrazu, jest to jedno-liner:

%# assume your matrix is called A 
result = bwdist(~A,'cityblock') 

„wynik” jest odległością od każdej niezerowej piksela A do najbliższego zera, jeśli tylko można krok w poziomie lub w pionie.

+0

Dziękuję bardzo Jonas. Przepraszam, że znowu przeszkadzam, ale czy wiesz, jak sam mogę napisać tę funkcję (bwdist)? Czy znasz powiązany algorytm? – Fabi

+0

@Fabi: Jeśli nie masz dostępu do przybornika do przetwarzania obrazu, sugeruję użycie 'mexopencv' i użycie ich transformacji odległości. Jest o wiele szybszy niż pisanie na odległość. Jeśli naprawdę, naprawdę chcesz ugotować własną transformację dystansową, zajrzyj na [to pytanie] (http://stackoverflow.com/questions/7426136/fastest-available-algorithm-for-distance-transform) dla algorytmów wprowadzić w życie. – Jonas

+0

Dziękuję Jonas!) – Fabi