Matlab

0

Czy ktos by mi pomogl z tym zadaniem? Dostalismy takie zadanie bez zadnej pomocy nauczycielka.. Porazka

0
cepoo napisał(a):

Czy ktos by mi pomogl z tym zadaniem? Dostalismy takie zadanie bez zadnej pomocy nauczycielka.. Porazka

Nie pamiętam już składni matlaba, ale coś takiego myślę:
kwadraty = 0

for( x =0; x<dlugosc_macierzy-2; x++)
for(y=0; y < szerokosc_macierzy-2; y++)
if( a[x,y] == a [x,y+1] == a[x+1,y] == a[x+1,y+1] == 1 )
kwadraty++;

Pewnie jest na to jakiś mądrzejszy sposób, ale tak na szybko wymyśliłem.

0

Ja tam w drugiej macierzy widzę cztery kwadraty...
Anyway...
Jeśli przeszukiwana macierz zawiera tylko zera i jedynki to dowolny wzorzec najłatwiej znajdziesz przy pomocy splotu (lub korelacji).
Nie jest to też specjalnie szybkie rozwiązanie (czyli nie próbowałbym go używać dla bardzo dużych macierzy - nie pamiętam czy
conv2 albo xcorr2 mają optymalizację dla sparse matrices).

octave:2> a=[1 0 0 0 0; 0 0 0 1 0; 0 0 0 0 1; 0 0 0 0 1; 0 0 1 0 0]
a =

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

octave:3> b=[1 0 1 0; 0 0 1 0; 1 1 1 1; 0 1 1 1]
b =

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


octave:4> c1=[1 1;1 1]
c1 =

   1   1
   1   1


octave:5> c2 = [ 1 0 1; 0 0 0; 1 0 1]
c2 =

   1   0   1
   0   0   0
   1   0   1


octave:6> c3 = [0 1 0; 1 0 1; 0 1 0]
c3 =

   0   1   0
   1   0   1
   0   1   0

% itd dla każdego wzorca który chcesz znaleźć

Potem liczysz dwuwymiarowy splot macierzy (albo dwuwymiarową korelację) z poszukiwanymi kwadratami i sprawdzasz ile razy w wyniku pojawiła się wartość 4 (czyli liczba jedynek we wzorcu).

octave:36> conv2(a, c1)
ans =

   1   1   0   0   0   0
   1   1   0   1   1   0
   0   0   0   1   2   1
   0   0   0   0   2   2
   0   0   1   1   1   1
   0   0   1   1   0   0

octave:37> conv2(b, c1)
ans =

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

Liczbę "czwórek" możesz łatwo policzyć wyrażeniem

sum(sum(conv2 (b, c3)==4))

Funkcję conv2 możesz zamienić na xcorr2

1 użytkowników online, w tym zalogowanych: 0, gości: 1