PyQt で画像のビューアを作る 9 version 5
:追加された部分
:削除された部分
(差分が大きい場合、文字単位では表示しません)
PyQt で画像のビューアを作る 9
- Y軸反転の実験
・最初のポイントを右上がりになるように設定する
widgetの大きさによるが、
(0,0)->(0,270)
(255,255)->(255,15) になる、多分
・yのレンジ 0~255 は、270~15 に反転する
描画はこのままで良いが、変換テーブルは反転を戻す
各値を -(a-270) とすれば良い
> newList = [ -1*( i-270) for i in list]
- マウス操作改善
①フラグはキープレスで立てる
②端点の■は常時表示してマウスムーブは無視
③マウストラッキングもはずす
④右クリックで両端点の同時ドラッグとする
- ベジェカーブのリセット機能(シフトキーとか)
- ベジェの描画をやめて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 )
```
---
- トーンカーブをチャンネルごとに適用する
①全て②rのみ③gのみ④bのみ⑤rg⑥rb⑦gb
以上7種類、ルーチンを7種類作った方が速いと思う
とりあえずは独立したラジオを三つ作って分岐させるのが簡単か?
- 画像種類毎に
RGB
CMYK
YCbCr (Y:輝度、Cb:青の色差、Cr:赤の色差) これやってみたい
HSV
```
im = Image.open(sys.argv[1])
im = im.convert("YCbCr")
yy, cb, cr = im.split()
yy = ImageOps.equalize(yy);
im = Image.merge("YCbCr", (yy, cb, cr))
im = im.convert("RGB")
im.show()
```
- ヒストグラム表示してみる
https://qiita.com/pashango2/items/145d858eff3c505c100a
pillow
his=img.histgram()
print(his)
とりあえずコンソールでプリントしてみよう
- 各バンドを連続して返すため、RGBモードの場合は256 x 3=768個の要素を返します。
最初に最大値設定するか??
平均値を求めてその2倍まで表示、2倍以上の値は2倍に書き換える
最大値も求めておく必要?
h = mean(his) # 平均
m = max(his) # 最大
```
his=img.histgram()
painter.setPen( Qt.red )
for i in range(255):
painter.drawPoint( QPointf( i , his[i] )
painter.setPen( Qt.green )
for i in range(256,511)
painter.drawPoint( QPointf( i-256 , his[i] )
painter.setPen( Qt.blue )
for i in range(512,767)
painter.drawPoint( QPointf( i-512 , his[i] )
```
- ヒストグラム平坦化してみる
- ホワイトバランス出来ないかな??
- scipy 補間ここを読んでもう一回やってみよう
https://qiita.com/maskot1977/items/2a55c087974d0ac5e843
PyQtGraph
いつか試してみるか?
http://www.pyqtgraph.org/
----
→ [目次に戻る](https://mimemo.io/m/QORbW4qkvOoda0N)
- Y軸反転の実験
・最初のポイントを右上がりになるように設定する
widgetの大きさによるが、
(0,0)->(0,270)
(255,255)->(255,15) になる、多分
・yのレンジ 0~255 は、270~15 に反転する
描画はこのままで良いが、変換テーブルは反転を戻す
各値を -(a-270) とすれば良い
newList = [ -1*( i-270) for i in list]
- マウス操作改善
①フラグはキープレスで立てる
②端点の■は常時表示してマウスムーブは無視
③マウストラッキングもはずす
④右クリックで両端点の同時ドラッグとする - ベジェカーブのリセット機能(シフトキーとか)
- ベジェの描画をやめて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 )
- トーンカーブをチャンネルごとに適用する
①全て②rのみ③gのみ④bのみ⑤rg⑥rb⑦gb
以上7種類、ルーチンを7種類作った方が速いと思う
とりあえずは独立したラジオを三つ作って分岐させるのが簡単か? - 画像種類毎に
RGB
CMYK
YCbCr (Y:輝度、Cb:青の色差、Cr:赤の色差) これやってみたい
HSV
im = Image.open(sys.argv[1])
im = im.convert("YCbCr")
yy, cb, cr = im.split()
yy = ImageOps.equalize(yy);
im = Image.merge("YCbCr", (yy, cb, cr))
im = im.convert("RGB")
im.show()
-
ヒストグラム表示してみる
https://qiita.com/pashango2/items/145d858eff3c505c100a
pillow
his=img.histgram()
print(his)
とりあえずコンソールでプリントしてみよう -
各バンドを連続して返すため、RGBモードの場合は256 x 3=768個の要素を返します。
最初に最大値設定するか??
平均値を求めてその2倍まで表示、2倍以上の値は2倍に書き換える
最大値も求めておく必要?
h = mean(his) # 平均
m = max(his) # 最大
his=img.histgram()
painter.setPen( Qt.red )
for i in range(255):
painter.drawPoint( QPointf( i , his[i] )
painter.setPen( Qt.green )
for i in range(256,511)
painter.drawPoint( QPointf( i-256 , his[i] )
painter.setPen( Qt.blue )
for i in range(512,767)
painter.drawPoint( QPointf( i-512 , his[i] )
-
ヒストグラム平坦化してみる
-
ホワイトバランス出来ないかな??
-
scipy 補間ここを読んでもう一回やってみよう
https://qiita.com/maskot1977/items/2a55c087974d0ac5e843
PyQtGraph
いつか試してみるか?
http://www.pyqtgraph.org/
→ 目次に戻る