Процесс преобразования точки в изображение класса и повторный возврат к тому же процессу точки

Я хотел бы переводить между spatstat и raster мирами без повреждения оригинальной информации.

Я пытаюсь преобразовать точечный процесс (объект ppp), присутствующий в наборе данных longleaf в пакете spatstat, в класс im, а после того, как я безуспешно пытаюсь преобразовать объект класса im в исходный набор данных longleaf как точечный процесс.

В моем примере:

#<start> ---
library(spatstat)
library(raster)
library(maptools)

# Compute a gaussian kernel smoothed intensity with longleaf data set
bw <- bw.diggle(longleaf) #First, defined bandwidth sigma 
im_census<-density.ppp(longleaf, sigma=bw,diggle=TRUE)

# Now I'll try to convert im im_census object in original longleaf Point Pattern ppp again
im_census_p<-rasterToPoints(raster(as.SpatialGridDataFrame.im(im_census)))

par(mfrow=c(1,2))
plot(longleaf)
plot(im_census_p)
#<end> ---

Но очевидно, что это не работает? Может ли кто-нибудь помочь мне, пожалуйста?


person Isabel    schedule 03.04.2020    source источник


Ответы (2)


В spatstat преобразование между классами обычно выполняется функцией с именем, начинающимся с "as". Чтобы преобразовать ppp в im, вы можете использовать as.im. Общий as.im отправляет методу as.im.ppp, который вызывает pixellate. Пример:

X <- cells # or any point pattern
Z <- as.im(X)
plot(Z)
plot(X, add=TRUE)

В результирующем изображении Z значение в каждом пикселе представляет собой количество точек данных, попадающих в пиксель. Точные координаты точек данных теряются.

Для преобразования im в ppp не существует метода as.ppp.im, потому что эта операция обычно не имеет смысла. Но если предположить, что изображение Z было создано путем пикселизации точечного шаблона, вы можете сделать

P <- where.max(Z > 0, first=FALSE)

Тогда P является точечным паттерном. Операция Z > 0 возвращает двоичное изображение пикселя с записью TRUE для пикселов, содержащих хотя бы одну точку данных. Функция where.max находит центры пикселей, в которых изображение достигает своего максимума, и в данном случае это означает все TRUE пикселей. Чтобы увидеть эффект дискретизации:

plot(X)
plot(P, add=TRUE, pch=3)

P похож на X за исключением того, что точные местоположения точек данных были заменены местоположениями ближайших центров пикселей. Несколько точек данных, попадающих в один пиксель, заменяются одной точкой в ​​центре пикселя.

Для более сложных манипуляций вы можете использовать as.data.frame для преобразования объекта im во фрейм данных с одной строкой для каждого пикселя со столбцами x, y, value. Затем обработайте этот фрейм данных и, наконец, используйте as.ppp, чтобы создать точечный шаблон из полученного фрейма данных.

person Adrian Baddeley    schedule 05.04.2020

Если я правильно понимаю вашу проблему, то она некорректна. ppp — это векторный формат, который представляет координаты точек с точностью до двойной точности. С другой стороны, растровые форматы, такие как im и объекты из пакета raster, содержат сетку точек с заданным разрешением. Таким образом, если ваши точки не будут идеально выровнены в сетке, ваша задача преобразования из ppp в растровый формат «без какого-либо повреждения исходной информации» невозможна.

Если вам нужна растровая аппроксимация ppp, вы можете использовать pixellate в spatstat, которая создает сетку и подсчитывает, сколько точек попадает в каждую ячейку сетки (обычно 0 или 1).

person Ege Rubak    schedule 04.04.2020