R-如何将图像裁剪/遮罩到AOI-Ebimage

时间:2019-02-24 15:07:48

标签: r image crop mask

我有一张图片,我想裁剪/遮罩/裁剪它-我不知道英语中的“好”字。 直到现在我都在使用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 :(得分:1)

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