Как преобразовать интенсивность (в пикселях) в измеренные значения (например, в мм) в r - PullRequest
0 голосов
/ 25 мая 2018

Я строю диапазон значений в мм от c(-3,3), используя scale_fill_gradient(low= "black", high = "red") на ggplot2, и график анализируется другой программой.Одно из измерений экспортируется как интенсивность в пикселях, и я хочу преобразовать его обратно в значения в мм.Возможно ли это?

1 Ответ

0 голосов
/ 25 мая 2018

Это мой первый пост!Во всяком случае, это хаккейское решение, которое я придумал.Я переключился с черного на красный на черный на белый, поскольку нам нужно иметь дело только с 1 пикселем.Что я сделал, так это создал график, преобразовал его в изображение и посмотрел на значения пикселей в 1 строке графика.Значения пикселей от 1 до 0 (от черного к белому) отображаются на начальные значения мм от -3 до 3 после изменения масштаба.Просто моя попытка, надеюсь, это поможет.

library(tidyverse)
library(imager)
range01 <- function(x){(x-min(x))/(max(x)-min(x))}

dat <- data.frame(mm = seq(-3,3,.1))

####plot them out like you want
plot <- ggplot(data = dat, aes(y=1, x=mm, fill = mm))+
  geom_tile()+
  scale_fill_gradient(low= "black", high = "white")

#There's probably a better way to save the plot and retrieve it as an image
ggsave("plot.jpg", plot)

img <- imager::load.image("plot.jpg") %>% 
  grayscale() %>% #convert to grayscale
  imsub(img, x>300, x <1900) #trim on the left and right

dims <- dim(img2) #get dimensions

values <- img2[,dims[2]/2,,] #Take a single pixel slice out of the image. 0 
is black 1 is white

dat$scaled <- range01(dat$mm) # dat$scaled should correspond to values vector from the plot and you should be about to get mm by matching across.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...