「第13回燐字書き取り」分割

第13回!

分割した画像?ここの燐字画像22の列にあるやつで全部だ!jsが書けないのでいつものあれは省略。

元画像はimg1img2で確認。

1. leastsquare.py

私(skarsna.meloviliju)もこの作業は初めてなので、j.v.氏に訊きつつ前例と取っ組みあうことにする。

原稿の四隅(1枚目)に位置する4字の(マスの左上の)座標をGIMPで取ると、

      y1,   y2       s1 s2
左上:   58,   58 --->  0, 0
右上:  921,   58 --->  9, 0
左下:   58, 1314 --->  0,19
右下:  920, 1314 --->  9,19

だったので、これをleastsquare.pyのsとyに突っ込んでやると下の理論が動いて必要な行列がでるらしい。科学の力ってすごいね。

うまいパラメータt10, t11, t12, t20, t21, t22を持ってきて、

となるようにしてやれば良い。ただしs0たちは全部1。

Y ≒ T1Sで最小二乗法をやるのでYST=T1SSTを解けばよく、T1=YST(SST)-1なのでT1

[[ 2.26000000e+02 3.73714286e+02 3.57142857e-01]
[ 4.31750000e+02 -6.42857143e-01 2.75678571e+02]]

となるらしい、なるほど。

j.v.氏曰く、行間はこの計算で自動的に算出されるらしいので、次はsplit.pyへ。


2. split.py

linziListに燐字の表を打ち込む。これが一番疲れた。どういう対応かは画像とファイル見て察してほしい。

split.pyを走らせる。

ValueError: zero-size array to reduction operation maximum which has no identity

おおっと。

存在しない画像範囲にアクセスして死んでるらしいが、出力画像を見てみるとたしかに途中で変に折り返されている。

訊くと、foo()内でsave()に渡す整数が何文字で折り返すか決めるらしい。今回は1枚目に10、2枚目に8を設定。

次はsave()を見る。Bのところの数字二つが縦と横のピクセル数を示すそうだ。試行錯誤を繰り返した末、今回は縦64、横66で行く。

1枚目でやってみると動いて2枚目突入したところで同じエラーはいて止まった。とりあえずこれで動くのはわかった。


3. 完成

2枚目の原稿でも1と2を繰り返して、最後まで動かしてディレクトリ整理。

便宜的に作っていたフォルダから文字画像を全部取り出して画像ルートに並べておわり。

コードにもコメントをつけておいたのでこれと一緒に読んだらまぁ分かると思う。


4. 追加

このドキュメントを書くのが遅すぎてcommitする前に【帝】の字形が決まったのでついでにsplit2.pyを書いて追加。

4. テイク2!w

字が増えたこと、字が気に入らなかったことでリテイク。2と3でやったこともやり直し。書き換えたのは毎回変わる部分なので解読頑張って。