Python
8bitビットマップ(bmp)ファイルを1bit深度で2値化する
OpenCVで2値化すると、8bit深度データのまま(0/255)で保存される。1bit深度で保存するにはPILを使うしかないようだ。
白(255)以外のデータはすべて黒(0)とする、これは下記で実現できた(pointの中の構文は実はあまりよくわかってない)
from PIL import Image
import os
fname = "../../Desktop/AB.bmp";
a=Image.open(fname);
b=a.convert("L");
c=b.point(lambda x: 255 if x >= 254 else 0);
sname = os.path.splitext(fname)[0]+"-bit1.bmp";
c.convert("1").save(sname);
読み込み後、最初にグレースケールにしてあげる必要がある
MicroPythonとnumpy
Pythonつかうなら、Numpy?数値の演算や配列などでPythonで書く時、必ずこれを書く
import numpy as np
MicroPythonでもできるんでしょ?的な感じだったが、ググって読んでも読んでも難解・・コンピアルするとかビルドするとか、Linuxでとか書いてある。だから、Pythonこういうのが嫌いなんだけど。
最終的に、ビルド済みリリース版がここにあった。。picoもどきには、RPI_PICO.uf2を入れてみたらよかったようだ。これは、前回MicroPythonを入れる時に誘導されたファイルが RPI_PICO-20240222-v1.22.2.uf2 だったから、きっとこれだろうということだったわけだが、正解の模様
ラズパイPicoもどき
ElecrowのページでMicroPythonと記載があって安価だったので、買ってみた。YD-RP2040と書かれていてVCC-GND.COMとか、なにそれ。Picoと違うところは、WS8212が載っているところ?、Pico持っているわけではないし、ラズパイというものを使っているわけではないので、実はあまりよく知らない。安かったというのが一番の理由か
Macでシリアル通信
MacOSでシリアル通信したくなる。実際、マイコンボードなどを使ってプログラムをドロップすると勝手にリセットして接続が切られるため、勝手に外されたというエラーが表示され気持ちが悪い、またそのダイアログは消さないと自動で消えてくれないので、使い勝手は良くない。しかし、シリアル通信データを取得したいという要求は少なからずある。
terminal(ターミナル)を起動し、デバイスを見つける。
$ ls -l /dev/tty.*
crw-rw-rw- 1 root wheel 0x13000000 3 2 20:53 /dev/tty.BLTH
crw-rw-rw- 1 root wheel 0x13000002 3 2 22:25 /dev/tty.Bluetooth-Incoming-Port
crw-rw-rw- 1 root wheel 0x13000004 3 20 18:55 /dev/tty.usbmodem14201
このusbmodemなんちゃらが接続されたマイコンボードである。これに対して、"cu"コマンドで接続すればいいようだ。
またspyderが起動しなくなった(Mac)
ちょっとしばらくいじってなくて、OSアップデートもあったけど、またAnacondaからSpyderが起動しなくなった。一度目は起動したが、Terminalで
conda update conda
をやったところ、それ以降起動しなくなった。。Anacondaプロンプトにエラーが出される(****はMacのユーザー名)
2値のBMPモノクロ画像を作成する
あることで、2値画像を作る必要があった。ここで言う2値画像とは、白黒のbmpファイルで、bit深さが1のものである。
openCVでbmpファイルを2値で保存すると、値が0と255だけになった絵になり見た目はできているが、これだと、後処理で使いにくかった。1と0の2つの値からなる、1bit=1画素のbmpファイルにしたい。
どうも、openCVのsaveではそれはできなさそうだった。pillowライブラリを使うと可能。
pandaのvaluesは非推奨?
pandasでcsvを読み込んだ後、値をfloatする方法がわからなかったけど、ここにこんなことが書いてあった。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataF…
警告
代わりにDataFrame.to_numpy()を使用することをお勧めします。
to_numpyを使えば、dtypeを指定できる
S11のピークを見つける
いまひとつ、うまくやりたいことに到達しないんですがそれは自己の「ボキャブラリのなさ」ということなんでしょう、きっと
ピークを見つけるのに、scipyを利用する方法があるようです。前も調べたことがあるのだが、わかりにくいなぁ。低いピーク(谷)を見つけるのにargrelmin 、山を見つけるのに argrelmax 。引数のorderは、検出する範囲を指定するみたい。しかし、sパラのデータはログで掃引しているので下の方と上の方とでピークの位置をきちっと判定できない。ログでも判定できたらいいのにね、でもどういうアルゴリズムになるのか想像できないですけどね。
scikit-rfのデータを抽出する
s_magなどデータプロットは綺麗にできるようになったが、データをCSVなんかで保存できないかということを考えていた。Spyderで変数エクスプローラを見ると構造体の中にデータが入っているように見えて、そこを選択してエクセルとか貼り付けることはやっていた。
fが周波数、sが3D配列で見えていると思われる。