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: 1047
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 38182135
Najwięcej użytkowników 266 było obecnych 19 Lutego 2015, Czw 7:03 pm

Aktualnie online:




Najnowsze posty na forum:
Jak usunąć wiersz z macierzy?  (30 Sierpnia 2017, Sro 5:01 pm)
Co zdrowego zjeść na śniadanie?  (30 Sierpnia 2017, Sro 10:50 am)
pomoc silnia rekurencyjna  (28 Sierpnia 2017, Pon 6:57 pm)
Programy on-line do ozdabiania zdjęć  (28 Sierpnia 2017, Pon 11:20 am)
Pomoc z interpolacją  (26 Sierpnia 2017, Sob 10:58 pm)
Tapeta czy fototapeta?  (25 Sierpnia 2017, Pią 2:45 pm)
Annabelle Narodziny Zła Cały Film Online  (23 Sierpnia 2017, Sro 7:38 pm)
Pomoc z przetwarzaniem sygnałów - Kraków  (23 Sierpnia 2017, Sro 6:27 pm)
Pomoc  (23 Sierpnia 2017, Sro 12:32 pm)
Kamera sportowa  (23 Sierpnia 2017, Sro 6:00 am)
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