Подтвердить что ты не робот

Наложение данных на фоновое изображение

Недавно я выяснил, как легко было использовать фоновое изображение и данные карты поверх него с помощью Tableau Public. Вот процесс с сайта . Как вы можете видеть, это довольно просто, и вы просто скажете программному обеспечению, какой образ вы хотите использовать и как определить координаты.

Является ли процесс таким же простым в R? Какой был бы лучший подход?

4b9b3361

Ответ 1

JPEG

Для изображений jpeg вы можете использовать read.jpeg() из пакета rimage.

например:

anImage <- read.jpeg("anImage.jpeg")
plot(anImage)
points(my.x,my.y,col="red")
...

Установив параметр par (new = T) перед следующей командой plot, вы можете построить полные графики над фоновым изображением. (см. ?par и далее вниз)

PNG

Изображения PNG, которые вы можете загрузить с помощью readPNG из пакета png. С помощью readPNG вам понадобится команда rasterImage для построения графика (см. Также файлы справки). В Windows нужно избавиться от альфа-канала, так как Windows до сих пор не справляется с пикселями. Саймон Урбанек был настолько добр, чтобы указать на это решение:

img <- readPNG(system.file("img", "Rlogo.png", package="png"))
r = as.raster(img[,,1:3])
r[img[,,4] == 0] = "white"

plot(1:2,type="n")
rasterImage(r,1,1,2,2)

GIF

Для gif файлов вы можете использовать read.gif из caTools. Проблема в том, что это вращение матрицы, поэтому вам нужно ее отрегулировать:

Gif <- read.gif("http://www.openbsd.org/art/puffy/ppuf600X544.gif")

n <- dim(Gif$image)
image(t(Gif$image)[n[2]:1,n[1]:1],col=Gif$col,axes=F)

Для построения над этим изображением вы должны правильно установить пар, например:

image(t(Gif$image)[n[2]:1,n[1]:1],col=Gif$col,axes=F)
op <- par(new=T)
plot(1:100,new=T)
par(op)

Ответ 2

Я не уверен, что часть того, что вы хотите сделать, это то, что называется "геореференция" - акт принятия изображения без координатной информации и точное определение того, как он отображается в реальном мире.

Для этого я бы использовал Quantum GIS, бесплатный и открытый исходный GIS-пакет. Загрузите изображение как растровый слой, затем запустите плагин геопривязки. Нажмите на некоторые известные точки на вашем изображении и введите полные координаты реального мира этих точек. Как только у вас их будет достаточно, геореферензер разработает, как растянуть и перенести свой образ на реальное место на планете, и написать "мировой файл".

Затем с тем, что R должен иметь возможность читать его с помощью readGDAL из пакета rgdal и, возможно, с растровым пакетом.

Ответ 3

Для изображения JPEG вы можете использовать jpeg library и ggplot2 library.

Обычно мне было полезно, чтобы ось градуировалась в пикселях, а вертикальная ось была позитивной в направлении вниз, а изображение сохраняло исходное соотношение сторон. Таким образом, я могу напрямую подавать R на выходе, создаваемом алгоритмом компьютерного зрения, например, алгоритм может обнаруживать отверстие в пуле и извлекать координаты дыр с целевого изображения съемки, а затем R может нарисовать двумерную гистограмму с использованием целевого изображения в качестве фона.

Мой код основан на коде baptiste, найденном в fooobar.com/info/146187/...

library(ggplot2)
library(jpeg)

img <- readJPEG("bersaglio.jpg") # http://www.tiropratico.com/bersagli/forme/avancarica.jpg

h<-dim(img)[1] # image height
w<-dim(img)[2] # image width

df<-data.frame(x=rnorm(100000,w/1.99,w/100),y=rnorm(100000,h/2.01,h/97))
plot(ggplot(df, aes(x,y)) + 
       annotation_custom(grid::rasterGrob(img, width=unit(1,"npc"), height=unit(1,"npc")), 0, w, 0, -h) + # The minus is needed to get the y scale reversed
       scale_x_continuous(expand=c(0,0),limits=c(0,w)) +
       scale_y_reverse(expand=c(0,0),limits=c(h,0)) + # The y scale is reversed because in image the vertical positive direction is typically downward
                                                      # Also note the limits where h>0 is the first parameter.
       coord_equal() + # To keep the aspect ratio of the image.

       stat_bin2d(binwidth=2,aes(fill = ..density..)) +
       scale_fill_gradient(low = "dark red", high = "red")
     )

enter image description here

df<-data.frame(x=rnorm(100000,100,w/70),y=rnorm(100000,400,h/100))
plot(ggplot(df, aes(x,y)) + 
       annotation_custom(grid::rasterGrob(img, width=unit(1,"npc"), height=unit(1,"npc")), 0, w, 0, -h) + # The minus is needed to get the y scale reversed
       scale_x_continuous(expand=c(0,0),limits=c(0,w)) +
       scale_y_reverse(expand=c(0,0),limits=c(h,0)) + # The y scale is reversed because in image the vertical positive direction is typically downward
       # Also note the limits where h>0 is the first parameter.
       coord_equal() + # To keep the aspect ratio of the image.

       stat_bin2d(binwidth=2,aes(fill = ..density..)) +
       scale_fill_gradient(low = "dark red", high = "red")
)

enter image description here