Как преобразовать несколько изображений tiff в координаты xyz в одном текстовом файле с помощью терминала?

У меня ограниченный опыт программирования и Linux, и мне нужна ваша помощь.

Ситуация, в которой я находилась, заключается в том, что у меня есть стопка черно-белых изображений .tiff (около 400 из 10 Мб каждая), которые мне нужно преобразовать в координаты xyz плюс значения оттенков серого и скомпилировать все из них только в одном текстовом файле с x, y, z, в оттенках серого (координаты z, таким образом: первое изображение папки z = 0000, второе изображение 0001 … столько же координат z, сколько изображения в папке).

У меня есть сценарий (который я довольно незнакомый, но я думаю, что это делается с Image Magick), который может это сделать, но только для одного изображения за раз, и добавляет только координаты x, y и значение в оттенках серого, но нет z.

Скрипт:

Точный формат TXT-изображения определяется командой convert, тогда «tail» используется для удаления заголовка, «tr» для символа заменяет каждый символ без номера одним пробелом, так что более позднее «while» может читать это легко, разыгрывая любые номера комментариев, которые могли быть оставлены.

convert -depth 8 -colorspace RGB $1 txt:- | tail -n +2 | tr -cs '0-9.\n' ' ' | while read xy Gray junk; do if [ "$Gray" -eq 0 ]; then echo "$x,$y $Gray" done

Чтобы запустить его, я включил терминал Linux:

chmod +x img.sh

И после этого (я выбрал то же имя, что и изображение, но с .txt как имя файла):

./img.sh pic0000.tif > pic0000.txt

Также я попытался изменить его, чтобы сделать все это сразу, заменив строку convert -depth 8 -colorspace RGB $1 txt:- |

с

convert -depth 8 -colorspace RGB $* txt:- |

и помещая это в терминал

chmod +x ./img.sh ./img.sh *.tif > *.txt

И теперь он помещает все файлы в один с xy Grayscale, но я не могу добавить значения z.

Кстати, для создания txt-файла требуется много времени.

Первыми строками финального файла XYZ должны быть, например:

0 0 0 значение в оттенках серого 1 0 0 значение в оттенках серого `

и последнее:

3095 2951 400 значение в оттенках серого

Не могли бы вы дать мне какие-либо подсказки, идеи или решения? Любая помощь была бы искренне оценена.

2 Solutions collect form web for “Как преобразовать несколько изображений tiff в координаты xyz в одном текстовом файле с помощью терминала?”

Я бы использовал более простой скрипт в ImageMagick, а затем sed вывод. Проблема заключается в определении ваших изображений Z.

Предположим, что изображение в Z = 27 равно DCM0027.tif и что у вас есть изображения от 1 до 420.

Затем вам нужно сгенерировать имя файла из числа и проанализировать сам файл. Для удобства использования файл XYZ.txt генерируется поэтапно:

  #!/bin/sh rm -f XYZ.txt for i in $( seq 1 420 ); do FILE=$( printf "DCM%04d.tif" ) convert -depth 8 -colorspace gray $FILE txt:- \ | sed -e "s/^\\([0-9]*\\),\\([0-9]*\\):.*gray(\\([0-9]*\\))/\1,\2,$i,\3/g' >> XYZ.txt done 

Вышеприведенное должно выполняться как скрипт (сохраняется в img.sh и т. Д.). Если вам нужны номера 1 и 420 для параметризации, вы можете сделать это, заменив их на $ 1 и $ 2. Затем вы запустите img.sh 1 420 .

Другая возможность – перенаправить скрипт:

  #!/bin/sh for i in $( seq $1 $2 ); do FILE=$( printf $3 ) convert -depth 8 -colorspace gray $FILE txt:- \ | sed -e "s/^\\([0-9]*\\),\\([0-9]*\\):.*gray(\\([0-9]*\\))/\1,\2,$i,\3/g' done 

Вышеизложенное потребует как числа, так и структуру имени файла и перенаправление для сохранения данных:

  img.sh 1 500 "DCM%04d.tif" > XYZ.txt 

«% 04d» означает «четыре цифры с нулевым запасом». Итак, 0001, 0002, 0003. Если вместо цифр, например, DCM1FILE.tif, DCM9FILE.tif, DCM10FILE.tif и т. Д., Вы должны использовать «DCM% dFILE.tif» в качестве шаблона файла.

Наконец, если вам нужно количество файлов .tif в папке, вы можете использовать $( ls *.tif | wc -l ) (возможно, существует более простой способ):

  img.sh 1 $( ls DCM*.tif | wc -l) "DCM%04d.tif" > XYZ.txt 

Спасибо @ Исерни, я ценю ваши усилия, но я думаю, что я не понимаю ваш сценарий.

Кстати, в конце концов я решил проблему, я отправлю ее здесь, может быть, кому-то это будет полезно.

От .tiff оттенков серого до .txt в одном файле с координатами z, например:

 xyz Gray (always zero) 

Чтобы узнать, когда заканчивается один pic, а другой начинается, см., Что изменяется значение z. Чтобы скомпилировать его: chmod +x ./script.sh а затем:

 ./script.sh>xyzfile.txt 

Не забудьте оставить в папке ТОЛЬКО фотографии и сценарий.

 #!/bin/bash z=0 for i in pic*; do z=$[$z+1] convert -depth 8 -colorspace Gray $i txt:- | tail -n +2 | tr -cs '0-9.\n' ' ' | while read xy Gray junk; do if [ "$Gray" -eq 0 ]; then echo "$x $y $z $Gray" fi done done 
  • Как я могу открыть новый терминал в том же каталоге последнего использованного из оконного менеджера клавиш?
  • Как перейти к следующему или предыдущему слову с помощью клавиш CTRL + со стрелками в консоли?
  • Копировать / вставить через vim без X
  • Команда Mac Terminal - поиск строки и печать с помощью окружения
  • Странное поведение значения терминала PS1 в Mac против Ubuntu
  • Попытка понять .bashrc, env и export
  • Предотвращать передачу SSH-клиента переменной TERM на сервер?
  • открыть терминал gnome с несколькими вкладками и выполнить несколько команд на каждой вкладке
  • Как просмотреть все команды, выполняемые текущим пользователем, во всех терминалах session / screen / byobu?
  • Добавить параметр только для терминала в Grub в Debian
  • Вход в систему с конкретной оболочкой при входе в терминал
  • Interesting Posts

    Debian 9 прерывистый Wi-Fi

    как объединить два файла на основе одного столбца

    Добавление чисел каждые две строки с использованием awk

    Арифметические операции над конкретным столбцом CSV-файла в Bash

    Как найти выражения?

    Как остановить g ++ ссылку / включая старые системные заголовки / библиотеки из / usr / *?

    Почему команда хоста работает для обратного DNS-тестирования, но не иначе?

    Поиск функциональных параметров для функций в библиотеках общих объектов

    Как исправить внезапную проблему с графикой Ubuntu 14.04?

    ssh работает, но sftp не делает

    Что делать, если bash перестает эхом?

    Как написать правило, которое имеет пограничный сервер, пересылает запрос клиентов на внутренний сетевой сервер и обратно?

    Можете ли вы представить пример использования для `zrun`?

    расширять подстановочные знаки «внутри команды», а не в оболочке

    Почему -text = "$ @" пропускает только первое слово?

    Linux и Unix - лучшая ОС в мире.