将分段的 tif 图像(值 0 和 1)读入 r

问题描述 投票:0回答:1

我刚刚开始学习如何使用 R 分析免疫组织化学图像。我有一个分割图像(由其他人执行的分割),用于识别某个标记物呈阳性的细胞,我需要将其读入 R 中以进行绘图和空间分析。我很难理解如何使用 terra:rast() 读取此文件,或者其他方法是否更合适?

文件链接:https://drive.google.com/file/d/1152QLPxF98GqI0IrbVy6VHTEa9-IpcXU/view?usp=sharing

当我阅读此文件时,我收到警告:

test <- rast("Test.tif")
Warning: [rast] unknown extent

测试说明:

test

class       : SpatRaster 
dimensions  : 8648, 7170, 1  (nrow, ncol, nlyr)
resolution  : 1, 1  (x, y)
extent      : 0, 7170, 0, 8648  (xmin, xmax, ymin, ymax)
coord. ref. :  
source      : Test.tif 
color table : 1 
name        : Test

问题:

  1. 面对这个警告我该怎么办?

  2. 与其他读取文件的方法相比,为什么要更改值,使白色为 0,黑色为 1?

  3. 当我绘制图像(plot(test))时,它会被旋转和镜像。为什么?以及如何解决这个问题?

原始文件:

用 r 绘制:

  1. 我尝试使用以下代码将图中的颜色更改为:黑色=无颜色,白色=棕色,但颜色没有任何变化!
plot(test, col = c("brown", "NA")) 

如果我阅读使用

test <- readTIFF("Test.tif", convert = TRUE)

然后转换为栅格:

test <- rast(test)

然后使用更改颜色进行绘图的代码就可以工作了。测试的描述与指定的

min
max
值有些不同:

test
class       : SpatRaster 
dimensions  : 8648, 7170, 1  (nrow, ncol, nlyr)
resolution  : 1, 1  (x, y)
extent      : 0, 7170, 0, 8648  (xmin, xmax, ymin, ymax)
coord. ref. :  
source(s)   : memory
name        : lyr.1 
min value   :     0 
max value   :     1 

如何使用 terra:rast 读取(有很多文件,因此想省略将文件信息存储在内存中)但能够更改颜色?

一些附加信息:

terra::describe("Test.tif")

[1] "Driver: GTiff/GeoTIFF"                                  "Files: "Test.tif"
[3] "Size is 7170, 8648"                                     "Metadata:"                                             
[5] "  TIFFTAG_XRESOLUTION=72"                               "  TIFFTAG_YRESOLUTION=72"                              
[7] "  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)"               "Image Structure Metadata:"                             
[9] "  COMPRESSION=CCITTRLE"                                 "  INTERLEAVE=BAND"                                     
[11] "  MINISWHITE=YES"                                       "Corner Coordinates:"                                   
[13] "Upper Left  (    0.0,    0.0)"                          "Lower Left  (    0.0, 8648.0)"                         
[15] "Upper Right ( 7170.0,    0.0)"                          "Lower Right ( 7170.0, 8648.0)"                         
[17] "Center      ( 3585.0, 4324.0)"                          "Band 1 Block=7170x135 Type=Byte, ColorInterp=Palette"  
[19] "  Image Structure Metadata:"                            "    NBITS=1"                                           
[21] "  Color Table (RGB with 2 entries)"                     "    0: 255,255,255,255"                                
[23] "    1: 0,0,0,255"                                      
spatial tiff terra
1个回答
0
投票

您可以忽略该警告 - 我相信它来自未知的 CRS。

r <- terra::rast("~/Downloads/Test.tif")
#> Warning: [rast] unknown extent

r
#> class       : SpatRaster 
#> dimensions  : 8648, 7170, 1  (nrow, ncol, nlyr)
#> resolution  : 1, 1  (x, y)
#> extent      : 0, 7170, 0, 8648  (xmin, xmax, ymin, ymax)
#> coord. ref. :  
#> source      : Test.tif 
#> color table : 1 
#> name        : Test

terra::plot(r)

黑白颜色是由tiff中的颜色表强制的:

terra::coltab(r)
#> [[1]]
#>   value red green blue alpha
#> 1     0 255   255  255   255
#> 2     1   0     0    0   255

要以不同的颜色绘制它(不更改栅格值),我们必须定义和更改颜色表:

ctb <- data.frame(value = 0:1, col = c("brown", "black"))
terra::coltab(r) <- ctb

terra::plot(r)

仅供参考,使用的 {terra} 版本:

packageVersion("terra")
#> [1] '1.8.3'

创建于 2024-12-08,使用 reprex v2.1.1.9000

© www.soinside.com 2019 - 2024. All rights reserved.