昨日に続いて、Python3、Pillow、tkinterを使っての
画像処理。高速化をちょっと進めていく。
640×480ドットの画像1枚処理するのに15分ほどかかって
しまっていたので、まず、Pillowのputpixel、getpixelを
大量に使っているところを、アクセス速度がもう少し速い
リスト形式にいったん変換かけて、そっちにアクセスする
ように変更してみる。
…とりあえず、それだけでも15分から4分まで短縮できた。
4倍くらい速くなったんだけど、まだまだだな。
やっぱり、計算量を減らすことが必要だ。計算量を一桁
減らすことは可能なんだけど、ちょっとめんどいのと、
それでも減っても一桁くらいだとすると、ざっくり2~30秒
くらいはかかっちゃうのかなぁ…
あと、塗りつぶし状態の絵を描いた場合に、その周囲との
平均を求めると、塗りつぶしたはずの図形が黒く抜けて
しまうことになりうるので、その辺の手を入れてみる。
頭の中に思い描いていた、RGB各プレーンの扱いをゴニョゴニョ
すればうまくいくだろうと思っていたんだけど、実際に計算
処理に組み込んで実行してみると、前の計算方法と同じ画像
(と思われるもの)が出てきちゃった。
へたにいじると、光がさして明るくなっているところの評価値
が下がっちゃって、無駄なドットが現れちゃうし…。
なかなか難しいな。人間の目(と視覚をつかさどる脳)は、
どういう風にこの辺を処理しているのかな?
とりあえず、もうちょっと格闘しないと、期待した図柄は
得られないみたいだな。
そもそも、現在は実数値で内部計算していると思うんだけど、
そんな精度は必要ないんだよな。計算精度低めてでも、速度
上げたい場合って、Pythonって何か方法ないのかな?
あと、昨日までのアウトプットの図を改めて見直してみると、
一部の線が拾えてないことに気づく。
なんだこれ?と思っていろいろ考えを巡らせる。
多分、周囲に線の色の濃い図形があるせいで、周囲の平均値
が高くなってしまっていて、薄く描かれた線が(数値としては
暗いので)平均値を下回ってしまい、ドットとして拾えて
いなかった(捨てられた)とみるのがよさそうだな。
だとすると、平均を取るより、ソート掛けて下位のデータを
拾うほうがよさそうなんだけど、それはそれで時間掛かっ
ちゃうことになりそうだよな。
いろいろなやましいな。
![](/images/clear.gif)
![](/images/clear.gif)
![](/images/clear.gif)
|