堕天使の煉獄
2017-02
08
05:35:28
要らないぽ?
先日の続き~
とりあえずでけたー。
上が写真屋で同じパラメータでレベル補正かけてるの。
下半分が自前の。
いやあ、苦労した。
何が一番苦労したっていうと、対数ってなんだ、食い物ですか? って感じでレベル補正のパラメータ指定の▲三つのうち、真ん中のやつ。これが対数スケールで9.99~0.10の値をとるのですが、0~255の値をこれと相互にやりとりする方法がさぱーり。
学生時代、とっとと専門学校いくべーと決めたので、わざわざ面倒なことするひつようもなかんべと、選択は文系のほうに行ったので、高校時代に代数幾何とかやってないんですよね。
対数スケールとかその辺ググってみると、塩分濃度がどうだとか、いかにも大学受験向けっぽい数学のサイトがぽこぽこ。
log10とかlog2とか見聞きしたことはあっても、実際になにかといえばまったく存じ上げませんっていう感じのところからのスタートラインなので、なにをどうすりゃいいのか判らなすぎw
知識としてはmath.hのなかのpow, sqrt, exp, log, log10とか関数あるの知ってるけど、実際には使ったことなんて数えるほど。sin,cos,tanあたりに比べると、あんまし使用する機会がないぽ。
いろいろと脳みそねじ切れそうになりながらようやく
double gamma = glib::divD(std::log(relativeCenter), std::log(0.5));
relativeCenterは真ん中の▲の位置の割合で
relativeCenter = (center - min) / (max - min)な感じ
どうも最後のstd::log(0.5)てのが、真ん中の127を1.0と基準値にするための定数っぽい??
いまいちこの式がなにをやってるのかわからんち。logってなんなのかいまだにちよくわかってないw
とりあえずこれで、スライダを動かして、スライダの位置0~255から9.99~0.10の対数表示に変換は出来る用になったんですけど。
今度はその逆、スピンボックスに直接9.99~0.10の値を入力したときに、スライダ上の位置0~255に直す方法がさぱーり。
いろいろあーでもないこーでもないとやってるうちに、なぜか1.0以下の時はなんかちゃんと動いてるんだけど1.0以上になるとスライダの▲が遠くに吹っ飛んでいってしまふ_| ̄|○
さらにはよーく値をみてみると、ちゃんと動いているようで0.01あたりになるとスライダの位置と値が微妙に少しづつずれていってる……。
これは実数つかってるので、計算上の誤差がでてるのかな?? 対数スケールなのでちょっとの誤差があとあとおおきくなっちゃったりするんだろうか? とか。
で、結局ようやく出来たのが
int pos = (max - min)) / std::pow(2, gamma) + min;
posはスライダのcenterの位置0~255の値。
うーん。
対数で使う冪上の上の数字。これがなんか掛けるときは足す、割るときは引くとかこの辺なんか基本っぽいんですが。
std::pow(2, v)てのが、9.99~0.10の対数スケールがlog10(常用対数)とかいうやつで、そこからもとの数字に戻すのに冪上でなんか掛けなきゃいけないというのはわかったものの、ここでなんで2という数字が出てくるのかさぱーり。
そんなこんなで、とりあえずちゃんと動いてるんだけど、いまいちよくわかってないw
まあ、動けば良いんだ動けば(ぉ
とりあえず、右端が0.10以下にならないのは、対数軸で0は存在しない(そんな気小さくなっても近似だけで0にはならない)ので0.10で切り捨ててるのかーてのと、中心の1.0も実際は小数部で1.01とか9.98とかに普通になるのだけど、1.0=そのまま変更無し(補正無し)の意味なので、ある程度の範囲ないは1.0と見なす(いまのとことりあえず0.98~1.02の場合は1.0扱いにしてみたところ、写真屋のレベル補正のガンマ補正値のとこもそんな感じになってるっぽい)とか、いろいろ普段使ってても気づかなかったし、気にもとめなかった数字の意味とかが見えてきたのはちょっと面白かったけど。
しかしまあ、大学受験とかやってるひとはこんなんやってんだなぁとおもうと大変だなぁとか。コピペできない画像で置いてある類の複雑な数式とかみるだけで気分が悪くなっちゃいますw
そんな感じで数学という魔物に苦労した……。
それ以外は特にそれほど悩むところもなく。
あとは実際に画像補正かけたときの速度はどうなるかなーとおもっていたのだけども。
……結構重いな。
600*600pixぐらいの画像でテスト。
dstTable は事前に輝度0~255に対してにガンマ補正値で補正掛けた値のテーブル。
time= 214ms debug
time= 48ms release
for (int y=0; y<height; ++y) {
for (int x=0; x<width; ++x) {
QColor cr = img.pixelColor(x, y);
cr.setRed(dstTable[cr.red()]);
cr.setGreen(dstTable[cr.green()]);
cr.setBlue(dstTable[cr.blue()]);
img.setPixelColor(x, y, cr);
}
}
QImageのピクセル操作関係はこんな感じにやるらしいのだけども。
このQColorがなんか糞重そう。
毎回各色毎にセットしてそれをさらにsetPixelColorでセット。なんか生成&コピー回数多そう。
もうちょっとピクセル直接扱える感じの手段ないのかとドキュメントを読む。
time= 45 debug
time= 13 release
for (int y=0; y<height; ++y) {
for (int x=0; x<width; ++x) {
QRgb cr = img.pixel(x, y);
img.setPixel(x, y, qRgb(dstTable[qRed(cr)], dstTable[qGreen(cr)], dstTable[qBlue(cr)]));
}
}
QRgbてのは0xRRGGBBで入ってるuint型の数値らしい。
qRed,qGreenとかのはまあ調べるまでもなくシフトして取り出すマクロなんだろうなと。
qRgb(r,g,b)てのもシフトで結合するマクロかな。
と、こんなわかりやすいものちゃんとあるんじゃないかということで試してみるとこれで4倍ぐらい速くなる。
やっぱシフト演算はやい。
リリースビルドだと画像一枚の補正に13ms。まあ十分じゃないかと。
なにげにstd::array使ってるのでdebugとreleaseの差もなかり変わってきてるんじゃないかと。std::arrayはdebugだと数10倍遅くなるらしいので。releaseだと生配列とほぼ同等なんだとか。
んでもって……出力レベル(入力レベルの下についてる奴)って要るのかな? といまさらにw
てかこれ、いままで写真屋でもレベル補正は数多く使ってきた物の、出力レベルは触る機会まったくなかったところで。いままできっとハイパス、ローパスなんだろうとおもってたんですけど、違う物だったんやね。といまごろ気づいたり。
これ用途としては特定の印刷時にこのレベル以上の黒は使いたくないとかこのレベル以上の白は使わないとか、そういう限られた局面に使う感じで、普通はあんまし使わないものらしいですね。
てことは要らなかったかな、コレ……。
しかしこのての画像処理、今時なら普通はOpenCVとか使うんだろうけども。
でもアレも結局UIは自前で作らなきゃいけないし、ver2とver3系がいまはどっちつかうべきなのかーとか情報の量とか、あれがないこれがないとかverの差異で結構面倒そうなのと、QTだと結構導入もめんどくさそうってのもあったりして。
そんでもって、一気にいろいろと出来る事増えるんだろうけど、逆に出来る事増えすぎて混乱しそうってのもあるかな。
なのでちょっと機能足す分には自前でガリガリ書いたほうがシンプルに済むからいいかなとか。
これで後は、書庫内編集ツールでTODOとして残ってるのは……
書庫内に個別ファイルを追加する機能……
zip以外の書庫→zip書庫化を自前でやってUnifyZip使わなくても済む用に。
の二点なんだけども。
二つ目のほうは、ちょろっと最初期の頃に組んだやつ流用して、とりあえず7-zip32.dllとunrar32.dll使って解凍まではまたやってみたんだけども。
そしてやっぱ統合アーカイバ系DLLは使いにくい……。痒いところに全く手が届かないし処理も遅いし。
やっぱファイルにしか解凍出来ないってのがキツイなこれ。
テンポラリのフォルダつくってーとか、自分しか使わないツールならまあいいんだけど、公開しようとか考えると、フォルダを作る位置とかで不味い場所に作っちゃった場合とか、いろいろ考慮する点も出てきたりしていろいろとめんどくさい。
さらには展開後フィルタリングとかそういうのも付けてったりとかいろいろと処理が多い。
もうUnifyZipにおまかせでええやん……という気になる。
一つ目のファイル追加は、やっぱ欲しい気もするのだけど。
リスト追加後、追加ファイルも一括リネームとかの対象に入ることになるのだけど、あとから外部ファイルが変更されたらとか、結構これも考慮する点が多いぽ。そして書庫内リストのデータクラスの派生で外部ファイル用のを作るべきか……フラグ追加するだけで管理しちゃうか。
そしてその辺組んだとしたら、空の書庫ファイルからローカルのファイル詰め込んで新しい書庫を作成するってのも普通にできるわけだけど、そうなると上のzip以外の書庫→zip書庫化の処理もやっぱやっちゃおうかなという気もでてくる。
今のところrarとか解凍まで出来てるのだから、あとは解凍されたファイル群をまとめてzip書庫化の流れまでファイル追加機能付けたらそこまで見通しが立ってしまうんだよなぁ。
むーん。
とりあえずでけたー。
上が写真屋で同じパラメータでレベル補正かけてるの。
下半分が自前の。
いやあ、苦労した。
何が一番苦労したっていうと、対数ってなんだ、食い物ですか? って感じでレベル補正のパラメータ指定の▲三つのうち、真ん中のやつ。これが対数スケールで9.99~0.10の値をとるのですが、0~255の値をこれと相互にやりとりする方法がさぱーり。
学生時代、とっとと専門学校いくべーと決めたので、わざわざ面倒なことするひつようもなかんべと、選択は文系のほうに行ったので、高校時代に代数幾何とかやってないんですよね。
対数スケールとかその辺ググってみると、塩分濃度がどうだとか、いかにも大学受験向けっぽい数学のサイトがぽこぽこ。
log10とかlog2とか見聞きしたことはあっても、実際になにかといえばまったく存じ上げませんっていう感じのところからのスタートラインなので、なにをどうすりゃいいのか判らなすぎw
知識としてはmath.hのなかのpow, sqrt, exp, log, log10とか関数あるの知ってるけど、実際には使ったことなんて数えるほど。sin,cos,tanあたりに比べると、あんまし使用する機会がないぽ。
いろいろと脳みそねじ切れそうになりながらようやく
double gamma = glib::divD(std::log(relativeCenter), std::log(0.5));
relativeCenterは真ん中の▲の位置の割合で
relativeCenter = (center - min) / (max - min)な感じ
どうも最後のstd::log(0.5)てのが、真ん中の127を1.0と基準値にするための定数っぽい??
いまいちこの式がなにをやってるのかわからんち。logってなんなのかいまだにちよくわかってないw
とりあえずこれで、スライダを動かして、スライダの位置0~255から9.99~0.10の対数表示に変換は出来る用になったんですけど。
今度はその逆、スピンボックスに直接9.99~0.10の値を入力したときに、スライダ上の位置0~255に直す方法がさぱーり。
いろいろあーでもないこーでもないとやってるうちに、なぜか1.0以下の時はなんかちゃんと動いてるんだけど1.0以上になるとスライダの▲が遠くに吹っ飛んでいってしまふ_| ̄|○
さらにはよーく値をみてみると、ちゃんと動いているようで0.01あたりになるとスライダの位置と値が微妙に少しづつずれていってる……。
これは実数つかってるので、計算上の誤差がでてるのかな?? 対数スケールなのでちょっとの誤差があとあとおおきくなっちゃったりするんだろうか? とか。
で、結局ようやく出来たのが
int pos = (max - min)) / std::pow(2, gamma) + min;
posはスライダのcenterの位置0~255の値。
うーん。
対数で使う冪上の上の数字。これがなんか掛けるときは足す、割るときは引くとかこの辺なんか基本っぽいんですが。
std::pow(2, v)てのが、9.99~0.10の対数スケールがlog10(常用対数)とかいうやつで、そこからもとの数字に戻すのに冪上でなんか掛けなきゃいけないというのはわかったものの、ここでなんで2という数字が出てくるのかさぱーり。
そんなこんなで、とりあえずちゃんと動いてるんだけど、いまいちよくわかってないw
まあ、動けば良いんだ動けば(ぉ
とりあえず、右端が0.10以下にならないのは、対数軸で0は存在しない(そんな気小さくなっても近似だけで0にはならない)ので0.10で切り捨ててるのかーてのと、中心の1.0も実際は小数部で1.01とか9.98とかに普通になるのだけど、1.0=そのまま変更無し(補正無し)の意味なので、ある程度の範囲ないは1.0と見なす(いまのとことりあえず0.98~1.02の場合は1.0扱いにしてみたところ、写真屋のレベル補正のガンマ補正値のとこもそんな感じになってるっぽい)とか、いろいろ普段使ってても気づかなかったし、気にもとめなかった数字の意味とかが見えてきたのはちょっと面白かったけど。
しかしまあ、大学受験とかやってるひとはこんなんやってんだなぁとおもうと大変だなぁとか。コピペできない画像で置いてある類の複雑な数式とかみるだけで気分が悪くなっちゃいますw
そんな感じで数学という魔物に苦労した……。
それ以外は特にそれほど悩むところもなく。
あとは実際に画像補正かけたときの速度はどうなるかなーとおもっていたのだけども。
……結構重いな。
600*600pixぐらいの画像でテスト。
dstTable は事前に輝度0~255に対してにガンマ補正値で補正掛けた値のテーブル。
time= 214ms debug
time= 48ms release
for (int y=0; y<height; ++y) {
for (int x=0; x<width; ++x) {
QColor cr = img.pixelColor(x, y);
cr.setRed(dstTable[cr.red()]);
cr.setGreen(dstTable[cr.green()]);
cr.setBlue(dstTable[cr.blue()]);
img.setPixelColor(x, y, cr);
}
}
QImageのピクセル操作関係はこんな感じにやるらしいのだけども。
このQColorがなんか糞重そう。
毎回各色毎にセットしてそれをさらにsetPixelColorでセット。なんか生成&コピー回数多そう。
もうちょっとピクセル直接扱える感じの手段ないのかとドキュメントを読む。
time= 45 debug
time= 13 release
for (int y=0; y<height; ++y) {
for (int x=0; x<width; ++x) {
QRgb cr = img.pixel(x, y);
img.setPixel(x, y, qRgb(dstTable[qRed(cr)], dstTable[qGreen(cr)], dstTable[qBlue(cr)]));
}
}
QRgbてのは0xRRGGBBで入ってるuint型の数値らしい。
qRed,qGreenとかのはまあ調べるまでもなくシフトして取り出すマクロなんだろうなと。
qRgb(r,g,b)てのもシフトで結合するマクロかな。
と、こんなわかりやすいものちゃんとあるんじゃないかということで試してみるとこれで4倍ぐらい速くなる。
やっぱシフト演算はやい。
リリースビルドだと画像一枚の補正に13ms。まあ十分じゃないかと。
なにげにstd::array使ってるのでdebugとreleaseの差もなかり変わってきてるんじゃないかと。std::arrayはdebugだと数10倍遅くなるらしいので。releaseだと生配列とほぼ同等なんだとか。
んでもって……出力レベル(入力レベルの下についてる奴)って要るのかな? といまさらにw
てかこれ、いままで写真屋でもレベル補正は数多く使ってきた物の、出力レベルは触る機会まったくなかったところで。いままできっとハイパス、ローパスなんだろうとおもってたんですけど、違う物だったんやね。といまごろ気づいたり。
これ用途としては特定の印刷時にこのレベル以上の黒は使いたくないとかこのレベル以上の白は使わないとか、そういう限られた局面に使う感じで、普通はあんまし使わないものらしいですね。
てことは要らなかったかな、コレ……。
しかしこのての画像処理、今時なら普通はOpenCVとか使うんだろうけども。
でもアレも結局UIは自前で作らなきゃいけないし、ver2とver3系がいまはどっちつかうべきなのかーとか情報の量とか、あれがないこれがないとかverの差異で結構面倒そうなのと、QTだと結構導入もめんどくさそうってのもあったりして。
そんでもって、一気にいろいろと出来る事増えるんだろうけど、逆に出来る事増えすぎて混乱しそうってのもあるかな。
なのでちょっと機能足す分には自前でガリガリ書いたほうがシンプルに済むからいいかなとか。
これで後は、書庫内編集ツールでTODOとして残ってるのは……
書庫内に個別ファイルを追加する機能……
zip以外の書庫→zip書庫化を自前でやってUnifyZip使わなくても済む用に。
の二点なんだけども。
二つ目のほうは、ちょろっと最初期の頃に組んだやつ流用して、とりあえず7-zip32.dllとunrar32.dll使って解凍まではまたやってみたんだけども。
そしてやっぱ統合アーカイバ系DLLは使いにくい……。痒いところに全く手が届かないし処理も遅いし。
やっぱファイルにしか解凍出来ないってのがキツイなこれ。
テンポラリのフォルダつくってーとか、自分しか使わないツールならまあいいんだけど、公開しようとか考えると、フォルダを作る位置とかで不味い場所に作っちゃった場合とか、いろいろ考慮する点も出てきたりしていろいろとめんどくさい。
さらには展開後フィルタリングとかそういうのも付けてったりとかいろいろと処理が多い。
もうUnifyZipにおまかせでええやん……という気になる。
一つ目のファイル追加は、やっぱ欲しい気もするのだけど。
リスト追加後、追加ファイルも一括リネームとかの対象に入ることになるのだけど、あとから外部ファイルが変更されたらとか、結構これも考慮する点が多いぽ。そして書庫内リストのデータクラスの派生で外部ファイル用のを作るべきか……フラグ追加するだけで管理しちゃうか。
そしてその辺組んだとしたら、空の書庫ファイルからローカルのファイル詰め込んで新しい書庫を作成するってのも普通にできるわけだけど、そうなると上のzip以外の書庫→zip書庫化の処理もやっぱやっちゃおうかなという気もでてくる。
今のところrarとか解凍まで出来てるのだから、あとは解凍されたファイル群をまとめてzip書庫化の流れまでファイル追加機能付けたらそこまで見通しが立ってしまうんだよなぁ。
むーん。
Sun
Mon
Tue
Wed
Thu
Fri
Sat
01
02
03
■
■
ずーんと
04
05
06
■
■
相変わらず横道人生
07
08
■
■
要らないぽ?
09
10
■
■
とりあえず切りの良いところで
11
[建国記念の日]
12
13
14
■
■
見つけちゃった物だから
15
16
17
18
19
20
21
22
23
24
25
26
■
■
予定構想妄想
27
28
■
■
いろいろ変わりまくってるぽ
total:2080620 t:82 y:2908
■記事タイトル■
■年度別リスト■
2024年
2024年12月(0)2024年11月(0)
2024年10月(1)
2024年09月(2)
2024年08月(1)
2024年07月(1)
2024年06月(5)
2024年05月(2)
2024年04月(1)
2024年03月(6)
2024年02月(4)
2024年01月(3)
2023年
2023年12月(3)2023年11月(1)
2023年10月(2)
2023年09月(3)
2023年08月(3)
2023年07月(3)
2023年06月(7)
2023年05月(8)
2023年04月(2)
2023年03月(1)
2023年02月(2)
2023年01月(3)
2022年
2022年12月(4)2022年11月(3)
2022年10月(1)
2022年09月(3)
2022年08月(3)
2022年07月(2)
2022年06月(1)
2022年05月(3)
2022年04月(2)
2022年03月(2)
2022年02月(1)
2022年01月(6)
2021年
2021年12月(8)2021年11月(3)
2021年10月(4)
2021年09月(6)
2021年08月(2)
2021年07月(1)
2021年06月(3)
2021年05月(2)
2021年04月(2)
2021年03月(3)
2021年02月(1)
2021年01月(4)
2020年
2020年12月(3)2020年11月(7)
2020年10月(2)
2020年09月(3)
2020年08月(1)
2020年07月(3)
2020年06月(7)
2020年05月(5)
2020年04月(8)
2020年03月(4)
2020年02月(2)
2020年01月(4)
2019年
2019年12月(1)2019年11月(1)
2019年10月(2)
2019年09月(1)
2019年08月(3)
2019年07月(2)
2019年06月(2)
2019年05月(2)
2019年04月(4)
2019年03月(1)
2019年02月(7)
2019年01月(1)
2018年
2018年12月(1)2018年11月(1)
2018年10月(5)
2018年09月(1)
2018年08月(5)
2018年07月(1)
2018年06月(1)
2018年05月(1)
2018年04月(2)
2018年03月(2)
2018年02月(1)
2018年01月(1)
2017年
2017年12月(2)2017年11月(1)
2017年10月(2)
2017年09月(5)
2017年08月(8)
2017年07月(2)
2017年06月(1)
2017年05月(1)
2017年04月(3)
2017年03月(5)
2017年02月(7)
2017年01月(8)
2016年
2016年12月(7)2016年11月(2)
2016年10月(3)
2016年09月(7)
2016年08月(8)
2016年07月(10)
2016年06月(17)
2016年05月(6)
2016年04月(8)
2016年03月(10)
2016年02月(5)
2016年01月(10)
2015年
2015年12月(7)2015年11月(7)
2015年10月(13)
2015年09月(7)
2015年08月(7)
2015年07月(5)
2015年06月(4)
2015年05月(5)
2015年04月(2)
2015年03月(4)
2015年02月(1)
2015年01月(7)
2014年
2014年12月(12)2014年11月(8)
2014年10月(4)
2014年09月(6)
2014年08月(7)
2014年07月(4)
2014年06月(2)
2014年05月(5)
2014年04月(4)
2014年03月(8)
2014年02月(4)
2014年01月(8)
2013年
2013年12月(15)2013年11月(8)
2013年10月(3)
2013年09月(3)
2013年08月(8)
2013年07月(0)
2013年06月(0)
2013年05月(0)
2013年04月(0)
2013年03月(0)
2013年02月(0)
2013年01月(0)
■レス履歴■
■ファイル抽出■
■ワード検索■
堕天使の煉獄
https://rengoku.sakura.ne.jp
管理人
織田霧さくら(oda-x)
E-mail (■を@に)
oda-x■rengoku.sakura.ne.jp