今月はあっという間でした。
例の件を何もすすめれていないことが心残りです。反省しています。
さて。
さて。
どうしたものか。
Sunday, November 30, 2014
Saturday, November 29, 2014
口を動かす練習
早起きしてもコーヒー飲んで走ってyoutube見て論文読んで、では何も向上する気がしないので、会話の勉強をしようと思います。
来週は中国ですが、中国でも練習しようと思います。
なるべく話す。口を動かす。
よし、まずは、、、何をしよう。そんなことは知らん。
簡単なことからやろう。
youtubeで適当なおしゃべりを見つけて、それをシャドーイングしよう。
来週は中国ですが、中国でも練習しようと思います。
なるべく話す。口を動かす。
よし、まずは、、、何をしよう。そんなことは知らん。
簡単なことからやろう。
youtubeで適当なおしゃべりを見つけて、それをシャドーイングしよう。
Friday, November 28, 2014
ランニング後のシャワー
今日は風邪が治った第一歩目として走ってきました。
6時起きです。4時半に起きたけれど寒すぎて布団から出れませんでした。
嫌なこともさっとやってしまう人はスーパーマンです。私には遠い。
だらだら走ってきましたが、10分も走れば燃えます。
なので、帰宅直後は熱いまま。
そのまま、さっとシャワーを浴びると言い知れぬ達成感があります。
6時起きです。4時半に起きたけれど寒すぎて布団から出れませんでした。
嫌なこともさっとやってしまう人はスーパーマンです。私には遠い。
だらだら走ってきましたが、10分も走れば燃えます。
なので、帰宅直後は熱いまま。
そのまま、さっとシャワーを浴びると言い知れぬ達成感があります。
普段なら風呂入らずにシャワーだけした後は部屋が寒く感じますが、ランニング後であれば、全く寒くない。活発なままです。
快活な生活には運動は欠かせないものだと再確認しました。
快活な生活には運動は欠かせないものだと再確認しました。
Thursday, November 27, 2014
Wednesday, November 26, 2014
Monday, November 24, 2014
病の効果
ようやく風邪が治った感じがします。
長引かずに済んで良かったです。
今回風邪引いて思ったのは、風邪引くと、パフォーマンスがめちゃくちゃ下がるということ。
病気してたらいい仕事できません。心の病気もしかり。
ただ病気は予防しきれないということもわかりました。
今回はマスクと手洗いうがいをしてたにも関わらず、風邪引きました。
なので、人の邪魔したいときはその人を病気にすればヨロシと言うこと。
効果は抜群。風邪程度で少なくとも1週間はおとなしくなります。
心の病気の強烈なやつなら、相手の人生ごとおとなしくさせることができます。
こういうのを悪用して金儲けしている人たちいるのかなぁ。
なんでも気持ちよくなる病気なんかになっちゃってね、気がついたらみんなやっちゃってたりしてね、ってばかやろうつってね。
長引かずに済んで良かったです。
今回風邪引いて思ったのは、風邪引くと、パフォーマンスがめちゃくちゃ下がるということ。
病気してたらいい仕事できません。心の病気もしかり。
ただ病気は予防しきれないということもわかりました。
今回はマスクと手洗いうがいをしてたにも関わらず、風邪引きました。
なので、人の邪魔したいときはその人を病気にすればヨロシと言うこと。
効果は抜群。風邪程度で少なくとも1週間はおとなしくなります。
心の病気の強烈なやつなら、相手の人生ごとおとなしくさせることができます。
こういうのを悪用して金儲けしている人たちいるのかなぁ。
なんでも気持ちよくなる病気なんかになっちゃってね、気がついたらみんなやっちゃってたりしてね、ってばかやろうつってね。
Sunday, November 23, 2014
Saturday, November 22, 2014
ひさびさにてっはぁ
texを最初に触ったのは大学生の時で、そのときの先生某えみ先生から、texはドイツ読み(ギリシアって言ってたかも)で行こうぜ、「て」のあとは、息を吐くだけの音で「はぁ」だぜ、と言われてマジかよ、と思ったのを覚えています。
結局その発音をする人は周りにはいなくて、周りではだいたい「テフ」と呼んでいました。
そもそもテフむのは日本でも一部の人らしいとそのときに聞いていたけれど、だいたいテフなので、私もテフと呼んでいます。けれど、それもそろそろやめて、「テク」と呼ぼうかと思ってきました。なんとなく。
それで今日は朝4時に起きてから、テクを書いている。
早起きテク。
字面がテクい。そんで結局みんなやっちゃたりしちゃってね、って、ばかやろうっつてね。
それで原因がさっぱりわからないのだけど、テクの画像の貼りつけにハマりました。
\includegraphics[width=0.19\linewidth,bb=0 0 150 150]{AAA.jpg}
これはAAA.jpgを貼りつけるためのコードですが、jpgはバウンディングボックスを持っていないので、前の括弧内に、bbで定義します。
AAA.jpgは縦横200bpなので、本来ならbb=0 0 200 200にするべきです。
しかし、なぜか出力した画像が小さくなってしまいました。
周りに余白があるように見えます。
なのでうーん4分の1くらい削っているていで、150にして見ようかと調整してみました。
すると、ぴったり。
たぶん、これは和文フォントを使った文書なので、英文のbpと実は違うんじゃないかと、疑っているのですが、今のところ原因はわかりません。
ま、わかってもわからなくて、出る絵が所望ならいいのですが。
結局その発音をする人は周りにはいなくて、周りではだいたい「テフ」と呼んでいました。
そもそもテフむのは日本でも一部の人らしいとそのときに聞いていたけれど、だいたいテフなので、私もテフと呼んでいます。けれど、それもそろそろやめて、「テク」と呼ぼうかと思ってきました。なんとなく。
それで今日は朝4時に起きてから、テクを書いている。
早起きテク。
字面がテクい。そんで結局みんなやっちゃたりしちゃってね、って、ばかやろうっつてね。
それで原因がさっぱりわからないのだけど、テクの画像の貼りつけにハマりました。
\includegraphics[width=0.19\linewidth,bb=0 0 150 150]{AAA.jpg}
これはAAA.jpgを貼りつけるためのコードですが、jpgはバウンディングボックスを持っていないので、前の括弧内に、bbで定義します。
AAA.jpgは縦横200bpなので、本来ならbb=0 0 200 200にするべきです。
しかし、なぜか出力した画像が小さくなってしまいました。
周りに余白があるように見えます。
なのでうーん4分の1くらい削っているていで、150にして見ようかと調整してみました。
すると、ぴったり。
たぶん、これは和文フォントを使った文書なので、英文のbpと実は違うんじゃないかと、疑っているのですが、今のところ原因はわかりません。
ま、わかってもわからなくて、出る絵が所望ならいいのですが。
Friday, November 21, 2014
治りかけ
先日に続き、薬飲んでます。
総合感冒薬。
とりあえず眠くなります。
眠くなることに関しては効果抜群で、先日同様二度寝しました。
こんな生活続けたくないですね。
学会にも行けないし。
そんな中、腹筋台を買いました。
これで腹筋を取り戻す。学会に行く準備として。
Thursday, November 20, 2014
続・風邪
風邪ひいたので総合感冒薬を飲んでいます。すごく眠くなる。
そのせいか、いつも通り早起きしても、なんかやって、二度寝してしまいました。
結局起きたのは6時半です。薬すごい。
眠くなるけれどその代わりに体は楽です。
さすが薬。
体は楽になるけれど、薬ではウィルスは活性化を止めれないという。
ウィルスすげー。
ま、そのウィルスを不活性にするのは人間なので、人間すげーとなるのですが、そもそもウィルスって石鹸程度で不活性になりますから、発症するやつの自己管理ができていないってだけですかね。
そのせいか、いつも通り早起きしても、なんかやって、二度寝してしまいました。
結局起きたのは6時半です。薬すごい。
眠くなるけれどその代わりに体は楽です。
さすが薬。
体は楽になるけれど、薬ではウィルスは活性化を止めれないという。
ウィルスすげー。
ま、そのウィルスを不活性にするのは人間なので、人間すげーとなるのですが、そもそもウィルスって石鹸程度で不活性になりますから、発症するやつの自己管理ができていないってだけですかね。
Wednesday, November 19, 2014
風邪引いたか
風邪。
でもそれとは関係なく早く目覚めるようになりました。
4時半に安定してます。
昨日はどうしてもはずせない用事があったので、しんどかったけど、葛根湯2本飲んだらかなり楽になりました。でも、薬は薬で効果時間があって、切れると、戻りました。
疲労もあったかな。
治るまで走るのはやめよう。
でもそれとは関係なく早く目覚めるようになりました。
4時半に安定してます。
昨日はどうしてもはずせない用事があったので、しんどかったけど、葛根湯2本飲んだらかなり楽になりました。でも、薬は薬で効果時間があって、切れると、戻りました。
疲労もあったかな。
治るまで走るのはやめよう。
Tuesday, November 18, 2014
Monday, November 17, 2014
Sunday, November 16, 2014
Saturday, November 15, 2014
朝焙煎
5時に起きるのは苦ではあるけれど、起きてしまえば眠気には勝てます。
今朝はコーヒーのストックが切れたので、焙煎してました。
30分以上かかる上に、結構面倒見ていないと、片面しか焼けなかったり、ムラができたりします。
今朝は適当に放置したせいで、黒に近い茶色になりました。まるでプーアル茶のような黒さ。
ま、いいっすわ。
今朝はコーヒーのストックが切れたので、焙煎してました。
30分以上かかる上に、結構面倒見ていないと、片面しか焼けなかったり、ムラができたりします。
今朝は適当に放置したせいで、黒に近い茶色になりました。まるでプーアル茶のような黒さ。
ま、いいっすわ。
Friday, November 14, 2014
靖子
5時半。
いつからだった覚えていないですが、Youtubeのホームページにはおすすめというのが出てきます。
この機能は、思考停止状態でも適当に動画を見れるだけでなく、新しい何かとの出会いを助けてくれます。その新しい何かは、だいたい広告目的の動画なのですが。
その広告目的の中に、先日、大森靖子という歌手が出てきました。
出てきたのはどうでもよいのです。今日の話題ではありません。
今日の話題は「靖子」という名前の読みについてです。
私は、これを直観的に、「やすこ」と読みます。
でもこの歌手の場合は「せいこ」と読みます。
確かに「せいこ」とも読めますが、直観的には「やすこ」です。
では、なぜ「やすこ」が直観的なのでしょう。
そもそも漢字に親しくない私が「靖」という漢字を知っていること自体が疑問です。
どこかでこの漢字を見たことがあるのだろうと思い、靖でググってみました。
靖国神社。
これです。靖国。やすくに。
国は「くに」と読むので、靖は「やす」と読むはずです。
国を子に取り換えると、靖子と書いて「やすこ」の読むはず。
なので、私は靖子を「やすこ」と読んだのです。
今まで関わった女性にこういう名前の人がいたのかとドキドキしたのですが、どうやら違ったようです。
自分の記憶に疑いを持っていたけど、疑いが晴れて良かった。
この大森靖子にはドキドキさせられました。なぜか毎日声を聴いています。
いつからだった覚えていないですが、Youtubeのホームページにはおすすめというのが出てきます。
この機能は、思考停止状態でも適当に動画を見れるだけでなく、新しい何かとの出会いを助けてくれます。その新しい何かは、だいたい広告目的の動画なのですが。
その広告目的の中に、先日、大森靖子という歌手が出てきました。
出てきたのはどうでもよいのです。今日の話題ではありません。
今日の話題は「靖子」という名前の読みについてです。
私は、これを直観的に、「やすこ」と読みます。
でもこの歌手の場合は「せいこ」と読みます。
確かに「せいこ」とも読めますが、直観的には「やすこ」です。
では、なぜ「やすこ」が直観的なのでしょう。
そもそも漢字に親しくない私が「靖」という漢字を知っていること自体が疑問です。
どこかでこの漢字を見たことがあるのだろうと思い、靖でググってみました。
靖国神社。
これです。靖国。やすくに。
国は「くに」と読むので、靖は「やす」と読むはずです。
国を子に取り換えると、靖子と書いて「やすこ」の読むはず。
なので、私は靖子を「やすこ」と読んだのです。
今まで関わった女性にこういう名前の人がいたのかとドキドキしたのですが、どうやら違ったようです。
自分の記憶に疑いを持っていたけど、疑いが晴れて良かった。
この大森靖子にはドキドキさせられました。なぜか毎日声を聴いています。
Thursday, November 13, 2014
歪度と尖度
今日は5時半に起きました。
習慣になると楽なものです。
統計量について平均、分散、歪度、尖度と耳にすることはありますが、計算方法は平均と分散くらいしか知りませんでした。
暇だったので、歪度と尖度の計算法を調べてみると、結構簡単で、歪度は(残余/標準偏差)^3の総和/全数、尖度は(残余/標準偏差)^4の総和/全数でした。
https://onlinecourses.science.psu.edu/stat501/node/161
結構簡単な計算なので、もっと早くに知っておけばよかったと思いました。
習慣になると楽なものです。
統計量について平均、分散、歪度、尖度と耳にすることはありますが、計算方法は平均と分散くらいしか知りませんでした。
暇だったので、歪度と尖度の計算法を調べてみると、結構簡単で、歪度は(残余/標準偏差)^3の総和/全数、尖度は(残余/標準偏差)^4の総和/全数でした。
https://onlinecourses.science.psu.edu/stat501/node/161
結構簡単な計算なので、もっと早くに知っておけばよかったと思いました。
Wednesday, November 12, 2014
朝ランニング
今日は5時50分に起きました。1時くらいに寝たので、だいたい5時間弱寝てます。
朝に時間があると、いろいろと活動したくなります。
そのひとつは運動です。
時間にも体力にも余裕があるので、ちょっと運動をしたくなります。
私の場合、コーヒーを一発淹れてから走っています。
以前、長距離を走って膝を痛めたことがあったので、また傷めないように短い距離にしています。
ささっと。30分かからないくらいで走り終えます。
こんな感じで、やれていなかったことができるようになってきます。
早起きは結構良いれす。
朝に時間があると、いろいろと活動したくなります。
そのひとつは運動です。
時間にも体力にも余裕があるので、ちょっと運動をしたくなります。
私の場合、コーヒーを一発淹れてから走っています。
以前、長距離を走って膝を痛めたことがあったので、また傷めないように短い距離にしています。
ささっと。30分かからないくらいで走り終えます。
こんな感じで、やれていなかったことができるようになってきます。
早起きは結構良いれす。
Tuesday, November 11, 2014
朝は飽きやすい
今日も早起きできました。
おかげでブログが書けます。
夜は時間がないので書けません。
9時ごろ寝て、起きたのは4時50分です。
おかげでブログが書けます。
夜は時間がないので書けません。
9時ごろ寝て、起きたのは4時50分です。
その間目が覚めたのは2度あり、最初は1時、二度目は4時30分です。
たぶん慣れの問題です。
起きて1時間ほどネットを徘徊すると、飽きます。
夜のほうが飽きる感覚は少ない気がします。
朝、行動すると無駄を減らせるかもしれません。
Monday, November 10, 2014
早起き
今日から早起きを始めました。
5時40分に起きて、まず昨日焙煎したコーヒーを淹れました。
狙い通りシティに仕上げれました。
珈琲ネタで、最近知ったのはThird wave coffeeという言葉で、wikipediaを読む限り、こだわって出している店が増えてるね、的な意味らしいです。
Thirdがあるなら、First, Secondもあるのですが、これまたwikipediaを読む限り、First waveはFolgersで、Second waveはスタバ的なアレとのこと。
なるほど。朝コーヒーの専門ショップとかそんなのちゃっちぃ産業は関係ないらしい。
今後も波と呼ばれるような広がりは起こるかもしれませんね。
特に、コーヒーや茶のような人間の生活サイクルに入ったものは、起こしやすいのかもしれませんけど。
話は全然違いますが、ブログが見れるようになってます。
土曜日は確かにbloggerへのアクセスができなかったのになぁ。ドメインが変わった気もするけど、ま、いいわ。
5時40分に起きて、まず昨日焙煎したコーヒーを淹れました。
狙い通りシティに仕上げれました。
珈琲ネタで、最近知ったのはThird wave coffeeという言葉で、wikipediaを読む限り、こだわって出している店が増えてるね、的な意味らしいです。
Thirdがあるなら、First, Secondもあるのですが、これまたwikipediaを読む限り、First waveはFolgersで、Second waveはスタバ的なアレとのこと。
なるほど。朝コーヒーの専門ショップとかそんなのちゃっちぃ産業は関係ないらしい。
今後も波と呼ばれるような広がりは起こるかもしれませんね。
特に、コーヒーや茶のような人間の生活サイクルに入ったものは、起こしやすいのかもしれませんけど。
話は全然違いますが、ブログが見れるようになってます。
土曜日は確かにbloggerへのアクセスができなかったのになぁ。ドメインが変わった気もするけど、ま、いいわ。
Thursday, November 6, 2014
Color transfer (以下略)の実装
かなり古い技術ですが、ReinhardらのColor transfer between imagesは宅で実装するにはちょうどいいのでやってみました。正しいかは知りませんが。
http://dl.acm.org/citation.cfm?id=618848
http://www.cs.tau.ac.il/~turkel/imagepapers/ColorTransfer.pdf
この技術を簡単に説明すると、心理を考慮した色空間で、画像Aの色の分布を画像Bの分布に似せると、画像Aの構図で画像Bっぽい画像Cができる、と言ったものです。
上の画像AとBの場合では、画像Cの緑の映え方が、Bっぽい印象になりました。
でも、Bの哀愁漂う雰囲気は引き継がれていない気がします。こういう微妙な印象は、変えれないのかもしれません。もしかしたら実装が間違っているのかもしれません。よくわかりません。
今日はうどんだな、なんて思ったら、うどんっぽい画像になる、とかそういうこともありません。
論文に書いてある通りに実装したつもりですが、どこか違っているのかもしれません。でも、ま、見た感じ合っているっぽいので、違っても誤差の範囲でしょう。
以下、C++コード
http://dl.acm.org/citation.cfm?id=618848
http://www.cs.tau.ac.il/~turkel/imagepapers/ColorTransfer.pdf
この技術を簡単に説明すると、心理を考慮した色空間で、画像Aの色の分布を画像Bの分布に似せると、画像Aの構図で画像Bっぽい画像Cができる、と言ったものです。
画像A |
画像B |
画像C |
でも、Bの哀愁漂う雰囲気は引き継がれていない気がします。こういう微妙な印象は、変えれないのかもしれません。もしかしたら実装が間違っているのかもしれません。よくわかりません。
今日はうどんだな、なんて思ったら、うどんっぽい画像になる、とかそういうこともありません。
うどん |
うどんの雰囲気を持つはずの画像 |
以下、C++コード
#include <iostream> #include <fstream> #include <vector> #include <omp.h> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #if defined(_DEBUG) || defined(DEBUG) #pragma comment(lib, "opencv_core247d.lib") #pragma comment(lib, "opencv_highgui247d.lib") #pragma comment(lib, "opencv_imgproc247d.lib") #else #pragma comment(lib, "opencv_core247.lib") #pragma comment(lib, "opencv_highgui247.lib") #pragma comment(lib, "opencv_imgproc247.lib") #endif void BGR2LSM(cv::Mat bgr, cv::Mat& lsm){ double trans[] = { 0.0402, 0.5783, 0.3811, 0.0782, 0.7244, 0.1967, 0.8444, 0.1288, 0.0241}; lsm = cv::Mat::zeros(bgr.size(),CV_64FC3); for(int i=0;i<bgr.size().height;i++){ for(int j=0;j<bgr.size().width;j++){ for(int k=0;k<3;k++){ double t = 0; for(int l=0;l<3;l++){ if(0==bgr.at<cv::Vec3b>(i,j)[l]){printf("error\n");} t += trans[k*3+l]*(double)bgr.at<cv::Vec3b>(i,j)[l]; } lsm.at<cv::Vec3d>(i,j)[k] = t; } } } } void LSM2BGR(cv::Mat lsm, cv::Mat& bgr){ double trans[] = { 0.0497,-0.2439,1.2045, -1.2186,2.3809,-0.1624, 4.4679,-3.5873,0.1193}; bgr = cv::Mat::zeros(bgr.size(),CV_8UC3); for(int i=0;i<bgr.size().height;i++){ for(int j=0;j<bgr.size().width;j++){ for(int k=0;k<3;k++){ double t = 0; for(int l=0;l<3;l++){ t += trans[k*3+l]*(double)lsm.at<cv::Vec3d>(i,j)[l]; } if(t<0)t=0; if(t>255)t=255; bgr.at<cv::Vec3b>(i,j)[k] = t; } } } } void LSM2logLSM(cv::Mat lsm, cv::Mat& logLSM){ logLSM = cv::Mat::zeros(lsm.size(),CV_64FC3); for(int i=0;i<lsm.size().height;i++){ for(int j=0;j<lsm.size().width;j++){ for(int k=0;k<3;k++){ logLSM.at<cv::Vec3d>(i,j)[k] = log(lsm.at<cv::Vec3d>(i,j)[k]); } } } } void logLSM2LSM(cv::Mat logLSM, cv::Mat& lsm){ lsm = cv::Mat::zeros(logLSM.size(),CV_64FC3); for(int i=0;i<lsm.size().height;i++){ for(int j=0;j<lsm.size().width;j++){ for(int k=0;k<3;k++){ lsm.at<cv::Vec3d>(i,j)[k] = exp(logLSM.at<cv::Vec3d>(i,j)[k]); } } } } void logLSM2LAB_Ruderman(cv::Mat logLSM, cv::Mat& lab){ double trans[] = { 1.0/sqrt(3.0), 1.0/sqrt(3.0), 1.0/sqrt(3.0), 1.0/sqrt(6.0), 1.0/sqrt(6.0),-2.0/sqrt(6.0), 1.0/sqrt(2.0),-1.0/sqrt(2.0), 0 }; lab = cv::Mat::zeros(logLSM.size(),CV_64FC3); for(int i=0;i<logLSM.size().height;i++){ for(int j=0;j<logLSM.size().width;j++){ for(int k=0;k<3;k++){ double t = 0; for(int l=0;l<3;l++){ t += trans[k*3+l]*(double)logLSM.at<cv::Vec3d>(i,j)[l]; } lab.at<cv::Vec3d>(i,j)[k] = t; } } } } void LAB_Ruderman2logLSM(cv::Mat lab, cv::Mat& logLSM){ double trans[] = { sqrt(3.0)/3.0, sqrt(6.0)/6.0, sqrt(2.0)/2.0, sqrt(3.0)/3.0, sqrt(6.0)/6.0,-sqrt(2.0)/2.0, sqrt(3.0)/3.0,-sqrt(6.0)/3.0, 0 }; logLSM = cv::Mat::zeros(lab.size(),CV_64FC3); for(int i=0;i<logLSM.size().height;i++){ for(int j=0;j<logLSM.size().width;j++){ for(int k=0;k<3;k++){ double t = 0; for(int l=0;l<3;l++){ t += trans[k*3+l]*(double)lab.at<cv::Vec3d>(i,j)[l]; } logLSM.at<cv::Vec3d>(i,j)[k] = t; } } } } void BGR2LAB_Ruderman(cv::Mat bgr, cv::Mat &lab){ cv::Mat lsm,logLSM; BGR2LSM(bgr,lsm); LSM2logLSM(lsm,logLSM); logLSM2LAB_Ruderman(logLSM,lab); } void LAB_Ruderman2BGR(cv::Mat lab, cv::Mat& bgr){ cv::Mat lsm,logLSM; LAB_Ruderman2logLSM(lab,logLSM); logLSM2LSM(logLSM,lsm); LSM2BGR(lsm,bgr); } void average(cv::Mat im, cv::Vec3d &mean, cv::Vec3d &var) { for(int k=0;k<3;k++){ mean[k] = 0; } for(int i=0;i<im.size().height;i++){ for(int j=0;j<im.size().width;j++){ for(int k=0;k<3;k++){ mean[k] += im.at<cv::Vec3d>(i,j)[k]; } } } for(int k=0;k<3;k++){ mean[k] /= im.size().height*im.size().width; } for(int i=0;i<im.size().height;i++){ for(int j=0;j<im.size().width;j++){ for(int k=0;k<3;k++){ double t = im.at<cv::Vec3d>(i,j)[k]-mean[k]; var[k] += t*t; } } } for(int k=0;k<3;k++){ var[k] /= im.size().height*im.size().width; } } void correction(cv::Mat& source, cv::Mat target){ cv::Vec3d smean,svar,tmean,tvar; average(source,smean,svar); average(target,tmean,tvar); cv::Vec3d ssd,tsd; for(int k=0;k<3;k++){ ssd[k] = sqrt(svar[k]); tsd[k] = sqrt(tvar[k]); } for(int i=0;i<source.size().height;i++){ for(int j=0;j<source.size().width;j++){ for(int k=0;k<3;k++){ double labd = source.at<cv::Vec3d>(i,j)[k] - smean[k]; source.at<cv::Vec3d>(i,j)[k] = labd*tsd[k]/ssd[k]+tmean[k]; } } } } void normalizeRangeVec3b(cv::Mat &im, int min, int max){ for(int i=0;i<im.size().height;i++){ for(int j=0;j<im.size().width;j++){ for(int k=0;k<3;k++){ im.at<cv::Vec3b>(i,j)[k] = (double)(max-min)*(double)im.at<cv::Vec3b>(i,j)[k]/255.0 + min; } } } } int main(int argc, char* argv[]) { std::string sourcename = "a.jpg"; std::string targetname = "b.jpg"; cv::Mat source = cv::imread(sourcename); cv::Mat target = cv::imread(targetname); normalizeRangeVec3b(source,1,255); normalizeRangeVec3b(target,1,255); //Ruderman cv::Mat sourcelab, targetlab; BGR2LAB_Ruderman(source,sourcelab); BGR2LAB_Ruderman(target,targetlab); correction(sourcelab,targetlab); //reverce LAB_Ruderman2BGR(sourcelab,source); LAB_Ruderman2BGR(targetlab,target); cv::imwrite(targetname+"like"+sourcename,source); return 0; }
LSM空間
心理系の色周辺で、色をLSM空間で表現することがあります。
こういうのは自前で持っていないと面倒なことが多いので、宅の暇な時間に、OpenCVのMat用に書いてみました。
画像処理ではReinhardらのColor Transfer between imagesで使われています。
http://dl.acm.org/citation.cfm?id=618848
以下、c++コード
こういうのは自前で持っていないと面倒なことが多いので、宅の暇な時間に、OpenCVのMat用に書いてみました。
画像処理ではReinhardらのColor Transfer between imagesで使われています。
http://dl.acm.org/citation.cfm?id=618848
以下、c++コード
void BGR2LSM(cv::Mat bgr, cv::Mat& lsm){ double trans[] = { 0.0402, 0.5783, 0.3811, 0.0782, 0.7244, 0.1967, 0.8444, 0.1288, 0.0241}; lsm = cv::Mat::zeros(bgr.size(),CV_32FC3); for(int i=0;i<bgr.size().height;i++){ for(int j=0;j<bgr.size().width;j++){ for(int k=0;k<3;k++){ double t = 0; for(int l=0;l<3;l++){ t += trans[k*3+l]*(double)bgr.at<cv::Vec3b>(i,j)[l]; } lsm.at<cv::Vec3f>(i,j)[k] = t; } } } }
Monday, November 3, 2014
Subscribe to:
Posts (Atom)