画像処理で出来上がったファイルの四隅の星像を比べたくなることがあると思います。これまでPhotoshopで手作業で切り取り貼り付けを駆使して作っていたのですが、何度もやるとなるとめんどくさいので、簡単にできるようにpythonとOpenCVを使って作ってみました。
超お手軽プロブラミングなので、内容はソースを見たらすぐにわかると思います。唯一工夫したところはファイル名をGUIで選択するところくらいでしょうか。Macで試しましたが、多分Windows他でも動くと思います。(すみません、チェックもしてません。)
環境を構築するのもいたって簡単です。今回はMacで試したので、Macでやる場合を書きます。WindowsなどでもPythonとOpenCVが動く環境なら走るはずなので、難しくもなんともないと思います。
1. Macの場合、Phython3はHomebrewからインストールするといいでしょう。Homebreはターミナルを立ち上げて、
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
でインストールできます。
2. 次にPython3です。これもコマンド一発で、
brew install python3
3. 最後はOpenCVのインストールです。
pip3 install opencv-python
でインストール完了です。xcodeをインストールしていない場合は、最初にそれも必要かも。うまくいかない場合は、私なんかの説明よりも、適当に検索すればOpenCVが使えるようになるまでの説明はすぐに出てくるので、探してみてください。
さて、python3とOpenCVの環境が整ったら次はプログラミングです。今回はホントにチャカチャカっと書いたコードなので、全然綺麗ではありませんのでご容赦ください。ファイル選択の際文句が出たりもしますが、とりあえず動きます。
エディタなどで以下のコードをテキストファイルにコピぺして、適当なファイル名をつけて、拡張子を.pyにすれば準備完了です。
ターミナル上で上のプログラムがあるフォルダに行き、
python3.py ファイル名.py
とかで実行すると、画像ファイルを選択するダイアログが現れます。ダイアログが前面に出てこないことがあるので、下のDocからPythonというアイコンを選んでみてください。JPEGファイルしか選べませんが、プログラムの中の15行目を*.pngとかすれば多少他のファイル形式も選べます。
切り取りたいファイルを選択すると、同じフォルダの中に
オリジナルファイル名_4cut.jpg
というファイルが出来上がります。
出来上がりは下のようになります。元の画像から四隅250x250ドット分と真ん中を250x250ドット分を切り取って750x750ドットのファイルを作ってくれます。ホントにこれだけです。
ちなみにこれは、タカハシの新フラットナーで撮ったFS-60CBの星像です。カモメ星雲ですが現在画像処理中のものです。ほとんど流れていないことがわかると思います。元々の動機が、新旧フラットナー、レデューサー、エクステンダーでの四隅の星像を比較したくて、いちいちやるのがめんどくさいのでプログラミングに走ったというわけです。
今回のプログラムは色々制限もありますが、簡単なプログラムなので中身もすぐにわかると思います。各自で適当に改良してみてください。
例えば、26行目の250を他の値に変えると切り出してくれる画像の大きさが変わります。
ちょっと頑張れば上下左右も合わせて8方向の切り取りとかもできると思います。
画像処理プログラミングの取っ掛かりとしては、いい練習になるかと思います。
(追記: Matlabバージョンの切り出しプログラムも書いています。スターベースのブログと同じ形式で5x5マスでフルサイズとAPS-Cサイズを見るものです。よかったらこちらもどうぞ。)
以下のページを参考にしました。
超お手軽プロブラミングなので、内容はソースを見たらすぐにわかると思います。唯一工夫したところはファイル名をGUIで選択するところくらいでしょうか。Macで試しましたが、多分Windows他でも動くと思います。(すみません、チェックもしてません。)
必要な環境
環境を構築するのもいたって簡単です。今回はMacで試したので、Macでやる場合を書きます。WindowsなどでもPythonとOpenCVが動く環境なら走るはずなので、難しくもなんともないと思います。
1. Macの場合、Phython3はHomebrewからインストールするといいでしょう。Homebreはターミナルを立ち上げて、
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
でインストールできます。
2. 次にPython3です。これもコマンド一発で、
brew install python3
3. 最後はOpenCVのインストールです。
pip3 install opencv-python
でインストール完了です。xcodeをインストールしていない場合は、最初にそれも必要かも。うまくいかない場合は、私なんかの説明よりも、適当に検索すればOpenCVが使えるようになるまでの説明はすぐに出てくるので、探してみてください。
ソースコード
さて、python3とOpenCVの環境が整ったら次はプログラミングです。今回はホントにチャカチャカっと書いたコードなので、全然綺麗ではありませんのでご容赦ください。ファイル選択の際文句が出たりもしますが、とりあえず動きます。
エディタなどで以下のコードをテキストファイルにコピぺして、適当なファイル名をつけて、拡張子を.pyにすれば準備完了です。
import cv2
import numpy as np
import tkinter
from tkinter import messagebox as tkMessageBox #python3
from tkinter import filedialog as tkFileDialog #python3
def pathname(fullpath):
n = fullpath.rfind('/') + 1
return fullpath[:n]
def select():
root=tkinter.Tk()
root.withdraw()
fTyp = [('JPEG file','*.jpg')]
iDir = '/Users/ユーザー名/' #自分のユーザー名を入れてください
filename = tkFileDialog.askopenfilename(filetypes=fTyp,initialdir=iDir,title = "ファイル選択")
iDir = pathname(filename)
return filename
filenameselect = select()
img = cv2.imread(filenameselect)
mlen = 250
size = img.shape
roi_UL = img[0:mlen, 0:mlen]
roi_UR = img[0:mlen, size[1]-mlen:size[1]]
roi_LL = img[size[0]-mlen:size[0], 0:mlen]
roi_LR = img[size[0]-mlen:size[0], size[1]-mlen:size[1]]
roi_CC = img[round((size[0]-mlen)/2):round((size[0]+mlen)/2), round((size[1]-mlen)/2):round((size[1]+mlen)/2)]
width = mlen*3
height = mlen*3
imageArray = np.zeros((height, width, 3), np.uint8)
count = np.array([[0,0],[0, mlen*3],[mlen*3, mlen*3],[mlen*3, 0]])
cv2.fillPoly(imageArray, pts=[count], color=(255,255,255))
imageArray[0:mlen, 0:mlen] = roi_UL
imageArray[0:mlen, mlen*2:mlen*3] = roi_UR
imageArray[mlen*2:mlen*3, 0:mlen] = roi_LL
imageArray[mlen*2:mlen*3, mlen*2:mlen*3] = roi_LR
imageArray[mlen:mlen*2, mlen:mlen*2] = roi_CC
savefile = filenameselect.replace('.jpg', '_4cut.jpg')
cv2.imwrite(savefile,imageArray)
実行結果
ターミナル上で上のプログラムがあるフォルダに行き、
python3.py ファイル名.py
とかで実行すると、画像ファイルを選択するダイアログが現れます。ダイアログが前面に出てこないことがあるので、下のDocからPythonというアイコンを選んでみてください。JPEGファイルしか選べませんが、プログラムの中の15行目を*.pngとかすれば多少他のファイル形式も選べます。
切り取りたいファイルを選択すると、同じフォルダの中に
オリジナルファイル名_4cut.jpg
というファイルが出来上がります。
出来上がりは下のようになります。元の画像から四隅250x250ドット分と真ん中を250x250ドット分を切り取って750x750ドットのファイルを作ってくれます。ホントにこれだけです。
ちなみにこれは、タカハシの新フラットナーで撮ったFS-60CBの星像です。カモメ星雲ですが現在画像処理中のものです。ほとんど流れていないことがわかると思います。元々の動機が、新旧フラットナー、レデューサー、エクステンダーでの四隅の星像を比較したくて、いちいちやるのがめんどくさいのでプログラミングに走ったというわけです。
今回のプログラムは色々制限もありますが、簡単なプログラムなので中身もすぐにわかると思います。各自で適当に改良してみてください。
例えば、26行目の250を他の値に変えると切り出してくれる画像の大きさが変わります。
ちょっと頑張れば上下左右も合わせて8方向の切り取りとかもできると思います。
画像処理プログラミングの取っ掛かりとしては、いい練習になるかと思います。
(追記: Matlabバージョンの切り出しプログラムも書いています。スターベースのブログと同じ形式で5x5マスでフルサイズとAPS-Cサイズを見るものです。よかったらこちらもどうぞ。)
参考ページ
以下のページを参考にしました。
- Honebrew: MacにHomebrewを導入する方法
- ブランク画像: OpenCV3とNumpyでブランク画像を作る
- OpenCV: 画像上の基本的な処理
- ファイルダイアログ: Python3でファイルを選択するダイアログボックス(初心者向け)
コメント
コメント一覧 (7)
定番ソフトは存在してないのでしょうかねえ?
私が知っている限り、FlatAidProの中の一機能にあるだけです。ただしFlatAidProは有料なので、無料のものをいろいろ探したのですが、ぱっとは見つかりませんでした。誰かいいアプリを知っていたら教えてほしいです。
まあ画像処理プログラミングもしてみたかったので、いい機会かと思いちょっと試してみたというところです。
800万画素以内の画像であればフリーで使えるので試すことができました。
情報、ありがとうございます。
私はどうも「FOTRAN系」と「PASCAL系」と「BASIC系」しか分からないので、流行りの言語にはなかなか手が出ません。うーむ。精進します!
いえいえ、仕事柄いろんな言語でソースを読んだり、書き換えたりは結構あるのですが、一からプログラムを組むことはここ最近ほとんどしていません。しかも画像処理のプログラムはこれまでしたことなかったので、結構新鮮です。いつか爆速ガイドソフトを組むのが夢です。
開発環境を整えさえすれば(あと行列の知識あれば?)、豊富なライブラリがあるのですばやく所望の処理ができますが、それでも専門で画像処理やっている人だけが扱える世界とたかをくくっていました。
恐れ入りました。さすがです。
いえいえ、HAB大先生にそんなこと言われると恐れ多いです。使いこなすなんてとんでもなく、ほんの入り口を触っているだけです。ちょっと関連してですが、最近画像解析でirafを触っています。これもpythonから動きます。pythonだとグラフまで書けるので便利です。
ところで今日近くまで行ったんですよ。相模原の三基光学です。実は店長、同じ時代に我々と同じキャンパスにいたことが判明しました。なんとまあ狭い世界ですね。