2016-06-24 23 views
1

Dies könnte sehr einfach sein, aber ich habe stundenlang nach der richtigen Antwort gesucht.Erstellen Sie eine Liste (oder Array) von Bildern in MATLAB

Ich arbeite an einer visuellen Aufgabe für Primaten und verwende die PsychToolbox in MATLAB. Was ich gerade versuche zu tun, ist, das Foto zu randomisieren, über das sich das Subjekt entscheiden muss. Es gibt viele Codebeispiele für die zufällige Auswahl von Bildern aus einem Verzeichnis, aber die Bilder, die ich verwende, wurden bereits importiert, weil sie zuvor verwendet wurden.

Denn hier Bezug ist der Code, den ich verwendet habe, die Bilder zufällig aus dem Verzeichnis auf meinem Computer zu importieren:

% Get the image files for the experiment 
imageFolder = [cd '/ALSAMultiracial/']; 
imgList = dir(fullfile(imageFolder, '*.jpg')); 
numImages = length(imgList); 

numTrials = numImages; 

% Generate a random number between 1 and the number of images 
randomNumber = randperm(numImages, 1); 

% Get corresponding name of the image 
randomImage = imgList(randomNumber).name; 

% Now load the image 
theImage = imread([imageFolder randomImage]); 

% Make the image into a texture 
tex = Screen('MakeTexture', window, theImage); 

% Draw the texture 
Screen('DrawTexture', window, tex, [], [], 0); 

In dieser Aufgabe habe ich zwischen zwei Bildern Flip: theImage und theImage2. Nachdem ich das getan habe, möchte ich ein zufälliges Bild auswählen, um es anzuzeigen: theImage oder theImage2. Was ich dachte, ist, dass ich eine Liste oder ein Array erstellen und etwas Ähnliches wie vorher machen könnte, aber das Problem ist, dass ich erfolglos versucht habe, eine Liste und ein Array dieser Bilder zu erstellen, um den Prozess zu wiederholen, aber es hat nicht funktioniert. Als Referenz sind alle fraglichen Bilder jpg und die gleiche Größe.

Ihre Hilfe wird sehr geschätzt.

+0

Ich verstehe deine Frage nicht. Wenn Sie zwischen zwei Bildern hin- und herschalten möchten, definieren Sie ein zufälliges Bit, wenn dessen 0 ist, wählen Sie "theImage", andernfalls wählen Sie "theImage2". –

+0

Lassen Sie mich erklären: Also in der ersten Phase des Experiments flash ich Image, dann flash theImage2. In der zweiten Phase möchte ich nach der ersten Phase zufällig Image oder Image2 auswählen. Ich verstehe, was Sie sagen, aber ich könnte das auch versuchen. – collegesista

Antwort

1

Wenn Sie nur versuchen, ein ganzes Verzeichnis von Bildern in ein Array zu laden, würde ich vorschlagen, eine for-Schleife über Ihre imgList zu verwenden, um alle Ihre Bilder in einem Array zu lesen. Auf diese Weise können Sie beim Generieren Ihrer Zufallszahl einfach auf einen Array-Index verweisen.

Etwas zu beachten. Wenn der Imread aufgerufen wird, wird ein 3D-Array (rot-grün-blaue Werte) zurückgegeben. Wenn Sie also mehrere Bilder einlesen, erhalten Sie ein 4D-Array.

Sie können wie etwas tun:

clear pictureData; 
    clear imgList; 
    for imgList = dir(fullfile(imageFolder, '*.jpg')) 
     pictureData(i, :, :, :) = imread([imageFolder imgList]); 
    end 

alle Ihre Bilder lesen. Dann, wenn Sie eine Zufallszahl greifen, können Sie die spezifischen JPEG Daten, die Sie mit

pictureData(randomNumber,:,:,:) 

Lassen Sie mich wollen, greifen wissen, ob dies klar ist oder nicht, kann ich versuchen, weiter zu erklären, wenn Sie spezielle Fragen haben, oder wenn ich habe die Marke komplett verpasst.

Willkommen bei Stack Overflow. :)

+0

Vielen Dank für Ihre Antwort. Unglücklicherweise versuche ich gerade, diese zwei spezifischen Bilder (theImage und theImage2) in ein Array zu laden, da ich jetzt nur zufällig zwischen ihnen wählen kann. Ich habe Ihre Methode bei der Auswahl von Image und Image2 aus dem Verzeichnis verwendet. Ist es möglich, diese Methode an etwas wie "für imgList = dir (fullfile (imageFolder, theImage ',' theImage2 '))" anzupassen oder ist das nicht möglich? – collegesista

+0

Wenn Sie die beide in einem Array wollen Sie so etwas wie ... Picture tun können (1,:,:, :) = Picture (2,:,:, :) =

+0

Vielen Dank für die Hilfe ! – collegesista

Verwandte Themen