Zaloguj się
Blog na Matlablog
Forum polskich użytkowników
 
UŻYTKOWNICY GRUPY PROFIL Zaloguj się, by sprawdzić wiadomości FAQ
 



Napisz nowy temat     Odpowiedz do tematu Zobacz poprzedni temat :: Zobacz następny temat

Wektoryzacja wyrażeń warunkowych
Forum MATLAB Strona Główna-> MATLAB
Post Wysłany: 14 Maj 2017, Nie 11:13 pm Temat postu: Wektoryzacja wyrażeń warunkowych Odpowiedz z cytatem
 
AUTOR:
Macck



Dołączył: 14 Maj 2017
Posty: 2


Ogląda profil użytkownika Wyślij prywatną wiadomość
Cześć,

mam potrzebę zwiększyć szybkość obliczeń i słyszałem że mogę wykonać coś co się nazywa wektoryzacją

Jest następujący fragment kodu

Kod:

for k = 2 : nframes

    extractionFrames
(:,:,2,k) = extractionFrames(:,:,2,k) - backgroundMean(:,:,2,k);
    
extractionFrames(:,:,3,k) = extractionFrames(:,:,3,k) - backgroundMean(:,:,3,k);
    
    for
i = 1 : trafficVid.Height
        
for j = 1 : trafficVid.Width
          
              
            
if  abs( extractionFrames(i,j,2,k) - extractionFrames(i,j,2,k - 1) ) > 0.25
                
                   foreground
(i,j,2,k) = 1;
            else
                  
foreground(i,j,2,k) = 0;
            
end
 
[... itd]




problem w tym że iteracja i if dla każdej jednej wartości w macierzy 240x360 zajmuje stosunkowo dużo czasu ( bo tych klatek mam powiedzmy 500).

Czy da się to napisać inaczej żeby wykonywało się to szybciej?


 

Post Wysłany: 16 Maj 2017, Wto 2:31 pm Temat postu: Odpowiedz z cytatem
 
AUTOR:
kasztel
Może pisać książki


Dołączył: 10 Maj 2007
Posty: 1048
Skąd: Uniwersytet Warszawski


Ogląda profil użytkownika Wyślij prywatną wiadomość Odwiedź stronę autora
Zamiast pętli coś takiego:

Kod:

foreground
= zeros(tu 4 liczby z rozmiarem)
foreground(abs(diff(extractionFrames,1,4))>0.25) = 1;

trzeba sprawdzić jak zachowuje się k bo foreground ma o jeden element mniej niż reszta

RaK


 

Post Wysłany: 16 Maj 2017, Wto 2:32 pm Temat postu: Odpowiedz z cytatem
 
AUTOR:
darekc
Może pisać książki


Dołączył: 19 Lis 2007
Posty: 565
Skąd: P.Śl. Gliwice


Ogląda profil użytkownika Wyślij prywatną wiadomość
Kod:
for i = 1 : trafficVid.Height
  
for j = 1 : trafficVid.Width
      
if  abs( extractionFrames(i,j,2,k) - extractionFrames(i,j,2,k - 1) ) > 0.25
         foreground
(i,j,2,k) = 1;
      else
        
foreground(i,j,2,k) = 0;
      
end
   end
end

zastąp
Kod:
foreground(:,:,2,k) = double(abs( extractionFrames(:,:,2,k) - extractionFrames(:,:,2,k - 1) ) > 0.25);

Przed wejściem w pętlę ze zmienną sterującą k zarezerwuj pamięć na tablicę foreground.

A może jeszcze tak:
Kod:
extractionFrames(:,:,2,2:nframes) = extractionFrames(:,:,2,2:nframes) - backgroundMean(:,:,2,2:nframes);
extractionFrames(:,:,3,2:nframes) = extractionFrames(:,:,3,2:nframes) - backgroundMean(:,:,3,2:nframes);

foreground(:,:,2,2:nframes) = double(abs( extractionFrames(:,:,2,2:nframes) - extractionFrames(:,:,2,1:nframes - 1) ) > 0.25);


 

Post Wysłany: 11 Czerwca 2017, Nie 12:35 am Temat postu: Odpowiedz z cytatem
 
AUTOR:
Macck



Dołączył: 14 Maj 2017
Posty: 2


Ogląda profil użytkownika Wyślij prywatną wiadomość
Dziękuję wam bardzo za pomoc! Przepraszam, że dopiero teraz ale mój projekcik na chwilę musiał pójść na półkę bo wskoczyły inne rzeczy.

Obecnie kod wykonuje się 71 sekund dla 731 ramek wideo co daje wynik nieco ponad 10kl/s
(jeszcze dużo czasu zabierają przekształcenia morfologiczne ale z tym już raczej nic nie zrobię)

Poprzedni z pierwszego postu wykonywał się ... 340 sekund Smile (2,1kl/s)
Także dziękuję za przyśpieszenie mojego kodu o 500% Smile


 

Forum MATLAB Strona Główna-> MATLAB
Wyświetl posty z ostatnich:   

Napisz nowy temat     Odpowiedz do tematu Zobacz poprzedni temat :: Zobacz następny temat

Wszystkie czasy w strefie CET (Europa)

Skocz do:  

Statystyki forum:



Od dnia 08.06.2006 forum odwiedzano 39355300
Najwięcej użytkowników 266 było obecnych 19 Lutego 2015, Czw 7:03 pm

Aktualnie online:




Najnowsze posty na forum:
Zamiana elementĂłw macierzy  (22 Listopada 2017, Sro 8:36 pm)
The Walking Dead Sezon 8 odc 6 Cda Cały Odcinek  (22 Listopada 2017, Sro 2:12 am)
Dobrze płatna praca  (21 Listopada 2017, Wto 6:21 pm)
Dla kaĹźdego  (21 Listopada 2017, Wto 1:59 pm)
problemy skĂłrne  (21 Listopada 2017, Wto 12:03 pm)
Gwiezdne Wojny Ostatni Jedi Cda  (20 Listopada 2017, Pon 7:38 pm)
Macierz odwrotna  (19 Listopada 2017, Nie 3:43 pm)
OdbiĂłr obrazu z kamery IP  (19 Listopada 2017, Nie 2:39 pm)
[S03E10] Outlander CDA Sezon 3 Odcinek 10 Online Zalukaj PL  (18 Listopada 2017, Sob 11:01 pm)
KrĂłlowe Ĺźycia 3 Sezon 12 Odcinek Online CDA (s03e12)  (18 Listopada 2017, Sob 5:36 pm)
Twoje prawa:
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać plików na tym forum