PythonでCIE 1931 xy色度図を描画する方法(COLOUR)

色に関する研究をしていると、色空間について考えることがよくあります。

表示デバイスに依存しない、人間の視覚可能な色域はCIE xy色度図で表現することができますが、pythonでなんとかこれを表示したい!っということでいいライブラリがあったのでメモ。

 

COLOUR

colour-science.org

 

COLOURはPythonベースの色研究をしている人のためにライブラリです。

インストールはAnacondaやPypiGithubリポジトリから落とせるので簡単楽ちん。
(Installation Guide | colour-science を参照)

 

データの扱いは、よくある「(H, W, 3)」の3次元でなく「(H×W), 3」で渡します。 

(2018/12/21)3次元配列でも普通に渡せます。すいません

機能

自分が把握している機能としてはざっとこんな感じ(2017/12/20時)
間違いがあればご指摘お願いします。
Features | colour-science

  • Biochemistry(生化学)
     
    Michaelis–Menten kinetics(ミカエリス・メンテン式)

  • Colorimetry(測定色学)
     Spectral Computations(スペクトル評価)
     Spectral Bandpass Correction(スペクトルバンドバス補正)
     RGB and XYZ Colour Matching Functions Spectral Dataset
      (RGBとXYZの等色関数スペクトルデータセット)
     Cone Fundamentals Spectral Dataset(錐体分光感度スペクトルデータセット)
     Photopic & Scotopic Luminous Efficiency Functions Spectral Dataset
      (比視感度スペクトルデータセット)
     Colour Matching Functions Conversions for Educational Purpose
      (等色関数の変換(学術目的))
     Illuminant Spectral Power Distribution Computation(分光分布評価)
     Illuminant Spectral Dataset(分光データセット)
     Light Source Dataset(光源データセット)
     Lightness Computation(明るさ算出)
     Luminance Computation(輝度算出)
     Whiteness Computation(白色算出)
     Yellowness Computation(黄色算出)
  • Colour Temperature & Correlated Colour Temperature(色温度&相関色温度)
     
    Correlated Colour Temperature Computation Methods(色温度算出関数)

  • Colour Models(色モデル)
     
    Colourspaces Transformations(色空間変換)

     OETFs(光電気伝達関数)
     EOTFs(逆光電気伝達関数)
     OOTFs
     Log Encoding / Decoding Curves(Log変換、逆変換?)
     RGB Colourspaces(RGB色空間)
     Convenience Deprecated Colourspaces Transformations(廃止予定の色空間変換)

  • Chromatic Adaptation(色順応) 
     
    Chromatic Adaptation Models(色順応モデル)
     Chromatic Adaptation Transforms(色順応変換)

  • Colour Appearance Models(色外観モデル?)

  • Colour Difference(色差)
     
    Delta E Computation(ΔE 算出)
  • Colour Notation Systems(カラーシステム)
     Munsell Value Computation(マンセル値算出)
     Munsell Colour Transformations(マンセルカラー変換)
     Munsell Colours Dataset(マンセルカラーデータセット)
     Hexadecimal(16進数変換)
  • Characterisation(色再現?)
     Colour Rendition Charts (カラーチャートスペクトルデータセット)
     Colour Rendition Charts Chromaticity Coordinates(カラーチャート色度)
  • Light Quality(光品質)
  • Optical Phenomena(光学現象)
  • Reflectance Recovery(反射率)
  • Volume(ボリューム?)
  • Input & Output(入出力)

 

 CIE 1931 xy色度図のプロット

なんやかんやと紹介したところで本題のプロットへ。

 

表示するだけでなら以下だけのコードでOKです。
「bounding_box」パラメーターは見やすくするために座標軸を設定しています[https://gist.github.com/cdfbfb425c34d5a73ee0c55d54298a4c:embed#gistcdfbfb425c34d5a73ee0c55d54298a4c

出力

f:id:Collonville:20171220180210j:plain

 自分で他の物をプロットしたい

最大値を1.0に正規化したRGBをそれぞれ15分割させ、sRGBに基づいてxy空間へプロットしてみます。

プロットはmatplotlibをそのまま使えるので便利です。

 

gist.github.com

出力

f:id:Collonville:20171220181759j:plain

xy色度図にsRGB領域をプロットできていることが確認できました。

 

 

自分が今就活して思っていること

こんにちは!ころんです!!

今年も毎年恒例のAdevent Calendarの時期がやってきたので、忘年会帰りでふわふわしていますが17日目を書いていきます。

多少長くなるとは思いますが、読んでいただけると幸いです。

adventar.org

 

いよいよ自分も就活開始

題目の通りですが、今絶賛就活中です。

まだ先のことやろぉ~wとか思っていたら、もうそんな時期なんですよね。

よく回りからは「早くね?」って言われますが、決してそんなことはないです。なんならもうすでに行く会社が決まっている学生も多くいます。

 
早めに内定するから良いっていうわけではないですが、早めに決まる学生にはそれなりの理由があると思っています。

今日は、そういった学生がどういう人なのか自分の経験も踏まえながら書いていきます。

 

※今日の内容は決して内定をGETすることを目的した記事ではないです。主に自分がいかに成長できるか、その考え方について書いていきます。

 

あなたは優秀ですか?

 90%の学生はたぶん「NO」って答えるでしょう(個人的な指標)

 「別に成績が良いわけじゃないし、何か大会で賞取ったわけではないし...」と思っている人が多いと思います。

いいんです。今日はそういうことを責めに来たわけではないですから。

 

 

ここで大事なのは、「優秀とは」何なのかってことです。

学生の場合は成績が上位にあると思いがちですが、自分は

 

「何か夢中になって打ち込んだことがある人

 

が優秀な人だと思っています。内容は何でもいいです。

勉強、イラスト、音楽、プログラミング、クラブ遊び、ソシャゲ、ナンパ、....

趣味とかに没頭したことがあるかの質問に近いです。

 

これなら、「ある!」って答える人は多くなると思います。

「少しだけ...」とかあいまいな言葉はなしで、YESNOかで考えてみてください。

1時間でも、何かに打ち込んでやったことはないですか?

 

何が言いたいかっていうと、内定が早く決まる学生はここで言う「優秀な人が多いんです。更に1つのことに頭する時間が長いのも特徴としてあります。

 

時間をかければそれだけその分野に詳しくなり、できることが増えます。

Googleの研究本部長を務めているPeter Norvingは「何かでエキスパートになるには約1万時間の訓練が必要」と述べていますが、まさしくその通りで優秀になるにはとにかく時間が必要です。

https://プログラマが知るべき97のこと.com/エッセイ/1万時間の訓練/

 

何かに時間をかけてやってきた人は、自分に自信があり、技術があります。

裏ではものすごい時間の訓練をしてきたからこそ、周りから優秀だって言われるのです。

 

ここめっちゃ言いたいので言わせてください。

学校では成績しか評価してくれませんが、

就活では「夢中になったこと」について評価してくれます。

 

ESに趣味欄があったり、面接で失敗談とか成功談を話すのってこういうことだと思うんですよね。 時間をかければ失敗することも成功することも自然と体験するはずです。

それがない人は、まだ訓練が足りないか、成功失敗点に気づいていないかだと思います。前者の人はこれからも継続していきましょう。後者の人は過去について注意深く振り返ってみましょう。

 

「あなたは優秀ですか?」の問いにNOって答えた人!
今好きなこと、夢中にしていることを追求していきましょう!!

 

 逆求人に参加しよう!

とはいいつつも、自分の打ち込んだことについて評価してくれる人がいないと、今までの行いに意味があったのか分からなくなります。

 

そこで自分がおすすめしたいのが逆求人です。

逆求人とは、普通「企業-->学生」に行う求人を「学生-->企業」で行うことができるイベントです。

エンジニア職中心ですが有名どころだとこの2社が運営しています。

supporterz.jp

www.studenthunting.com

 

 このイベントの一番のポイントは、「自分の今まで行ってきた活動を直接企業さんにPRできる」ということです。

つまり、今まで頑張って没頭してきた事を評価してもらえるということです!

しかも参加する企業はメガベンチャー、ゲーム会社、誰もが知る大手、できてまだ数年のベンチャーなど様々。

 

この早い時期に就活を始められたのも逆求人のおかげでした。

 

自分がこれまで高専プロコンやIT企業でのアルバイト、インターン、個人製作についてアピールした結果、夏には数社からインターンのお誘いを頂きました。


実際のインターン体験談は別の記事でまとめたいと思います。

 

この逆求人に参加する際、自分を紹介するためのプレゼンを最初に5分間行います。

その5分間で自分の「過去・現在・未来」を初めて会う人に紹介するのです。

 

となると、自分がどういう人間なんなのか、自己分析をしないといけません。
ある意味これが逆求人のすごいところで、実際にスライドにまとめるとなるとめちゃくちゃ時間がかかりました。

 

 

今からパワポを開いて実際にやってみると分かると思います。

「あなたがどういう人でこれから何をしたいかを5分間のプレゼンにまとめてください。」

ハーイドン!!

 

 

 

 

 

 

 

 

。。。

 

 

 

 

 

 

 

 

どうですか?

1ページ目からどうすればいいか分からず手が止まる人が多いと思います。自分もそうでした。自分の世界観を出しつつアピールすることは、とても難しいことです。

 

しかし、就活の際はこれらを面接で突然問われます。ストーリー性を立て、やりたいことをアピールするには前準備がないとできません。

これから就活を始める人も始めない人も、一度自分の人生をスライドにまとめてみるとこういった準備もできて、気づけなかった発見もあると思います。

 

優秀な学生は、この自己分析を早い段階で実施しており、自分の事に問われた内容はしっかりと答えられます

 

ちなみにですが19卒の逆求人は、もうあと数回しかないと思います。

せっかくのチャンスを生かして、自分をアピールしていきましょう!!

 

日本の就活怖い

海外の就職事情はよく知りませんが、日本の就職怖くないですか??

 

だって就職の「解禁」って言葉があったり、会社のことがよくわかるという名目で開く実質数時間の1dayインターン、手書きの履歴書、etc...

 

業界や分野によってはその適正を見ないいけない部分もあるとおもいますが、無駄なことが多いように感じます。

学生側も一人で50社受けるとかもよく聞きます。

 

就職は自分の考えやビジョンと合う企業とのマッチングだと思っています。

会社の文化や考え方、やりたいことが本当に合うところを考えたらかなり絞られるかと。

 

数打てば当たる就職だと入ってからのビジョンの違いが出てやる気のない仕事をしちゃうでしょう。

自分が本当に行きたい企業を選んで、熱意を伝えていくのが本当の就職だと思います。

 

面接・SPI対策、やるのも良いと思いますが、まず考えないといけないのは自分のビジョンなのではないでしょうか??

  

会社の人事さんへのお願い

ここまでいろいろ書きましたが、自分が学生側の立場として思ったことを書かせてください。

 

まず、同じ会社でも会社説明を行う人の印象でかなりイメージが変わります。特に悪いイメージがつくとなかなか会社の良いところも聞き出せなくなりますので。

 

2つ目に、積極的に学生に質問してください。たまに、学生からの質問を待つだけのスタイルを取っているところがありました。一方的ではなく、双方向にコミュニケーションをとるのが面談や面接だと思っているので、学生の経歴やコアな部分を突けるようにお願いします。

 

 まとめ

今日は、自分が思った優秀な学生と就活についてこれまで経験に基づいて書きました。

まだまだ付け加えたいところもありますが、収拾がつかなくなりそうなので一旦ここで締めます。

 

賛否両論あるとは思いますが、いろんな人の考えを吸収したいと思っているので何か思ったことがあればどんどん流しちゃってください!

CentOS 6.9にgit入れようと思ったらちょっとしたエラー

先日、インフラも勉強しつつ自分のサービスも展開しようと思ってSakura VPSを借りました。

 

で、ぱぱっとアカウント周りとSSHあたりは設定出来たんですが、gitを入れようとしたらエラー出ちゃったのでメモ

 

とりあえず最新のgitを持ってくる

yum でやっちゃうと古いバージョンのgitが入ると聞いたのでソースからビルド

(出力結果は省きます)

 

# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

# wget https://github.com/git/git/archive/v2.14.2.tar.gz

# tar xzvf v2.14.2.tar.gz

# cd git-2.14.2/

# make prefix=/usr/local all

 

するとmakeコマンドを実行したところで

 

===省略===
GEN git-request-pull
GEN git-stash
GEN git-submodule
GEN git-web--browse
SUBDIR perl
/usr/bin/perl Makefile.PL PREFIX='/usr/local' INSTALL_BASE='' --localedir='/usr/local/share/locale'
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.
make[1]: *** [perl.mak] Error 2
make: *** [perl/perl.mak] Error 2

 

あらら...エラーでとるやん。。。。

 

perlモジュールが足りませんで~

Makefile.PL関係でエラー出てるようですが、よくわからないのでぐぐったら解決

qiita.com

 

はぇ~perlモジュールが関係してるんだってことで

 

# yum install perl-ExtUtils-MakeMaker

 

を実行したら無事にgit導入できました!

 

 

Unityでデータ保持用のクラスを扱う時に戸惑ったお話

こんにちは!
8月と9月に会社訪問やインターンハッカソンで忙しかったころんです。

 

今回はハッカソンでUnityを使った時にちょっと戸惑ったことがあったのでメモメモ 

 

やりたかったこ

 実装したかった流れは以下の通り。

 

  1. サーバーから取ってきたクライアント情報を保持するためのDictionaryが存在し、データ保持用クラスのメンバにはアイテム保持用のリストが宣言
  2. クライアント情報をDictionaryに追加し、クライアントごとにプレハブを生成
  3. 生成したプレハブをUnity上のInspectorで値を確認、編集できるようにしたい

 

今回はデータ構造が入れ子になってごちゃっていますが、許してw

でっこれの何が問題かというと、実行すると確かにアイテムデータは格納されているんですが、InspectorにはNoneと出ちゃうんですよね。

デバッグでInspectorをいじりたいこともありますし、これでは困ります。

 

検証コード

Unityバージョン:2017.1.1f1 Personal(5.6シリーズでも確認済み)

 

コードはこちら↓

ServerManager.csはサーバーからデータを取ってくることを想定。

ClientDataにはアイテムを格納するリストが存在し、専用のクラス(ItemData)も用意

gist.github.com

gist.github.com

gist.github.com

 ServerManager.csを空のGameObjectにアタッチ。ClientData.csはGameObjectに
アタッチした後プレハブ化し、ServerManagerのclientPrefabに適用しています。

確認のためにDictionaryの中身もDebug.Logで表示。

 

これを実行すると以下のようになります

f:id:Collonville:20170927011355j:plain

f:id:Collonville:20170927011359j:plain

Debugではきちんと値が格納されていることが分かります。

しかし、InspectorではItemListの中身はどれもNoneのままです。不思議ですねぇ~

 

原因

ItemData.csに継承しているMonoBehaivourが原因です。

MonoBehaivourを継承することにより、そのクラスはGameObjectとしての挙動を示します。そのため、ItemListにはデータ構造としてのItemDataではなく、GameObjectとしてのItemDataが格納されるため、値が表示されなくNoneとして表示されます。

 

Unity上でクラスを作ると自動的にMonoBehaivourが付いてくるので、気づかないでいたって感じです。

 

docs.unity3d.com

 

kan-kikuchi.hatenablog.com

 

直し方

修正は簡単。ItemDataに継承されているMonoBehaivourを削除するだけです。

修正後のItemData.csと実行結果↓

gist.github.com

f:id:Collonville:20170927015223j:plain

これで無事にInspector上で値の確認ができました!

 

おわりに

今回は、データ構造が入れ子になっている時にMonoBehaivourが原因でInspectorで値が確認できない現象の解決を行いました。

 

本当は、ClientDataのMonoBehaivourも消せれば理想ですが、ServerManagerでGetComponentを使っているので残さないとエラーになります。

 

あんまり遭遇することがない事例だとは思いますが、お役に立てば幸いです。

 

 

 

 

TechnoTUT 新アルバム「Summery Days」

今所属している音楽サークルのTechno TUTですが、無事に今年度初のアルバムを

公開することができました。

 

 

じゃん!!

f:id:Collonville:20170722142631j:plain

 

あぁ、すごい良い。可愛くてかっこいい。

 

アルバムのテーマは「夏」で、新入生2人と既存部員で4曲集まりました。

みんなの個性がハッキリ出ててなかなかおもしろかったw

今回は任意提出でしたが、10月の技科大祭には全員が提出する予定です。

 

アルバムはBootCampでBuy NowからName your priceを0にすれば無料でDLできます!

(もちろんお金を払って購入することも)

technotut.bandcamp.com

ちなみに過去アルバムも整理してから順次公開していくのでお楽しみに。

 

自分が今回作ったazuriteのJ-Coreアレンジですが、Sound Cloudでも確認できます

soundcloud.com

 

うん、ダンスミュージック系のトラックメイク慣れてないせいか難しい。。。

あとSpireSylenth1

せっかくなので、このアルバムに関するマスタリングの記事も書こうと思います

 

最後ですがCD情報も掲載

 

「Summery Days」

Illust : AIR, Design : ayafmy, Mastering : ころんP

1. 0801 - さんまのこぼね

2. 初夏の夜 - ぽねき

3. azurite(CollonP J-Core Remix) - ころんP

4. 残花 - 武

TUT Advent Calendar19日目

この記事は、TUT Advent Calendar 2016 - Adventarの19日目の予定だった記事です。

 

どうもこんにちわ、ころんです。

本当は、今やってる研究の話とか何か新しい分野の開拓でもして記事にしようかなと思っていたのですが予想以上に研究が忙しくなりAdCに書くのも忘れてましたw

 

あと2日目で研究発表をして、卒論を出したら冬コミのアルバムの製作も予定されており、年末まで忙しい日々になります。

 

何を書こう

何を書こう、、、特に書くこともないですが体調面についてちょっと。

 

 

生活習慣には気をつけよう!

f:id:Collonville:20161220192325j:plain

 

知っている人もいますが、自分は不整脈持ってます。よくあるタイプの心室性期外収縮というものです。

www.miyake-naika.or.jp

 

原因は、高専時代の生活習慣ですね。プロコンとかでよく徹夜してたせいでいよいよ病気になりました。

生活面には支障はないですが、やっぱり心臓関係の病気は怖いです。

 

その後の大学でも某イ○○トなウ○○会社のブラックなところでバイトしたり、今は研究で昼夜逆転生活。

なぜかブラックを呼び寄せるようなことばかりですが、さすがにもう辛いですね。

特に自分はストレスを抱えても体調に反映されないんで無理しちゃう傾向があるそうです。

 

このままだとなんか突然死とかも起こりかねないので、来年度からはもっと自分の体を大事にしようかと思います。

 

 

まとめ

ほんと書くことなくてごめんなさいwwwwww

とりあえず自分が言いたいのは

 

早く寝る!
無理しない!
いいものを食べる!

 

以上!!!

パワー正規化(Power Normalization)について

そろそろ研究もまとめに入らないと理系学生が死んじゃう時期になりましたねw

 

自分は、イラストの類似検索の研究をしていますがその中でパワー正規化っという聞きなれない用語が出てきたのでまとめてみました。

 

さまざまな正規化

データの正規化っていろいろあります。

 

L1正規化
L2正規化
平均0・分散1にする正規化

いずれも機械学習においてデータの整合性を取るために大事なものです。

正規化自体、あるルールに基づいて値を変形し使いやすくするという意味だそうです(by Wikipedia)

 

パワー正規化のルール

パワー正規化も同じように下記のルールに基づいて値を変形します。

(はてブロで数式表示したいんだけどやり方がいまいちわからない)

 

f(z) = sign(z)*|z|^a

 

式を見ると元のデータの符号を保ったままべき乗するというルールになっており、パラメーターaは0~1の範囲で選びます。

 

0~1の範囲でべき乗することによって元々1より小さい値は大きく、1より大きい値は小さい値になります。

 

いつ使うの?

パワー正規化は主にスパースベクトル(ほとんど0要素なベクトル)に使うことが多いようです。

画像処理では、自然画像(いわゆる普通の画像)に比べてイラスト画像は使っている色情報が少ないため0要素(0に近い要素)が多くなってしまいます。

音声処理でも似たような単語がありましたが、意味は違うっぽいです。

 

その中で、普通だったら無視されるような値も、特徴の1つとして捉えるようにしようということをしたくてパワー正規化を行います。

自分の研究の場合、パラメーターaを調整することによって検索性能は6%ぐらい上がりました。

 

最近ではFisher Vectorを使う手法が増えてますが、その中でもパワー正規化を使うことで精度向上に貢献しています(p31,35)

www.slideshare.net

 

まとめ

 

パワー正規化について書かれている記事が全然なかったので簡単にまとめてみました。

あなたの研究もパワー正規化で精度向上!?なんてことも???