ImageMagick 在转换为 JPG 时用黑线分割 NASA 的 [.IMG] 文件

ImageMagick is splitting the NASA's [.IMG] file by a black line upon converting to JPG

我有一些原始的 .IMG 格式文件,我正在使用 ImageMagick 将其转换为 .jpg 以应用 CNN 分类器。然而,转换后的图像有一条黑色垂直线将图像一分为二。线左侧的部分实际上应该位于图像右侧部分的右侧。我发布了示例图片:

我使用了命令magick convert input_filename.IMG output_filename.jpg

Raw .IMG File


图像应该是这样的(使用 numpy 手动转换):


图像的实际外观(使用 ImageMagick 的垂直黑线):


版本详情:

harshitjindal@Harshits-MacBook-Pro ~ % magick identify -version
Version: ImageMagick 7.0.10-0 Q16 x86_64 2020-03-08 
https://imagemagick.org Copyright: © 1999-2020 ImageMagick Studio LLC 
License: https://imagemagick.org/script/license.php Features: Cipher DPC     
HDRI Modules OpenMP(3.1)  Delegates (built-in): bzlib freetype heic jng     
jp2 jpeg lcms ltdl lzma openexr png tiff webp xml zlib

我不知道为什么 ImageMagick 无法正确解释该文件,但我可以告诉您如何让它工作。

您需要在文件中搜索图像的高度、宽度和数据类型,您可以这样做:

grep -E "LINES|LINE_SAMPLES|BITS" EW0220149939G.IMG 
LINES              = 1024
LINE_SAMPLES       = 1024
SAMPLE_BITS        = 8

这意味着您的图像是 1024x1024 和 8 bits/sample(1 字节)。然后你需要从文件的尾端取出那个字节数并将它们送入 ImageMagick。因此,您需要最后的 1024x1024 字节,您可以在 Mac.

上使用 tailgtail (GNU 尾)获得
gtail -c $((1024*1024*1)) EW0220149939G.IMG | convert -depth 8 -size 1024x1024 gray:- result.jpg


如果您的图像是 16 位的,就像您在其他问题中一样,您需要使用:

gtail -c $((1024*1024*2)) 16-BIT-IMAGE.IMG | convert -depth 16 -size 1024x1024 gray:- result.jpg

如果您不喜欢使用 gtail 获取最后一兆字节,您也可以指定从文件开头开始的偏移量,告诉 ImageMagick 像素数据从哪里开始。所以,首先你需要 header:

的大小
grep -E "RECORD_BYTES|LABEL_RECORDS" EW*IMG
RECORD_BYTES         = 1024
LABEL_RECORDS         = 0007

也就是说我们需要跳过1024*7字节才能得到图像,所以命令是:

convert -size 1024x1024+$((1024*7)) -depth 8 gray:EW0220149939G.IMG result.jpg