使用terra::rast读取分割TIFF图像的R技术问题咨询
免疫组化分割TIFF图像的R处理问题解答
问题1:rast()读取时出现unknown extent警告如何处理?
从terra::describe的输出可见,该TIFF文件缺少地理空间参考元数据,但extent已被正确识别为0, 7170, 0, 8648。这个警告仅为提示,不影响后续图像分析;若要消除警告,可手动确认extent或赋予虚拟坐标系:
test <- rast("Test.tif") # 手动设置extent(与自动识别值一致) ext(test) <- ext(0, 7170, 0, 8648) # 或赋予一个通用虚拟坐标系(示例) crs(test) <- "EPSG:3857"
问题2:白色对应0、黑色对应1,与其他读取方法值相反的原因?
这是因为TIFF文件元数据中包含MINISWHITE=YES标记,定义了白色为最小像素值(0),黑色为最大像素值(1)。而readTIFF(convert=TRUE)会默认反转该逻辑,将白色映射为1、黑色映射为0,导致值的对应关系相反。若需与readTIFF结果一致,可手动反转像素值:
test_reversed <- 1 - test
问题3:plot(test)图像旋转且镜像的原因及解决方法?
原因
TIFF图像的原点通常在左上角,Y轴从上到下递增;而terra的SpatRaster默认原点在左下角,Y轴从下到上递增,二者坐标系方向差异导致绘图时出现旋转+镜像效果。
解决方法
有两种方式可选:
- 绘图时临时反转Y轴范围:
plot(test, ylim = rev(ext(test)[3:4]))
- 永久修改SpatRaster的Y轴方向:
# 方法a:反转extent的Y轴 ext(test) <- ext(0, 7170, 8648, 0) plot(test) # 方法b:使用flip函数翻转Y轴 test_flipped <- flip(test, "y") plot(test_flipped)
问题4:terra::rast读取后自定义颜色无效,如何解决?
因为rast()读取时会保留TIFF自带的颜色表(从describe输出可见Color Table (RGB with 2 entries)),plot()会优先使用该颜色表,忽略自定义的col参数。解决方法是先移除自带颜色表,再指定自定义颜色:
test <- rast("Test.tif") # 移除自带颜色表 coltab(test) <- NULL # 自定义颜色:0对应棕色,1对应透明 plot(test, col = c("brown", NA))
该方式无需将文件加载到内存,适合批量处理大量文件。
内容的提问来源于stack exchange,提问作者Tina
相关产品推荐
相关产品推荐

