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

2019/07/05 10:48 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
hogePyQt で画像のビューアを作る 9
hoge
- マウス操作改善
①フラグはキープレスで立てる
②端点の■は常時表示してマウスムーブは無視
③マウストラッキングもはずす
④右クリックで両端点の同時ドラッグとする
- ベジェカーブのリセット機能(シフトキーとか)
- ベジェの描画をやめてLUTの描画だけにしたらどうかな?少し軽くないか?
- マスクをかけれないので改善(わかりづらいので書き直した方が良いような気がする)
- LUT改善
第一段階
 重複のxはパスして欠落したLUTを作る(256はないことになる)
第二段階
 x値をインデクスとしたy値だけのリストをLUTを元に新たに作る
 その際に欠落したxは前後のインデクスの平均で補完して、完全に256個のリストにする
 欠落が複数連続していても一律で平均値補間とする(傾斜はつけない)
欠落した数が多いほど信頼性は低いが、前後のy値が同じなら問題ない
前後のY値の幅が大きいときは誤差が大きいことになる
でも平均値で補完しておけばほぼ誤差はないと思う

```
temp=[]
self.LUT=[] # これをグローバルにしよう

        #  first step -----------------
        for l in range(256):
            t=l*tt
            x = (1-t)**3*p1[0] + 3*(1-t)**2*t*p2[0] + 3*(1-t)*t**2*p3[0] + t**3*p4[0]
            if round(x)==last_x:
                continue
            y = (1-t)**3*p1[1] + 3*(1-t)**2*t*p2[1] + 3*(1-t)*t**2*p3[1] + t**3*p4[1]
            last_x=round(x)
            temp.append([ last_x , round(y)])
        #  second step -----------------
        ii=0 # index of temp ( made by first step )
        self.LUT.clear()
        for i in range(256) :
            if l[ii][0] == i :
                self.LUT.append( temp[ii][1] ) # set y-value
                ii += 1
            else: 
                self.LUT.append( round((temp[ii][1] + temp[ii-1][1])/2) ) # set y-value
        print( len(self.LUT) , self.LUT )
```

----
→ [目次に戻る](https://mimemo.io/m/QORbW4qkvOoda0N)



      
  • マウス操作改善
    ①フラグはキープレスで立てる
    ②端点の■は常時表示してマウスムーブは無視
    ③マウストラッキングもはずす
    ④右クリックで両端点の同時ドラッグとする
  • ベジェカーブのリセット機能(シフトキーとか)
  • ベジェの描画をやめてLUTの描画だけにしたらどうかな?少し軽くないか?
  • マスクをかけれないので改善(わかりづらいので書き直した方が良いような気がする)
  • LUT改善
    第一段階
     重複のxはパスして欠落したLUTを作る(256はないことになる)
    第二段階
     x値をインデクスとしたy値だけのリストをLUTを元に新たに作る
     その際に欠落したxは前後のインデクスの平均で補完して、完全に256個のリストにする
     欠落が複数連続していても一律で平均値補間とする(傾斜はつけない)
    欠落した数が多いほど信頼性は低いが、前後のy値が同じなら問題ない
    前後のY値の幅が大きいときは誤差が大きいことになる
    でも平均値で補完しておけばほぼ誤差はないと思う
temp=[]
self.LUT=[] # これをグローバルにしよう

        #  first step -----------------
        for l in range(256):
            t=l*tt
            x = (1-t)**3*p1[0] + 3*(1-t)**2*t*p2[0] + 3*(1-t)*t**2*p3[0] + t**3*p4[0]
            if round(x)==last_x:
                continue
            y = (1-t)**3*p1[1] + 3*(1-t)**2*t*p2[1] + 3*(1-t)*t**2*p3[1] + t**3*p4[1]
            last_x=round(x)
            temp.append([ last_x , round(y)])
        #  second step -----------------
        ii=0 # index of temp ( made by first step )
        self.LUT.clear()
        for i in range(256) :
            if l[ii][0] == i :
                self.LUT.append( temp[ii][1] ) # set y-value
                ii += 1
            else: 
                self.LUT.append( round((temp[ii][1] + temp[ii-1][1])/2) ) # set y-value
        print( len(self.LUT) , self.LUT )

→ 目次に戻る