2017-08-10 4 views
2

Ich arbeite an einer Echtzeit-Test-Software in MATLAB. Bei Benutzereingaben möchte ich den Wert eines (oder einiger benachbarter) Pixel aus 50-200 hochauflösenden Bildern (~ 25 MB) extrahieren.MATLAB: Gibt es Probleme mit vielen (Millionen) kleinen Dateien im Vergleich zu wenigen (Tausenden) großen Dateien?

Mein Problem ist, dass die Gesamtbildmenge zu groß ist (~ 2000 Bilder), um im RAM zu speichern, folglich muss ich jedes der 50-200 Bilder von der Platte nach jedem Benutzereingang lesen, was natürlich Weg ist langsam!

Also habe ich darüber nachgedacht, die Bilder in Teilbilder (~ 100x100 Pixel) aufzuteilen und diese separat zu speichern. Dies würde den Bildlesevorgang schnell genug machen.

Gibt es irgendwelche Probleme, die ich bei diesem Ansatz beachten sollte? Zum Beispiel habe ich über Leute gelesen, die Schwierigkeiten haben, viele kleine Dateien zu kopieren, wird mich das beeinflussen, das Bild langsamer lesen zu lassen?

+1

Mit der Option "PixelRegion" von [imread] (https://www.mathworks.com/help/matlab/ref/imread.html) können Sie Unterbilder lesen. – rahnema1

+0

Danke! Die Reaktionszeit für jeden Eingang reicht von einigen Minuten bis zu einigen Sekunden, was für jetzt gut genug ist! – IsseBisse

Antwort

0

rahnema1 ist richtig - imread (..., 'PixelRegion') wird den Lesevorgang beschleunigen. Wenn es nicht genug für Sie ist, auch wenn Ihre Dateien nicht fragmentiert sind, ist es vielleicht Zeit, über eine Datenbank nachzudenken? Plattenoperationen sind immer der Flaschenhals. Zuerst wechseln wir zu Festplattencaches, dann zu verteiltem Speicher und dann zu RAID. Nach einiger Zeit schließen wir die In-Memory-Datenbanken ab. Sie sollten auswählen, welche Zugriffsgeschwindigkeit angemessen ist.

Verwandte Themen