Как моя матрица данных 100000 x 200 преобразуется в изображение? - PullRequest
0 голосов
/ 09 ноября 2018

Мне любопытно узнать алгоритм, стоящий за функцией изображения R, когда я прошу его сделать мне изображение размером 2K x 32K px с использованием моей матрицы данных 100K x 200. Я передаю свою матрицу данных в функцию R Image, и она превращает меня в черно-белое изображение с указанным размером 2K x 32K px, сжатие = нет. Когда я преобразую изображение tiff в матрицу, это дает мне двоичную (1,0) dim = 2K x 32K матрицу. Я не могу отобразить, как функция tiff выбирает, какой цвет идет в x, y = 1,1 и что идет для координаты x, y = 200, 10000 в матрице изображения tiff, в частности, как создается матрица изображения tiff, правила, и т.д. ... Любое руководство высоко ценится.

library(RColorBrewer)   
my_palette <- colorRampPalette(c( "white","black"))(n=2);
tiff(file="N.tiff",width=2000, height=32000, units="px", res=600);
dim(data)
[1] 180000  200
image(t(data), xaxt= "n", yaxt= "n", bty="n", col=my_palette);
library(tiff)
img <- readTIFF("N.tiff");
write.table(t(img),file='N.csv',row.names=FALSE,col.names=FALSE,sep=',');
dim(img)
[1] 32000  2000

Мне было интересно, есть ли программа, которая может вычислить количество строк на полосу из моего изображения TIFF.

1 Ответ

0 голосов
/ 10 ноября 2018

image() работает, создавая маленький прямоугольник соответствующего цвета для каждой записи в матрице. Поскольку ваша матрица 200 на 180000 (после ее транспонирования), вы получите столько прямоугольников, расположенных в области графика. Вы просили, чтобы общее окно было шириной 2000 пикселей, высотой 32000 пикселей при 600 dpi, поэтому общее окно будет иметь ширину 3,3 дюйма и высоту 53,3 дюйма. Поля будут немного меньше дюйма слева и меньше справа, поэтому область графика будет занимать только часть этой ширины.

Обработка отображения из матрицы в пиксель усложняется из-за полей. Попробуйте несколько небольших примеров на экране, если вы хотите увидеть, на что это похоже. Например, этот код

setwd("~/temp")
data <- matrix(NA, 10000, 20)
data <- row(data) + 100*col(data)
my_palette <- colorRampPalette(c( "white","black"))(n=20)

image(t(data), xaxt= "n", yaxt= "n", bty="n", col=my_palette)

дает это изображение при преобразовании, чтобы быть намного выше, чем в ширину:

enter image description here

Возможно, вы захотите использовать par(mai=c(0,0,0,0)), чтобы упростить отображение без полей. Вы также получили меньше пикселей, чем матричные записи в вертикальном направлении. Я не знаю, будет ли R выбирать или усреднять цвета в том, что он показывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...