お気楽天体観測

肩ひじ張らずに天文を楽しむ記録です。メイン機材はSpaceCat51、CelestronC5、SkyMemoS、CRUX140Traveler、AZ-GTi。カメラはPentaxKP、K70とZWOASI533MCP

星像チェックのシェルプログラムの改善

前回の投稿で、星像チェックプログラムを投稿しましたが、四隅だけでなく、上下左右も切り出して合成できるように、あとついでにプログラムの構造も変更して読みやすくしました。

元画像がこちら

そして、処理実行後の生成画像がこちら

四隅だけより、8か所切り出されているほうがいい感じになりましたw

環境セットアップ

当方はWindows環境で環境を整備しました。 WSL2+Ubuntuをインストールします。※インストール方法はネットを参照のこと。小生はPowerShellで以下の通りインストールしました。

wsl --install
wsl --install ubuntu

ubuntuのインストールの最後にユーザ名とパスワードを入力しますので、ここは忘れないように。 あとで、sudo aptする際に必要になりますので。

次に、ubuntuに必要なパッケージをインストールします。

sudo apt update
sudo apt upgrade
sudo apt -y install imagemagick bc

こちらで事前準備は完了です。

ソースコード

以下のソースを、「crop_corners.sh」とかいう名前にして保存します。

実行方法は以下の通りです。

# crop_corners.sh [対象の画像ファイルのパス] [クロップサイズ(オプション)]

# ファイル名だけ指定する場合
crop_corners.sh IMAGE001.jpg

# クロップサイズも指定する場合
crop_corners.sh IMAGE001.jpg 500

以下、ソースコードになります。※2023/5/15若干修正

#! /bin/bash

# エラーが発生したら終了させる
set -e

# 入力値チェック
if [ "$1" = "" ]
then
    echo "error:引数にファイル名を指定してくだされ"
    exit
fi

if [ ! -f "$1" ]
then
    echo "ファイルが存在しません。$1"
    exit
fi

#dirpath=$(dirname $1)
#filename=$(basename $1)
filename=$1

width=$(identify -format %w ${filename})
height=$(identify -format %h ${filename})

if [ "$2" = "" ]
then
    size=250
#elif [ $2 -ge `expr ${width} \/ 3`  ] || [ $2 -ge `expr ${height} \/ 3`  ]
elif [ $2 -ge $(echo "${width} / 3" | bc)  ] || [ $2 -ge $(echo "${height} / 3"| bc)  ]
then
    echo "error:切り抜きサイズがでかすぎ"
    exit
else
    size=$2
fi

# メインロジック
echo "picture size: ${width} x ${height}"
echo "- ${size}x${size} pixels wiil be cropped"

### 上部の画像切り出し
# Top left
y=0
x=0
convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_tl.jpg # top left
# Top middle
x=$(echo "${width} / 2 - ${size} / 2" | bc)
convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_tm.jpg # top middle
# Top right
x=$(echo "${width} - ${size}" |bc )
convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_tr.jpg # top right


### 高さ中間部画像の切り出し
# Middle left
y=$(echo "${height} / 2 - ${size} / 2" | bc)
x=0
convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_ml.jpg # middle left
# Middle right
x=$(echo "${width} - ${size}" |bc )
convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_mr.jpg # middle right


### 下部の画像切り出し
# bottom left
y=$(echo "${height} - ${size}" | bc)
x=0
convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_bl.jpg # bottom left
# bottom middle
x=$(echo "${width} / 2 - ${size} / 2" | bc)
convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_bm.jpg # bottom middle
# bottom right
x=$(echo "${width} - ${size}" |bc )
convert ${filename} -crop ${size}x${size}+${x}+${y} ${filename}_br.jpg # bottom right


# ボーダーを灰色で着色
convert "${filename}_tl.jpg" -bordercolor gray -border 3x3 "${filename}_tl.jpg"
convert "${filename}_tm.jpg" -bordercolor gray -border 3x3 "${filename}_tm.jpg"
convert "${filename}_tr.jpg" -bordercolor gray -border 3x3 "${filename}_tr.jpg"
convert "${filename}_ml.jpg" -bordercolor gray -border 3x3 "${filename}_ml.jpg"
convert "${filename}_mr.jpg" -bordercolor gray -border 3x3 "${filename}_mr.jpg"
convert "${filename}_bl.jpg" -bordercolor gray -border 3x3 "${filename}_bl.jpg"
convert "${filename}_bm.jpg" -bordercolor gray -border 3x3 "${filename}_bm.jpg"
convert "${filename}_br.jpg" -bordercolor gray -border 3x3 "${filename}_br.jpg"


# 中心画像の切り出し
x=$(echo "scale=2; ${width} / 2 - 1.5 * ${size}" | bc)
y=$(echo "scale=2; ${height} / 2 - 1.5 * ${size}" | bc)
cropsize=$( echo "3 * ${size}" | bc)
convert ${filename} -crop ${cropsize}x${cropsize}+${x}+${y} ${filename}_cen.jpg


# 個別に切り出した画像を1枚に合成
# 合成後の境界のがたがたを解消するため、中間から合成し、四隅を最後に合成
composite -gravity north     -compose over ${filename}_tm.jpg ${filename}_cen.jpg st1.jpg
composite -gravity west      -compose over ${filename}_ml.jpg st1.jpg st2.jpg
composite -gravity east      -compose over ${filename}_mr.jpg st2.jpg st3.jpg
composite -gravity south     -compose over ${filename}_bm.jpg st3.jpg st4.jpg
composite -gravity northwest -compose over ${filename}_tl.jpg st4.jpg st5.jpg
composite -gravity northeast -compose over ${filename}_tr.jpg st5.jpg st6.jpg
composite -gravity southwest -compose over ${filename}_bl.jpg st6.jpg st7.jpg
composite -gravity southeast -compose over ${filename}_br.jpg st7.jpg ${filename}_crop.jpg


# ごみ処理
rm ${filename}_[tmb]*.jpg
rm st[1-7].jpg
rm ${filename}_cen.jpg

参考にしたサイトはこちら