如何加载保存为tiff文件的二进制轮廓的XY坐标?
问题描述:
我使用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
命令,但是当我将图像转换为jpegs(或从头开始制作jpegs)时,它们最终会在轮廓周围留下浅色像素作为噪点。我尝试了包tiff
和rtiff
,但是它们的输出不是tiff黑色部分的XY坐标,我对输出不熟悉,不知道如何将它们转换为XY坐标。如何加载保存为tiff文件的二进制轮廓的XY坐标?
谁能帮我做这些事情之一(或多个!):
- 上传的TIFF至R的格式
Momocs
可以读通过tiff
或rtiff
上传 - 转换TIFF数据转换成格式
Momocs
可以阅读 - 获取XY矩阵坐标在 值图像TIFF全黑像素的
- 转换二进制图像以TIFF一个二进制图像jpeg
在此先感谢您的帮助!
答
通过指定arr.ind=TRUE
,您可以使用R的函数which
轻松提取满足特定条件的像素的XY坐标矩阵。为了说明这种方法,我使用Bioconductor包EBImage直接从提供的URL加载示例PNG文件。 readImage
是R包中提供的功能的包装,因此除了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。