Görüntü işleme yazılarının video okuma ile başlayan temel yazısı gelsin…

MATLAB içinde video okumak için fonksiyonlar var fakat eğer işleyeceğiniz dosya biraz büyükse (örneğin 10 dk. kadar), bu fonksiyonlarla okumak pek iyi olmuyor. Çünkü MATLAB tüm kareleri belleğe almaya mı çalışıyor ne? Program şişiyor! Çözümü şöyle:

Şu adresten, Ashwin Thangali’nin yazmış olduğu AVI okuyucusunu indirelim (Dikkat: Sadece okumaya yarıyor, yazma fonksiyonları yok). Sonra mex dosyalarını çağıracak şablon koda bakalım:

% dosya adını verelim
fullpath = 'dosyanin_adi.avi';
 
% Açalım ve bilgilerini okuyalım.
[aviHandle aviInfo] = dxAviOpen(fullpath);
 
% aviInfo'ya bakarak bilgilere ulaşabilirsiniz
aviInfo
 
set(gcf,'DoubleBuffer','on') % Gösterirken titreme yapmasın
 
for iFrame = 1:aviInfo.NumFrames
% Her bir kare için
    % Önce kareyi oku ve resme çevir (tek boyuttan 3 kanala şekillendir)
    frame = dxAviReadMex(aviHandle, iFrame);
    img = reshape(frame/255,[aviInfo.Height,aviInfo.Width,3]);
 
    % Buraya resim üzerinde yapılacak tüm işler konulabilir
    % Örnek olarak HSV'ye çevirelim
    imgHsv = rgb2hsv(img);
 
    % Resme bakalım, n'olmuş...
    imshow(imgHsv);
 
    % Göster bakalım!
    drawnow
end
 
% İşimiz bitti, kapatalım
dxAviCloseMex(aviHandle);

Son aşamayı yapmazsanız, sağlıklı kapanmadığı için bir daha dosya okuyamayabiliyorsunuz. MATLAB’i yeniden başlatırsak veya arada tutarsa clear all ile düzelebiliyor.

Farketmişsinizdir: drawnow kullandık. Çünkü animasyon gibi gösterilmek istenen şeylerde bu fonksiyonu kullanmazsak MATLAB for döngüsünün son turundaki sonucu gösterecekti. DoubleBuffer, açık olsun istedik, çünkü göstermeden önce başka bir tamponda bilgileri işleyip tümünü ekrana bassın istedik; hızlı olsun. İsterseniz onu off yapın ve deneyin. Tabii farkı anlamak için kodun başına tic, sonuna da toc koymalısınız ki geçen süreyi karşılaştırabilin.

Bir gün döngünün içindeki HSV uzayına çevirme kodu yerine daha mantıklı birşeyler yaparız umarım…