R- Как я могу обрезать / замаскировать изображение в AOI - Ebimage - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть изображение, и я хочу обрезать / замаскировать / вырезать его - я не знаю «хорошего» слова на английском языке.До сих пор я работаю с библиотекой ebimage.Мое изображение имеет следующие размеры:

  dim          : 768 512 

Я хочу изображение слева: 200 справа: 250 снизу: 100 сверху: 150.Как я могу обрезать его до такой степени?

library(EBImage)
f = system.file("images", "sample.png", package="EBImage")
img = readImage(f)
display(img)
#get new extend??**
writeImage(img, "new_extent.png")

Я должен сделать это для нескольких изображений ... Заранее спасибо;)

1 Ответ

0 голосов
/ 07 мая 2019

Изображения в EBImage - это просто массивы.Чтобы обрезать изображение, вы просто задаете первое и второе измерение массива (которое может иметь более двух измерений).В вашем примере это подмножество будет:

  ix <- 200:250
  iy <- 100:150
  dim(img) # determine the dimensions, 2 in this case
  new_img <- img[ix, iy]
  plot(new_img)
  writeImage(new_img, "new_img.png")

Если вы знаете координаты для каждого изображения, вы просто создаете индекс для каждого изображения, как указано выше.Однако, если вы хотите выбрать часть каждого изображения для обрезки, вы можете использовать locator() с изображением, нанесенным в виде растрового изображения.

Вот пример взаимодействия с изображением.

# Starting with EBImage loaded
  f <- system.file("images", "sample.png", package="EBImage")
  img <- readImage(f)
  plot(img)

# This call to locator selects two points and places a red mark at each
  p <- locator(2, type = "p", pch = 3, col = "red")
  print(p)
> $x
> [1]  62.35648 314.30908
> 
> $y
> [1] 166.1247 316.4605

Image with marks placed by locator()

# Convert the pairs of coordinates into a index to subset the array
  p <- lapply(p, round)
  i <- lapply(p, function(v) min(v):max(v))
  new_img <- img[i$x, i$y]
  plot(new_img)

Cropped image

...