Никога не съм отговарял на нито един въпрос във форума, но се възползвах много, особено от stackoverflow, така че реших, че трябва да върна нещо поне веднъж. Тъй като горният проблем ме тормозеше вече почти два дни и най-накрая намерих решение, реших, че това ще бъде добра тема, за да върна нещо на общността.
Имах същия проблем с извличането на изображение (.png) от MongoDB/GridFS с Java драйвера. Първо, както е описано по-горе, трябва да извлечете файла Java обект:
import com.mongodb.*;
import com.mongodb.gridfs.*;
mongoClient = MongoClient('server_name',27017);
db = mongoClient.getDB('database_name');
imgData = GridFS(db,'image_data');
Горната част от кода получава колекцията с данните за изображението. След това Java обектът с данни за изображение може да бъде извлечен:
javaIObj = imgData.findOne('image_name.png');
Сега е необходим ByteArrayOutputStream, където потокът от данни може да бъде прехвърлен вместо файл:
import java.io.ByteArrayOutputStream;
baos = ByteArrayOutputStream();
javaIObj.writeTo(baos);
Изходният поток отново трябва да бъде насочен към ByteArrayInputStream, който може да се използва за конструиране на ImageIO обект:
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
bais = ByteArrayInputStream(baos.toByteArray());
jbi = ImageIO.read(bais);
Сега действителното изображение на Matlab като матрица може да бъде извлечено и показано:
nrows = jbi.getHeight; ncols = jbi.getWidth;
data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = reshape(data,ncols,nrows)';
imagesc(matImg);
Не знам дали това е идеалното решение, но при мен свърши работа.
Наздраве!