Я пытаюсь использовать R для создания растрового изображения из матрицы данных. Однако я получаю странные артефакты на краю моего изображения.
Я использую следующий код:
# From the example for rasterImage(). A 3 pixel by 5 pixel b/w checkerboard.
testImage <- as.raster(0:1, nrow=3, ncol=5)
testImage
[,1] [,2] [,3] [,4] [,5]
[1,] "#000000" "#FFFFFF" "#000000" "#FFFFFF" "#000000"
[2,] "#FFFFFF" "#000000" "#FFFFFF" "#000000" "#FFFFFF"
[3,] "#000000" "#FFFFFF" "#000000" "#FFFFFF" "#000000"
png('test.png', width=5, height=3, units='px')
# Just want the image, no margins, boarders or other fancy stuff.
par(mar = c(0,0,0,0) )
plot.new()
plotArea = par('fig')
rasterImage(testImage, plotArea[1], plotArea[3],
plotArea[2], plotArea[4], interpolate = FALSE )
dev.off()
Это было выполнено в R 2.12.0 на OS X, но я получаю тот же результат от R 2.11 .0.
Я получаю следующий результат (с масштабированием от 5x3 до 150x90)
Пиксели в углах должны быть черными, что предполагает некоторую форму интерполяции.
Результат, который я ожидаю получить см. здесь:
Любые предложения о том, почему мой код не может точно создать растровое изображение из матрицы?
Это для пакета, над которым я работаю, поэтому я хотел бы остаться в рамках базы R. пакеты, если это возможно, чтобы не вводить дополнительных зависимостей. В пакете реализовано графическое устройство, поэтому, если у кого-то есть решение уровня C, которое берется из информации, переданной GERaster ()
в src / main / engine.c
, и создает PNG, используя только библиотеки R, я бы будьте готовы дать и этому шанс.
Как указал Нико, ошибочное поведение является результатом сглаживания. Сюжет ведет себя так, как ожидалось, если png ()
указано использовать метод вывода, для которого можно отключить сглаживание, например, Каирская графика:
png('test.png', width=5, height=3, units='px', type='cairo', antialias=NULL)
В OS X серверная часть по умолчанию для png ()
- это Quartz, однако png (..., type = 'quartz')
в настоящее время игнорирует директивы, установленные quartz.options ()
.
устройства) в списке рассылки R-help:
Это проблема округления (усечения). Работа над исправлением.
Такое поведение в Windows не должно быть заметно, если растровое изображение не содержит очень маленькое количество пикселей.