27. Matlab – Import a Export obrázkov, zvuku a videa

06. August, 2010, Autor článku: Blaho Michal, MATLAB/Comsol
Ročník 3, číslo 8 This page as PDF Pridať príspevok

V dnešnom dieli seriálu o Matlabe si ukážeme ako dokážeme pracovať s ďalšími typmi súborov. Najskôr si ukážeme ako importovať, export a získať informácie o grafických súboroch. Potom sa budeme venovať rovnakým činnostiam s audio a video súbormi.

Informácie o grafickom súbore

Ak máte obrázok v niektorom zo štandardných grafických formátov môžete si pomocou Matlabu zistiť základné informácie o súbore. Funkcia imfinfo vracia štruktúru, ktorá obsahuje informácie o súbore. Štruktúra sa mení podľa typu súboru, zvyčajne však obsahuje informácie ako názov súboru, jeho veľkosť, výška, šírka a mnoho ďalších. Funkcia dokáže prečítať informácie aj z URL adresy. V nasledujúcom príklade načítame údaje o súbore mona-lisa.jpg, s ktorým dnes budeme v prvej časti článku pracovať a o ikonke seriálu zo seriálu o Matlabe.

>>imfinfo('mona-lisa.jpg')
ans =
Filename: 'mona-lisa.jpg'
FileModDate: '25-Jul-2010 16:20:18'
FileSize: 50553
Format: 'jpg'
Width: 337
Height: 500
>>imfinfo('http://www.posterus.sk/wp-content/uploads/p44_matlabicon.png');

Import grafických dát

V Matlabe vieme načítať dáta z grafických súborov vo väčšine štandardných ako sú TIFF, GIF, JPEG, PNG (všetky dostupné sú popísané v užívateľskej príručke). Na import týchto súborov použijeme funkciu imread. Pomocou tejto funkcie podobne ako pri funkcii imfinfo môžeme čítať obrázok aj na zadanej URL adrese. Načítanie nášho obrázka do Workspace si ukážeme na nasledujúcom príklade.

>>I1=imread('mona-lisa.jpg');
>>I2=imread('http://www.posterus.sk/wp-content/uploads/p44_matlabicon.png');
>>whos

Name Size Bytes Class Attributes
I1 500x337x3 505500 uint8
I2 77x85x3 19635 uint8

Funkcia väčšinou načíta obrázok do workspace ako viacrozmerné pole dátového typu uint8. Rozmer poľa môže závisieť od formátu obrázka. Pre RGB formáty má pole rozmer (Výska,Šírka,Farba), kde farba je rovná 1 pre hodnoty červenej, 2 pre hodnoty zelenej a 3 pre modrú farbu. TIFF súbory využívajú často model CMYK. V tom prípade má posledný rozmer poľa 4 farby. Na nasledujúcom príklade si vykreslime obrázok vo všetkých farbách a potom len v jednotlivých farbách tak, že zvyšné vynulujeme. Obrázok si vykreslíme príkazom image.

>> R=I1; G=I1; B=I1;
>> R(:,:,2:3)=0;
>> G(:,:,[1 3])=0;
>> B(:,:,1:2)=0;
>> hold on
>> subplot(2,2,1)
>> image(I1)
>> subplot(2,2,2)
>> image(R)
>> subplot(2,2,3)
>> image(G)
>> subplot(2,2,4)
>> image(B)

Výsledok môzete vidieť na nasledujúcom obrázku


Obr.1 Importovnaný obrázok a vykreslenie po frabách

Export grafických dát

Exportovanie je veľmi podobne ako importovanie. Pre export dát do štandardných grafických formátov využívame funkciu imwrite. Argumentami funkcie sú grafické dáta ako viacrozmerné pole, meno súboru prípadne aj jeho typ. Funkcia príma aj ďalšie argumenty pre každý formát sa môžu líšiť a nájdete ich v užívateľskej príručke. Jednoduché použitie funkcie si ukážeme na nasledujúcom príklade.

>> imwrite(B,'blue-mona-lisa.png','png')

Práca s audiom a videom

Tak ako pri obrázkoch aj pri audiu a videu poskytuje Matlab niekoľko užitočných funkcií. V tejto časti si povieme o funkciách, ktoré dokážu o súboroch zistiť užitočné informácie, načítať dáta a spracované dáta uložiť.

Informácie o audiu a videu

Matlab obsahuje niekoľko funkcií na zistenie informácií o audio alebo video súbore. Niektoré pracujú len pre určitý typ súborov, iné zase všeobecne. Medzi tie jednoduchšie patrí funkcia aufinfo. Funkcia vracia textovú správu či súbor je alebo nie je AU súbor. Ďalším vystupom z funkcie je textová informácia o počte vzoriek a kanálov. Podobne funguje aj funkcia wavfinfo, ktorá pracuje s WAVE súbormi. Funkcia aviinfo získa informácie o AVI súbore. Vracia štruktúru, v ktorej nájdete informácie ako veľkosť, výška, šírka, počet obrázkov a mnoho ďalších.

>> [m d] = wavfinfo('sound_bubbles.wav')
m=Sound (WAV) file
d=Sound (WAV) file containing: 222264 samples in 1 channel(s)
>> info=aviinfo('viptraffic.avi')
info =
Filename: 'viptraffic.avi'
FileSize: 208896
FileModDate: '04-Apr-2005 19:17:27'
NumFrames: 120
FramesPerSecond: 15
Width: 160
Height: 120
ImageType: 'truecolor'
VideoCompression: 'MP42'
Quality: 0
NumColormapEntries: 0

Funkcia pre všeobecnejšie účely pre získanie informácií o audio a video súboroch sa volá mmfileinfo. Funkcia dokáže pracovať s väčšinou súborov. Funkcia vracia štruktúru, v ktorej sa nacházajú informácie o súbore. V štruktúre nájdete ďalšie štruktúry Audio a Video. Obsahujú detailnejšie informácie o jednotlivých položkách.

>> info = mmfileinfo('viptraffic.avi')
info =
Filename: 'viptraffic.avi'
Path: '/Users/miseno/Documents/MATLAB/posterus'
Duration: 7.9333
Audio: [1x1 struct]
Video: [1x1 struct]
>> info.Audio
ans =
Format: ''
NumberOfChannels: []
>> info.Video
ans =
Format: 'Microsoft MPEG-4 V2'
Height: 120
Width: 160

Import audia a videa

Po získaní informácií o audio alebo video súbore môžeme tieto dáta načítať do workspace Matlabu. Matlab nám zase poskytuje niekoľko funkcií na načítanie týchto dát. Pre AU súbory je to funkcia auread. Funkcia potrebuje ako vstup meno súbora, ale môžeme zadať aj počet vzoriek prípadne ich interval pri čítaní súboru. Ako výstup dostaneme vzorkované dáta a pri rozšírení výstupu aj vzorkovanie v Hz a počet bitov na vzorku. Podobne funguje aj funkcia wavread pre WAVE súbory. Na prehratie WAVE dát z workspace môžete využiť funkciu wavplay, sound alebo soundsc.

>> [y, Fs, nbits] = wavread('sound_bubbles.wav');
>> sound(y);

Funkcia aviread načíta AVI súbor do workspace vo forme štruktúry s položkami cdata a colormap. Tieto dáta viete prehrať príkazom movie. V Unixových platformách musí byť AVI súbor nezbalený. Podobne ako pri informáciách o súbore existuje aj všeobecná funkcia na čítanie audio a video súborov. Funkcia mmreader vytvorí objekt, ktorý dokáže čítať dáta so súbora. Podporu súborov ako aj pracovať s takýmto objektom nájdete v užívateľskej príručke.

>> mov = aviread('viptraffic.avi');
>> movie(mov);

Nahrávanie audia

Matlab podporuje aj nahrávanie zvuku z audio vstupu (napr. mikrofón). Najskôr je potrebné vytvoriť si objekt pomocou funkcie audiorecorder. V nej zadáme vzorkovaciu frekvenciu, počet bitov a kanálov pre náš objekt. Zvuk nahráme funkciou wavrecord pre WAV súbor, alebo funkciou record. Prehranie zvuku okrem spomenutých funkcií môžeme realizovať pomocou audioplayer objektu. Ako vstup sa do funkcie púšťa dátový signál a vzorkovacia frekvencia. Zvuk potom prehráme funkciou play, v ktorej môžeme špecifikovať začiatok a koniec podľa vzoriek. Ďalšie funkcie pre audio objekt sú stop, pause, resume a iné.

>> r = audiorecorder(44100, 16, 1);
>> record(r);
>> pause(r);
>> resume(r);
>> stop(r);
>> p = play(r);

Export audia a videa

Upravené audio dáta vieme zase exportovať z workspace do súboru. Pomocou funkcie auwrite môžeme zapísať AU súbory a pomocou funkcie wavwrite môžeme zapísať WAVE súbory. Funkcie prijímajú štandardne ako vstup samostatná dáta a meno súbora. Na export AVI dát treba objekt AVI súbora. Pre prácu s dátami potom treba využiť metódy objektu na zápis dát. Táto časť skôr patrí do animácií a my sa už mini v tejto časti nebudeme zaoberať.

>>wavwrite(y,'echo.wav');

Dnes sme si povedali ako pracovať s grafickými, audio a video súbormi. Niektoré spomenuté funkcie nefungujú pre operačné systémy typu UNIX, preto treba pozorne sledovať chybové hlásenia a pozrieť manuál. V budúcej časti sa pozrieme na čítanie a zápis súborov pomocou nízko-úrovňových funkcií.

Napísať príspevok