ImageMagick разделяет файл НАСА [.IMG] черной линией при конвертации в JPG - PullRequest
0 голосов
/ 09 марта 2020

У меня есть несколько необработанных файлов формата .IMG, которые я преобразую в .jpg, используя ImageMagick для применения классификатора CNN. Преобразованные изображения, однако, имеют черную вертикальную линию, разделяющую изображение на две части. Часть на левой стороне линии должна была быть на правой стороне правой части изображения. Я разместил образец изображения:

Я использовал команду magick convert input_filename.IMG output_filename.jpg

Необработанный файл .IMG


Вот как изображение должно выглядеть (конвертировано вручную с использованием numpy):

Should Look Like This


Как на самом деле выглядит изображение (с вертикальной черной линией используя ImageMagick):

Actually Looking Like This


Сведения о версии:

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

1 Ответ

2 голосов
/ 09 марта 2020

Я не знаю, почему ImageMagick не может правильно интерпретировать файл, но я могу показать вам, как заставить его работать.

Вам необходимо найти в своем файле высоту, ширину и тип данных. вашего изображения, вы можете сделать это следующим образом:

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

Это означает, что ваше изображение имеет размер 1024x1024 и 8 бит / сэмпл (1 байт). Затем вам нужно взять это количество байтов из хвостовой части файла и передать их в ImageMagick. Итак, вам нужны последние 1024x1024 байта, которые вы можете получить с tail или gtail (хвост GNU), когда вы на Ма c.

gtail -c $((10241)) EW0220149939G.IMG | convert -depth 8 -size 1024x1024 gray:- result.jpg

enter image description here


Если ваше изображение 16-битное, как в вашем другом вопросе, вам нужно использовать:

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

Если вам не нравится использовать gtail для Получив последний мегабайт, вы также можете указать смещение от начала файла, которое сообщает ImageMagick, где начинаются пиксельные данные. Итак, сначала вам нужен размер заголовка:

grep -E "RECORD_BYTES|LABEL_RECORDS" EW*IMG
RECORD_BYTES         = 1024
LABEL_RECORDS         = 0007
*1024* Это означает, что нам нужно пропустить 1024 * 7 байт, чтобы получить изображение, поэтому команда:
convert -size 1024x1024+$((1024*7)) -depth 8 gray:EW0220149939G.IMG result.jpg
...