Eu nunca respondi a nenhuma pergunta do fórum, mas me beneficiei muito especialmente do stackoverflow, então pensei em devolver algo pelo menos uma vez. Como o problema acima estava me incomodando agora por quase dois dias e finalmente montei uma solução, pensei que seria um bom tópico para devolver algo à comunidade.
Eu tive o mesmo problema de recuperar uma imagem (.png) de um MongoDB/GridFS com o driver Java. Primeiro, como também descrito acima, você precisa recuperar o objeto Java do arquivo:
import com.mongodb.*;
import com.mongodb.gridfs.*;
mongoClient = MongoClient('server_name',27017);
db = mongoClient.getDB('database_name');
imgData = GridFS(db,'image_data');
A parte do código acima está obtendo a coleção com os dados da imagem. Depois, o objeto Java de dados de imagem pode ser recuperado:
javaIObj = imgData.findOne('image_name.png');
Agora ByteArrayOutputStream é necessário onde o fluxo de dados pode ser canalizado em vez de um arquivo:
import java.io.ByteArrayOutputStream;
baos = ByteArrayOutputStream();
javaIObj.writeTo(baos);
O fluxo de saída precisa ser canalizado novamente para um ByteArrayInputStream que pode ser usado para construir um objeto ImageIO:
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
bais = ByteArrayInputStream(baos.toByteArray());
jbi = ImageIO.read(bais);
Agora a imagem real do Matlab como matriz pode ser recuperada e exibida:
nrows = jbi.getHeight; ncols = jbi.getWidth;
data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = reshape(data,ncols,nrows)';
imagesc(matImg);
Não sei se esta é a solução perfeita, mas funcionou para mim.
Felicidades!