多光谱图像指的是使用电磁频谱的多个波段捕获的图像,而不仅仅是可见光谱。这意味着它们捕获更广泛波长范围内的数据,从紫外线到红外线。
通过捕获多个光谱波段的数据,多光谱图像可以提供有关被成像物体或场景的更多信息,例如它们的成分、温度和植被健康状况。这些信息可用于广泛的应用,包括农业、环境监测、灾难响应和军事监视。
多光谱图像通常使用卫星、无人机或飞机上的专用传感器捕获。然后使用专门的软件处理数据,以创建显示每个光谱波段中捕获信息的图像。
总的来说,多光谱图像为分析和理解我们周围的世界提供了一个强大的工具,使我们能够获得仅使用可见光图像无法获得的见解。
ImageMagick 中的多光谱支持
ImageMagick 支持多光谱图像,其中所有通道都与原始图像具有相同的尺寸和像素数量。但是,并非所有图像格式都支持多光谱图像。PSD、TIFF、MIFF、MPC 和 FTXT 完全支持最多 31 个波段和 21 个元通道的多光谱图像。如果您使用配置脚本 --enable-64bit-channel-masks 选项构建 ImageMagick,则可以处理最多 52 个元通道的 62 波段多光谱图像。
我们将标准 RGB(A) 或 CMYK(A) 通道之外的图像通道称为“元”通道。我们将它们标记为“meta”、“meta1”、“meta2”等。元通道与任何其他通道的处理方式相同,这意味着它们可以被读取、写入和操作——例如,调整大小、调整伽马等。
创建多光谱图像
从多光谱图像开始,通常以 TIFF 或 PSD 格式。如果您没有,可以创建自己的。在我们的示例中,我们创建了一个带有两个元通道的单个 CMYK 像素。将其放入名为 multiMeta.txt
的文件中
0,0: 10,20,30,40,50,60
让我们将其转换为 TIFF 图像格式
$ magick -size 1x1 -colorspace CMYK -define ftxt:format="\x,\y:\c\n" -define ftxt:hasalpha=false -define ftxt:nummeta=2 ftxt:multiMeta.txt multiMeta.tif
让我们确认是否按预期工作
$ identify -verbose multiMeta.tif Image: Filename: multiMeta.tif Permissions: rw------- Format: TIFF (Tagged Image File Format) Mime type: image/tiff Class: DirectClass Geometry: 1x1+0+0 Units: PixelsPerInch Colorspace: CMYK Type: ColorSeparation Endianness: LSB Depth: 16-bit Channels: 6.2 Channel depth: Cyan: 16-bit Magenta: 16-bit Yellow: 16-bit Black: 16-bit Meta channel[0]: 16-bit Meta channel[1]: 16-bit Channel statistics: Pixels: 1 Cyan: min: 10 (0.00015259) max: 10 (0.00015259) mean: 10 (0.00015259) median: 10 (0.00015259) standard deviation: 0 (0) kurtosis: -3 skewness: 0 entropy: 0 Magenta: min: 20 (0.00030518) max: 20 (0.00030518) mean: 20 (0.00030518) median: 20 (0.00030518) standard deviation: 0 (0) kurtosis: -3 skewness: 0 entropy: 0 Yellow: min: 30 (0.000457771) max: 30 (0.000457771) mean: 30 (0.000457771) median: 30 (0.000457771) standard deviation: 0 (0) kurtosis: -3 skewness: 0 entropy: 0 Black: min: 40 (0.000610361) max: 40 (0.000610361) mean: 40 (0.000610361) median: 40 (0.000610361) standard deviation: 0 (0) kurtosis: -3 skewness: 0 entropy: 0 Meta channel[0]: min: 50 (0.000762951) max: 50 (0.000762951) mean: 50 (0.000762951) median: 50 (0.000762951) standard deviation: 0 (0) kurtosis: -3 skewness: 0 entropy: 0 Meta channel[1]: min: 60 (0.000915541) max: 60 (0.000915541) mean: 60 (0.000915541) median: 60 (0.000915541) standard deviation: 0 (0) kurtosis: -3 skewness: 0 entropy: 0 Image statistics: Overall: min: 10 (0.00015259) max: 60 (0.000915541) mean: 35 (0.000534066) median: 35 (0.000534066) standard deviation: 0 (0) kurtosis: -1.79762 skewness: 4.44476e-15 entropy: 0 Total ink density: 0.15259% Colors: 1 Histogram: 1: (10,20,30,40) #000A0014001E0028 cmyk(0.0389105,0.077821,0.116732,0.155642) Rendering intent: Perceptual Gamma: 0.454545 Chromaticity: red primary: (0.64,0.33) green primary: (0.3,0.6) blue primary: (0.15,0.06) white point: (0.3127,0.329) Matte color: grey74 Background color: white Border color: srgb(223,223,223) Transparent color: black Interlace: None Intensity: Undefined Compose: Over Page geometry: 1x1+0+0 Dispose: Undefined Iterations: 0 Compression: None Orientation: TopLeft Properties: date:create: 2023-03-12T11:38:42+00:00 date:modify: 2023-03-12T11:38:42+00:00 date:timestamp: 2023-03-12T11:38:56+00:00 signature: c51848f16d296f7c95be14404cc582f49db6fd33f31b544a2ce10e440b3747b3 tiff:alpha: unspecified tiff:endian: lsb tiff:photometric: separated tiff:rows-per-strip: 1 Artifacts: verbose: true Tainted: False Filesize: 306B Number pixels: 1
注意与这两个元通道相关的通道深度和统计信息。
使用多光谱图像
元通道与任何其他通道的处理方式相同,这意味着它们可以被读取、写入和操作——例如,调整大小、调整伽马等。在这里,我们用元通道的内容替换第一个通道
magick multiMeta.tif -channel-fx 'meta1=>cyan' multiMeta-1.tif
原始青色通道的强度为 10。现在,根据通道 FX 指令,为 50。
在这个例子中,我们创建了两个元通道
magick lena.png \( mandril3.jpg -colorspace gray \) -channel-fx '| gray=>meta' \( zelda1.jpg -colorspace gray \) -channel-fx '| gray=>meta1' meta.tif
在这个例子中,我们将两个元通道混合到一个 alpha 通道中
magick in.tiff -alpha opaque \( +clone -set colorspace sRGB -channel-fx "meta0=>red meta1=>green" \) -channel A -fx "(v.r+v.g)/2" +channel out.tiff
写入多光谱图像
您可以通过将多光谱图像写入支持元通道的格式(如 TIFF 或 PSD)来保留它们。如果写入不支持多光谱图像的其他图像格式,则通道不会被保留,而是丢失——例如,PNG。在这个例子中,我们读取、调整大小并写入多光谱图像
magick multiMeta.tif -resize 50% resizedMeta.tif