ターミナルを使用して複数のtiff画像を単一のテキストファイルのxyz座標に変換するには?

ターミナルを使用して複数のtiff画像を単一のテキストファイルのxyz座標に変換するには?

私はプログラミングとLinuxの経験が不足しているので、あなたの助けが必要です。

私の状況は、xyz座標とグレースケール値に変換し、これらすべての画像をx、y、z、グレースケールを使用するテキストファイル(z座標、たとえばフォルダの最初の画像z = 0000、2番目の画像0001など)フォルダ内の画像数と同じz座標)。

私はこれを行いますが、一度に1つの画像に対してx、y座標、およびグレースケール値のみを追加するスクリプトがあります(非常に慣れていませんが、Image Magickで完了したようです)。

スクリプトは次のとおりです。

TXT イメージの正確な形式は変換コマンドによって定義されます。します。残すことができるコメントの数。

convert -depth 8 -colorspace RGB $1 txt:- | tail -n +2 | tr -cs '0-9.\n' ' ' | while read x y 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グレースケールとして1つのファイルに配置しますが、z値を追加することはできません。

ところで、txtファイルの作成に時間がかかります。

最後のXYZファイルの最初の行は次のようになります。

0 0 0グレースケール値1 0 0グレースケール値

最後のもの:

3095 2951400 グレー値

私にどんな手がかり、アイデア、解決策を与えることができますか?どんな助けでも大変感謝します。

ベストアンサー1

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

2つの数字が必要ですそしてファイル名の構造と保存されたデータリダイレクト:

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

「%04d」は「4桁の数字、0で埋められる」を意味します。つまり、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

おすすめ記事