Краткий ответ: writeJPEG()
нужна матрица значений от 0 до 1. Вы предоставляете ей необработанные данные, значения которых находятся в диапазоне 0-255.
Подробно, приведенный вами пример (yalefaces.mat
) имеет размеры:
> faces <- readMat("https://github.com/angelleng/545dump/blob/master/yalefaces.mat?raw=true")
> dim(faces[[1]])
[1] 48 42 2414
, так что на самом деле это 2414 граней размером 48x42. Мы можем отобразить один из них следующим образом:
> image(faces[[1]][,,1])
Если вы усредните их (конечно, не пытаясь изменить размер массива):
> mean.all.faces <- apply(faces[[1]], 1:2, mean)
> image(mean.all.faces)
, кажется, работает нормально:
Но когда вы записываете это в JPEG, следующее даст мусор:
> writeJPEG(mean.all.faces, "BAD.jpg")
, в то время как следующие работы (хотя и немного темные):
> writeJPEG(mean.all.faces/255, "GOOD.jpg")
Это всего лишь теория, но после того, как я недавно обновился до ReSharper 4.5, эта проблема, похоже, будет решена. Это может быть совпадением, но я склонен думать, что это не так ...: P
Никакое решение, но возможно наблюдение: Я получил это время от времени также с приложениями WinForms, отлаживающими на машине с включенным парным монитором. Думая об этом, я никогда не пытался выключить один монитор, и на моей новой работе мы не создаем приложения WinForms. С Веб-формами, начинающими новый браузер, у меня никогда (еще) не было этой проблемы.