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
图像应该是这样的(使用 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.
上使用 tail
或 gtail
(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
我有一些原始的 .IMG 格式文件,我正在使用 ImageMagick 将其转换为 .jpg 以应用 CNN 分类器。然而,转换后的图像有一条黑色垂直线将图像一分为二。线左侧的部分实际上应该位于图像右侧部分的右侧。我发布了示例图片:
我使用了命令magick convert input_filename.IMG output_filename.jpg
图像应该是这样的(使用 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.
上使用tail
或 gtail
(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