研究してますか

研究しているときは更新されます。研究してないときは更新されません

研究してます

期限を決めろ

期限がないと頑張れません.


「これこれをいついつまでに」と決まっていると,大まかな完成目標と,
それに向けてのペース配分が決まります.


それを決めずに「まあ適当にやってりゃ終わるっしょ」と進めていると
ペースも上がらず,見通しも立たず,中途半端で終わって後で後悔します.


最近気づきました.

OpenCVでプログラミング

ゴリラになる知識

初心者でも信じられないくらいわかりやすいです.
ゴリラになりたい.

画像のデータ型

OpenCVでは画像を行列として扱います.
整数はint,浮動小数点型はdouble,画像はMat,ゴリラはgori.実にわかりやすい.



Matについてはここがわかりやすいし,だいたいのことは載っています
cv::Matの基本処理 — OpenCV-CookBook

画像のコピーとか,サイズの取得の仕方とかはここで学びます.
横幅がxでcols,縦幅がyでrowsです.毎回わからなくなります.


これであなたもOpenCVでコードがかけます.

//画像の読み込み
Mat magi = imread("magihara.jpg");

//画像を表示するウィンドウを作る
namedWindow("magihara", CV_WINDOW_AUTOSIZE);

//画像の表示
imshow("magihara", magi);

画像は普通,色を持っているので,RGBでデータを保存する必要がありますね.
Matのチャンネル数がそれに当たります.


どのような値で画像を保存するかも重要です.
通常の場合,OpenCVは8ビット符号なし整数(uchar)で画像を読み込みます.

輝度の最小値が0,最小値が255となります.
それが3チャンネルで,画像の型としてはCV_8UC3である.実にわかりやすい.


ただ,画像の値を使って計算したいときはもっと精度が欲しい時があります.
32ビット小数(float)ならCV_32FC3
64ビット小数(double)ならCV_64FC3
どちらも値は0~1です.

細かければいいというわけでもないので,適材適所というやつです.


imshow関数で画像を実際に表示するときは,0~255の8ビット整数が使われるので
小数型の画像をimshowすると真っ黒になります.注意しましょう.

//画像の読み込み
Mat magi = imread("magihara.jpg");
//Float, Double型の画像を用意する.
Mat magiFloat, magiDouble;

//型変換.0~1の範囲に0~255は入るはずがないのでスケール変換をします.
magi.convertTo(magiFloat, CV_32FC2, 1.0/255);
magi.convertTo(magiDouble, CV_64FC2, 1.0/255);

//画像を表示するウィンドウを作る
namedWindow("magihara Int", CV_WINDOW_AUTOSIZE);
namedWindow("magihara Float", CV_WINDOW_AUTOSIZE);
namedWindow("magihara Double", CV_WINDOW_AUTOSIZE);

//画像の表示
imshow("magihara Int", magi);
imshow("magihara Float", magiFloat);
imshow("magihara Double", magiDouble);

"magihara Int"以外のウィンドウは闇が表示されます.残念でした.


あなたもたのしいOpenCV

カメラのレンズを分解した

お久しぶりです

5ヶ月ぶりでした。
研究していなかったわけではありません。

日々を消費するだけの人生を送ってきました。
でも5ヶ月前に比べたらだいぶ研究できるようになったような気がします。

カメラのレンズを分解したい

今回は研究と関係ありません。
カメラのレンズが調子が悪くなったので様子を見たくなりました。

機材

いわゆる入門機。D7100買いたい。現金降ってこい。

レンズセットで付いてきた標準ズームレンズ。

最近、50mm単焦点(AF-S NIKKOR 50mm f/1.8G)ばかり使っているので活躍の機会が少ない。

症状

  • 前群レンズの鏡筒がぐらつく。
  • それによって、光軸がずれる

シンプルです。
これは半年くらい前からで、鞄の中に乱暴に入れておいたら周りからの圧力で何処かおかしくなったのだと思う。

多分内部が破損なりしているから、完全に直すのは無理そう。
勉強として、一旦分解して、組み立てられたらまあ"よし"としましょう。
万一直ってしまえば万々歳、ということで。

参考にしたサイト

http://kanaimaru.com/0904nikon_lens/nikon_lens_repair.htm
レンズは違うけど画像がたくさんあって神わかりやすい。

分解

分解しましょう。

途中でネジが紛失するとヤバいので、下に皿を置きます。
転ばぬ先の杖。


念のため手袋をします。気持ちの問題。

後群

まず面白そうなの接点の側から分解していきます。
接点周りはマイクロドライバーで3本ネジを外すだけ。
チョロすぎワロタ。

シムが3枚入っていますね。金属製が2枚、薄い真鍮?製が1枚。

この先は、VR(Vibration Reduction:手ぶれ補正)やAF/MFスイッチの
ユニットを外さないと進めないので外します。

こちらもネジ一本だけと簡単。

AF/MFの切り替えは、スイッチを切ると画像の真ん中のさすまたみたいな部分が動いて
モーターの回転をフォーカスレンズ群に伝えている歯車が浮くようになっています。
夢が広がります。

歯車は暗くて見難い。右に見えるのがモーター。
AF/MFスイッチからつながるフレキシブル基板はコネクタが見やすく簡単に外せました。

2つ上の画像で、右に見えるフレキシブル基板が接点と繋がる部分。
カメラとレンズを繋ぐ重要なところ。
左に見える導線がおそらくGNDで、基板から接点付近に通じている様子。

フレキシブル基板の方はどこかにコネクタが有るのだろうけど、
銅線の方はハンダが無いとどうしようもないので、打ち切り。

注意点
  • AF/MF切り替えのさすまたパーツは正しく差し込まないと動作しない。確認が難しい
  • 3枚のシムの位置合わせ(そんなに大変でもない)
結論
  • フレキシブル基板に詳しくなろう
  • 分解するならハンダくらい用意しよう
  • ここから先が本番感が否めない

前群

問題と関係するのがここからです。
まずシールを剥がします。

ピンセットは無いと生きていけない。

前玉を取り外す。
専用の工具はカニ目レンチというマニア向け工具が必要

\3,600なり。

そんなものは買ってられないのでニッパで頑張りましょう。

若干傷ついた。
あとから、ノギスでもいけることが判明。

くるくる回すとあっけなく前玉が取れる。
http://www.nikon-image.com/products/lens/af/dx/zoom/img/af-s_dx_18-55mmf35-56g_vr/02.gif
左側が前、右側が後。8群11枚

こちらにも金属のシムが2枚入っていて、ねじ用の穴はないので重ねてあるだけ。

分解していくとガタつきの原因が判明。
ズームリングの回転をレンズの前後方向の動きに変換するカムの部分

左:壊れている部分
右:通常の部分

スリットとネジがぴったり合うように、ネジにプラスチックのソケットがついています。
それが1箇所、なくなっていることが原因でした。


逆さにして振ってみると…

「カラカラ……」

はい。




元通りに直して終了。

結論
  • パーツの破損が問題でした。どのメーカーもこのようなパーツが付いているのだろうか
  • 前群側からはこれ以上の分解が無理そうだったので、ズームユニットを分解するにも後ろから分解する必要がありそう。
注意点
  • 金属のシムを入れる際、前玉にはめ込んでから静かに入れないとずれる。
  • シムがずれると前玉が浮いて、無限遠側に焦点が合わなくなった。

教訓

  • レンズは大切に扱おう
  • 復元するときはすべてのパーツをきっちりとはめること
  • 何より最初にブロワー買うべき
  • レンズを拭く紙、キムワイプでも悪く無いらしいけどいいやつがあると嬉しい

Nikon シルボン紙セット

Nikon シルボン紙セット

欲しい

Nikon 超広角ズームレンズ AF-S DX NIKKOR 16-85mm f/3.5-5.6G ED VR ニコンDXフォーマット専用

Nikon 超広角ズームレンズ AF-S DX NIKKOR 16-85mm f/3.5-5.6G ED VR ニコンDXフォーマット専用

ステップアップズームレンズ

もはやD7100とのレンズキットで……


金が足りない

リモートデスクトップで未来が見える

普段はMacBook Airを持ち歩いています。
おうちにはWindowsのデスクトップがあります。
大学にはWindowsのノートがあります。


互いに遠隔操作ができたら便利だと思うのは、人間なら当然の思考です。

しましょう。

TeamViewer

特に考えることはありません。
入れるだけです。

TeamViewer - ネット経由のパソコン遠隔操作(リモートコントロール)ソフト

感想

いちいちい報告するまでのことでもなかったように思います。

Quickrun.vimを使えたら嬉しい

嬉しいに越したことはありません。


ついでに、C++で書いたファイルを
OpenCVを使ってコンパイルできるようにしましょう。

導入

NeoBundle 'thinca/vim-quickrun'

からの

:NeoBundleInstall

学習しました。

設定

.vimrcに書くだけです。
もはやなんでも.vimrcに書けばいいような気がしてきます。

" -------------------
"  vim-quickrun
"

" 保険
if !exists("g:quickrun_config")
    let g:quickrun_config={}
endif

let g:quickrun_config  = {
            \   "_" : {
            \   "outputter/buffer/split" : ":botright 8sp",
            \   "runner" : "vimproc",
            \   "runner/vimproc/updatetime" : 40
            \   },
            \
            \   "cpp/g++" : {
            \   "cmdopt" : "`pkg-config --cflags opencv` `pkg-config --libs opencv`"
            \   },
            \}

"_"はすべてのtypeに関してということです。
出力は下側8行としました。

多分この書き方は良くないのですが、g++でコンパイルするのは今はOpenCVだけなので。
本当は

:QuickRun cv

って打ったらOpenCV使ってコンパイルして欲しいんですが。

勉強が足りません。


OpenCVのメモも残しておかないといけません。