0 PyQt で画像のビューアを作る 9

  • 190705 金曜夜
    やりたいことほぼできた
    UIも変えてヒストグラム表示二つを入れこんで見れるようにした
  • 190706 土曜
    変換後のヒストグラム表示の動作がおかしい、直そうとしてるけどうまく行かない
  • 190707 日曜
    保存ルーチン、仕組みを書き直し、ちょっと時間かかったけどまあまあいけてる
    実用出来るようになった、以前の自作物よりは遙かに良いっす

ベジェカーブ改善

  • LUTの欠落改善
    結構悩んだ末に書いたコードは極めてシンプルになった
    まあそういうものなんだろなあ
    xとインデクスは等しいからやめてyだけにもしたのでいっそうシンプル
    一般的なベジェカーブの関数化ってことではないが、0-256の整数データを作るという意味ではかなり正確に出来てると思う
  • 欠落したx値については、前後のt値をさらに分割して行けばいずれ見つかると思うけど、そうやって計算したy値といまのやり方のy値は、ずれても1だと思う
  • x値が飛ぶって事は、傾きが0に近いって事だから、y値は前後と変わらない可能性が高い
    コードは前後の平均を取って四捨五入したけど、前か後ろか、どっちかの値をそもまま適用しても良かったと思う
  • Y軸反転できた
    描画系の座標はそのままにしておいて、テーブルを作るときに反転させることにした
    反転するから基本は絶対値が変わる、この辺りは未だに直感的な理解は難しいな
  • 画素変換はチャンネル毎にしてみた、良いわ
  • その他
    右ドラッグでベジェの二つの端点を同時に移動するようにした、結構良い!
    カーブのリセット機能をつけた
    ベジェの計算をマウスリリース時では無くムーヴ時に変えた
    負担は大きくなったがそこそこ動いてる( ´∀`)

ヒストグラム表示

  • pillow の image.histogram() で簡単にイけた
    RGB毎に256個が一列で単純に来るので、表示するときに三色に切り分ければいい
  • ドットで描画したが見づらいのでラインを引くことにしてみた
    ドットは繋がらない、当然かもしれないけど、棒グラフだと塗りつぶされるから折れ線しかないかな
  • しかし、変換後の表示はこれだとうまくいかない
    変換前の画像ならドットのYは飛ぶがx値は連続している
    変換後はそもそもx値が不連続になるのでラインを引いてしまうと山にならずに大きなギザギザになってしまう
    この部分もLUTと同じで座標変換が必要で、まだ頭がついて行けてなくて対応できてない┐('д')┌
  • ヒストグラムの変換(レベル補正)はまだ、見れるだけでもすごく良いわ

リスト内包表記

  • 今回のプログラムはこれのおかげでかなり進んだ
    LUTの作成はこれをフルに活用している
    for で実装すれば良いんだけど一行で書けてしまうし、最初は可読性が低いと思ったけど慣れたらそうでもない
    まあ慣れなきゃイケないんだが
  • 画像のピクセル変換は全てこれで書けると思う
    調べた限りでは普通のforよりも速いらしい
    これは使うべき技術ですよね、もっと勉強したいっす
    改めてpythonに感動した、python固有ってことでもなさそうだけど

ToDo

  • トーンカーブでRGB以外にも対応する
  • ベジェの描画をドットにしてみる(どっちが軽いかな?)
    考えたら描画してるんだからQtは(x,y)を知ってるんだろうな
    関数として提供してくれたらいいのに
  • ヒストグラム表示を正確に
  • ヒストグラム変換実装(レベル補正)
  • pillow の部分を Qt で書く
    データを直接いじるようになったので、pillowを使うメリットが薄れているような???
    Qimage だとデータのポインタを取得できるので直接いじれそう
  • 色調補正を書きたい
    ホワイトポイント系の処理、ロジックがわかれば書けそうなんだけど
  • もろもろ
    scipy 補間ここを読んでもう一回やってみよう
    https://qiita.com/maskot1977/items/2a55c087974d0ac5e843
    PyQtGraph、いつか試してみるか?
    http://www.pyqtgraph.org/
    QImage bit 直接データをいじれる
    https://qiita.com/kanryu/items/89812b362dfd581a4c10
0

メモを他の人に見せる

このメモを見せたい人に、このURL(今開いているページのURLです)を教えてあげてください

コメント(0)

  • someone

  • someone