如何加载二进制轮廓的XY坐标保存为tiff文件?

时间:2017-10-10 22:43:41

标签: r image imagej

我正在使用R包Momocs来比较我在ImageJ中跟踪并保存为二进制图像tiff的形状轮廓。例如:one outline of snail teeth。 Momocs需要一个X和Y坐标矩阵,我无法从图像转换到坐标。

一方面:ImageJ可以选择另存为... XY坐标,但这仅适用于选择。我可以使用棒工具来选择轮廓,但它包围了一个像素宽的轮廓,例如:直线将具有长矩形的坐标,描述该线的两侧。这让我在double-vision (image example of one tooth close-up)看到了我的蜗牛,可能会对分析产生不利影响。

另一方面:Momocs有import_jpg1命令,但是当我将图像转换为jpeg(或从头开始制作jpeg)时,它们最终会在轮廓周围出现浅色像素作为噪声。我尝试了包tiffrtiff,但是它们的输出不是tiff黑色部分的XY坐标,而且我对输出不够熟悉,无法理解如何将它们转换为XY坐标。

任何人都可以帮我做一件(或多件!)这些事情:

  • Momocs格式将tiffs上传到R可以阅读
  • 将通过tiffrtiff上传的tiff数据转换为格式 Momocs可以阅读
  • 获取a中所有黑色像素的XY坐标矩阵 binary-image tiff
  • 将二进制图像tiff转换为二进制图像jpeg

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

通过指定which,您可以使用R的函数arr.ind=TRUE轻松提取符合特定条件的像素的XY坐标矩阵。为了说明这种方法,我使用Bioconductor EBImage 直接从提供的URL加载示例PNG文件。 readImage是R包 jpeg png tiff 中提供的函数的包装器,因此除了PNG之外,它还会打开JPEG和TIFF文件。

### Install EBImage
# source("https://bioconductor.org/biocLite.R")
# biocLite("EBImage")

img <- EBImage::readImage("https://i.stack.imgur.com/ZFTxu.png")

mat <- which(img==0, arr.ind=TRUE, useNames=FALSE)
head(mat)

##      [,1] [,2]
## [1,]  121   53
## [2,]  120   54
## [3,]  118   55
## [4,]  119   55
## [5,]  117   56
## [6,]  116   57

EBImage 提供了大量工具,用于处理您可能感兴趣的R中的图像数据,例如操作,过滤和显示图像的功能。请参阅包vignette以获取概述。