天文はかせ序二段(仮)

天文はかせ三段目(仮)

仙台高専(旧・宮城高専)天文部の活動記録です

中心部と四隅を切り取るスクリプト

レンズや望遠鏡の性能を評価するときに、写野の中心部と4隅を切り取って並べたうえで、さらにピクセル等倍で点光源の形を見るなんてことをよくします。そんなことをするのは、星屋くらいであって、カメラを製作しているエンジニアの方からしたら、

「ヤメてくれよ、そんなん・・」

なんて思っているかもしれません。

それはともかく、「写真の中心と4隅を切り出して並べてくれるフリーソフト」ってないかな?と軽く探して見ると、まあなかなか見つからないのです。普通のひとはそんなことしないからでしょう?

しかし、さらに慎重に探してみた結果「ほしぞloveログ」のSamさんが製作して、公開してくれていました:

PythonOpenCVをつかったプログラムです。そこで、それぞれインストールしてやってみたました。しかしながら顧問の環境(Mac Book Pro + MacOS Sierra)ではうまく動かすことができませんでした。なにか私が間違っているのでしょうけど、そこは深追いせず自分で別のプログラムを作ってみました。

ベースはImagemagickです。もし「自分も使ってみたい」と思われた方は、以下のテキストをコピーして "crop_corners.sh" みたいなファイル名で保存してください。

#! /bin/bash

 

if [ "$1" = "" ]

then 

echo "error:引数にファイル名を指定してくだされ"

exit

fi

 

width=`identify -format %w $1`

height=`identify -format %h $1`

 

if [ "$2" = "" ]

then

size=100

echo "- 100x100 pixels cropped"

elif [ $2 -ge `expr $width \/ 3`  ] || [ $2 -ge `expr $height \/ 3`  ]

then

echo "error:切り抜きサイズがでかすぎ"

exit

else

size=$2

fi

 

echo "picture size: $width x $height"

 

convert $1 -crop "$size"x"$size"+0+0 "$1_lt.jpg"

convert $1 -crop "$size"x"$size"+0+`expr $height - $size` "$1_lb.jpg"

convert $1 -crop "$size"x"$size"+`expr $width - $size`+0 "$1_rt.jpg"

convert $1 -crop "$size"x"$size"+`expr $width - $size`+`expr $height - $size` "$1_rb.jpg"

 

convert "$1_lt.jpg" -bordercolor white -border 3x3 "$1_lt.jpg"

convert "$1_lb.jpg" -bordercolor white -border 3x3 "$1_lb.jpg"

convert "$1_rt.jpg" -bordercolor white -border 3x3 "$1_rt.jpg"

convert "$1_rb.jpg" -bordercolor white -border 3x3 "$1_rb.jpg"

 

x=`echo "scale=2; $width / 2 - 1.5 * $size" | bc`

y=`echo "scale=2; $height / 2 - 1.5 * $size" | bc`

convert $1 -crop `expr 3 \* $size`x`expr 3 \* $size`+"$x"+"$y" "$1_cen.jpg"

 

composite -gravity northwest -compose over "$1_lt.jpg" "$1_cen.jpg" "st1.jpg" 

composite -gravity northeast -compose over "$1_rt.jpg" "st1.jpg" "st2.jpg"

composite -gravity southwest -compose over "$1_lb.jpg" "st2.jpg" "st3.jpg"

composite -gravity southeast -compose over "$1_rb.jpg" "st3.jpg" "crop_$1"

 

rm "$1_lt.jpg"

rm "$1_lb.jpg"

rm "$1_rt.jpg"

rm "$1_rb.jpg"

rm "$1_cen.jpg"

rm "st1.jpg"

rm "st2.jpg"

rm "st3.jpg"

jpgやtif、pngでは動作を確認しています。ふだんimagemagickを使っていない方は、以下の手順であらかじめにインストールする必要があります

Macの方は

Winの方は(わたくし詳しく無いのですけど)Cygwinをインストールして、インストール時に選ぶオプションでImagemagickを一緒に入れてください:

そうしましたら、先ほどの"crop_corners.sh"を保存したディレクトリに移動して

chmod +x crop_corners.sh

と入力して、ファイルを実行権限を付与します。

これで準備完了です。同じディレクトリに四隅を切り出したい画像ファイル(ここではtest.jpgとします)を置いておいて

./crop_corners.sh test.jpg 200

とすれば、四隅の200pxを切り出して"crop_test.jpg"というファイルを出力します。例えば入力画像が

f:id:snct-astro:20200619232515j:plain

であれば、

f:id:snct-astro:20200619232543j:plain

のようなファイルが出力されます。処理途中で8つほど中間ファイルを吐き出すので、ディレクトリをつくって作業されると良いと思います。

 

最後にお約束ですが、このスクリプトを使用して、大事な卒業論文のデータが消失したり、取引先に報告する文書が上書きされたり、これまで撮りためていた家族写真が蒸発したりしたとしても、私としては、ニタニタ笑う以外にはどうしようもありませんので、あしからずお願いいたします・・。