Создание растровых изображений с использованием R

Я пытаюсь использовать 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 output

Пиксели в углах должны быть черными, что предполагает некоторую форму интерполяции.


Результат, который я ожидаю получить см. здесь:

Expected output

Любые предложения о том, почему мой код не может точно создать растровое изображение из матрицы?


Предполагаемое использование

Это для пакета, над которым я работаю, поэтому я хотел бы остаться в рамках базы R. пакеты, если это возможно, чтобы не вводить дополнительных зависимостей. В пакете реализовано графическое устройство, поэтому, если у кого-то есть решение уровня C, которое берется из информации, переданной GERaster () в src / main / engine.c , и создает PNG, используя только библиотеки R, я бы будьте готовы дать и этому шанс.


Решения для OS X

Как указал Нико, ошибочное поведение является результатом сглаживания. Сюжет ведет себя так, как ожидалось, если 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 не должно быть заметно, если растровое изображение не содержит очень маленькое количество пикселей.

6
задан Sharpie 19 October 2010 в 22:27
поделиться