見出し画像

画像処理('24)#7 物体検出/2値画像処理

 今回も印刷教材のプログラムを手入力しました。慣れてきたせいか、これまでよりスムーズにできました。しかしながら、プログラムの実行時間が長いです。PCが古いせいもありますが。

 プログラム7-1を動かす際は、これまでの画像ファイルだと想像できないくらい長い時間がかかるかもと思い、印刷教材にある画像をまねて、432×307の画像と82×87のテンプレート画像を作りました。

 結果、432×307と82×87の画像だと計算時間が1時間10分くらいかかりました。そして、結果画像は出来たものの光る点がありませんでした。プログラムの入力が一部欠落していました。エラーはなしです。

これまでが7分くらいで、今回は30分くらい経過して、あまりに長いので、どれくらい計算時間がかかるか計算したところ、1時間20分くらいとなりました。実際には、1時間10分くらいでした。

結果画像には、光る点がなかったのでプログラムを確認、修正して計算を開始しました。これから1時間か… 

なので、小さなファイルを作り直し、76×60の画像ファイルと16×17のテンプレートファイルを作成し実行すると あっという間に計算終了。
たぶん20秒かかっていないと思います。

学習にはプログラムの動きが確認できる程度の小さなファイルが良いですね。


 432×307の計算
計算時間は、1時間くらい(かなり古いPCです、新しいPC
PCでも数分かかる?)

432×307画像
82×87 テンプレート
結果画像


76×60の計算
計算時間は、十数秒くらい(新しいPCだと一瞬?)

76×60
16×17 テンプレート
結果画像


ImageJ 2値化

#プログラム 7-1 テンプレートマッチング
from PIL import Image
import numpy as np

i1=Image.open("myimage1.png").convert("L")
h=i1.height
w=i1.width
image1=np.array(i1)
image2=np.zeros((h,w),dtype="uint8")

t1=Image.open("template.png").convert("L")
ht=t1.height
wt=t1.width
template1=np.array(t1)

for y in range(0,h-ht):
for x in range(0,w-wt):
tem=0
for v in range(0,ht):
for u in range(0,wt):
tem+=abs((int)(image1[y+v][x+u])-template1[v][u])
tem=tem*5/ht/wt
tem=255-tem
if tem<0:
tem=0
if tem>255:
tem255
image2[y][x]=tem

i2=Image.fromarray(image2)
i2.save("myimage2.png")


この記事が気に入ったらサポートをしてみませんか?