R Magick Package Image_Write将TIFF图像保存为灰色而不是RGB

eqoofvh9  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(139)

我有一个非常大量的图像,需要稍微裁剪(由1个像素的高度或宽度),以便做进一步的图像处理。
我尝试使用R中的Magick软件包来实现这一点,但是遇到了一个问题,即任何灰色的图像都被Magick保存为灰度而不是RGB。我看到人们问过类似的问题herehere,我尝试了提供的解决方案,但没有任何效果。由于某种原因,当执行Image_Write时,将定义色彩空间设置为自动灰度关闭并将类型设置为真彩色不起作用,图像仍保存为灰度格式而不是RGB格式。
下面是我尝试使用的代码:

crop <- function(a,b) {
  image <- image_read(a)
  cut <- image_crop(image, b)
  image_write(cut, path = a, format = "tiff", defines = c('colorspace:auto-grayscale' = 'false', 'type:truecolor' = 'on'))
}

runcrop <- mapply(crop, mydat[,1], mydat[,2])

其中,输入(mydat)是一个包含两列的表:图像的路径和像素大小我需要的图像裁剪。任何图像采取的黑色和白色(CH 4)保存为灰度输出,而所有其他通道是正确的保存为RGB图像后,裁剪。
下面是表格中的一小段摘录:

> mydat
     imtocrop                            WxH            
[1,] "./01 10245 XY01_Fused_CH1.tif"     "2288x1218+0+0"
[2,] "./01 10245 XY01_Fused_CH2.tif"     "2288x1218+0+0"
[3,] "./01 10245 XY01_Fused_CH3.tif"     "2288x1218+0+0"
[4,] "./01 10245 XY01_Fused_CH4.tif"     "2288x1218+0+0"
[5,] "./01 10245 XY01_Fused_Overlay.tif" "2288x1218+0+0"

下面是一个示例图像,它概括了错误:https://www.dropbox.com/s/8m93vflnf6rd6ao/01%2010245%20XY01_Fused_CH4.tif?dl=0
我写的裁剪公式很好用,但是我似乎不能让Image Magick把这些小问题保存为RGB而不是灰度。我试过为自动灰度设置“false”和“off”,为真彩色设置“true”和“on”。我也试过只使用真彩色选项。不使用色彩空间选项(正如ImageMagick的文档站点here上所建议的)。我所做的一切似乎都无法说服Image_Write输出为RBG而不是灰度。请让我知道,如果你有任何想法,可能会修复这个错误,谢谢!

bfrts1fy

bfrts1fy1#

我不知道R,但我试图把我的知识ImageMagick向你的知识R移动,也许我们可以达到解决你的问题的目标在中间的某个地方...
让我们在终端中使用ImageMagick制作一个简单的640 x480纯黑色图像,并将其以TIFF格式导入exiftool,以检查其深度以及是灰度还是彩色:

magick -size 640x480 xc:black tif:- | exiftool - | grep -E '^Bits|^Photometric'

Bits Per Sample                 : 16
Photometric Interpretation      : BlackIsZero     <- means GREYSCALE

好的,毫不奇怪,我们的黑色640 x480矩形以灰度显示,每个样本为16位,因为我的ImageMagick是用Q16编译的。让我们纠正16位错误:

magick -size 640x480 xc:black -depth 8 tif:- | exiftool - | grep -E '^Bits|^Photometric'

Bits Per Sample                 : 8              <--- that's better, 8-bit
Photometric Interpretation      : BlackIsZero    <--- still greyscale

好了,现在让我们强制黑色图像变为RGB:

magick -size 640x480 xc:black -type truecolor -depth 8 tif:- | exiftool - | grep -E '^Bits|^Photometric'

Bits Per Sample                 : 8 8 8
Photometric Interpretation      : RGB

我的希望是,您可以在R Studio中找到相应的设置/开关/选项,现在您已经知道它们的样子了。
另一种方法是使用system()“shell out”,只使用命令行界面:

magick INPUT.TIF -crop WIDTHxHEIGHT+xoffset+yoffset -type truecolor RESULT.TIF

请注意,为了简化演示,我强制TIFF格式和管道为exiftool。如果您在终端中进行测试,您可以直接写入TIFF文件:

magick -size 640x480 xc:black image.tif

您还可以使用以下选项设置无损压缩:

magick -size 640x480 xc:black -compress LZW image.tif

相关问题