とうとう買ってしまいました。 Kindle DX。
1月4日に注文して、1月7日に届きました。早いぞAmazon.
前買った6インチKindleの箱と同じ形状ですが、サイズが大きくなってました。
開封したところ。開けるとそのままKindleDXが入っていました。上下の白いプラスチックの部分が保護用のパッケージのようです。
まずは充電してね、といった絵が表示されていました。
左からIS03,Kindle 6インチ、Kindle DXで同じ書籍の表紙を表示させています。
KindleDXは、6インチKindleの画面を2枚並べたぐらいの大きさです。
3つ重ねてみました。 やっぱりKindle DXはデカい。。。
文字の大きさを最大にすると、かなり文字が大きくなります。
小さな文字が苦手な人でも大丈夫なように作ってあるみたいです。
(Suicaは大きさの比較用です)
文字の大きさを最小にすると、かなりの量のテキストを同時に表示できます。
PDFの書籍を表示させたところ。
表示面積が2倍になってるので、6インチのときよりもかなり見やすくなっています。
これならPDFを読むのにも苦労しなくてすみそうです。
6インチKindleの新しいバージョンは日本語表示ができますが、
Kindle DXはまだ日本語表示ができません。
(フォントを埋め込んであるPDFは表示できます)
Kindle Storeで日本語の書籍を扱うようになったら、日本語にも対応してくれることでしょう。
ではまた。
突然失礼いたします。大学でOpenCVを使って映像の研究をしておりこちらのホームページをいつも見ている者です。
返信削除実は折り入って研究のことでお聞きしたいことがあります。
「A4サイズの白いボードがありそのボードを、固定したWEBカメラに常に映るような状態でボードを動かしたとき、そのボード(の中心)の3次元座標の位置がわかる(カメラの位置が原点とする)」というものを作りたいと思っています。
白いボードの四隅には赤いシールが貼ってあり色相抽出で四隅の二次元での座標は常に取得できるようになっています。
白いボードの実空間での構造は既知で、四隅の4点は同一平面に存在しています。
また実験中はボードは逆さまにはならないものとします(左上の点は常に白いボードの左上の点に該当する)。
つまりは「白いボードの四隅4点を映していればボードを動かしてもボード(の中心)の3次元座標での位置が常にわかる(カメラ位置が原点)」という物を作りたいと思っています。
カメラのキャリブレーションが必要だと思いますが内部パラメータを求めたあとどうすればいいかがわかりません。
研究室に詳解OpenCVなどの参考書がありますが難しい内容のためよく理解できなずそこで lhaplus8888 様にヒントをいただけないかと思ったしだいです。
突然で大変失礼だとは思いますがアドバイスをいただけないでしょうか?どうぞよろしくお願いします。
追記です。
返信削除lhaplus8888 様の動画のmarker detector 0.5の動画のような感じで矩形マーカーを空間内で自由に動かしたときにマーカーの中心位置の3次元座標がわかるものを作りたいと考えています(カメラの位置が原点とします)。
>大学生@理系さん
返信削除カメラの内部パラメータが求められた、ということは、OpenCV等のライブラリを使っても問題ない、ということでよいでしょうか?
OpenCVが使えるのであれば、内部パラメータ(カメラ内部行列、歪み係数)とシールの位置(4点)、画像上での位置(4点)をcvFindExtrinsicCameraParams2に渡すと、平行移動ベクトルと回転移動ベクトルが求められると思います。
平行移動ベクトルが、カメラから見たシールの位置を表すので、3次元座標を求めることができます
(詳しくは詳細OpenCVの11.2.3 ホモグラフィ以降を参照ください。細かい数式はわたしも理解できませんでしたが、概念の部分は非常に参考になると思います。)
lhaplus8888 様
返信削除突然の質問に関わらず返答いただきまことにありがとうございます!おかげで何とかボードの3次元の位置を取得できそうです。
申し訳ありませんがまたお聞きしたいことがあります。cvFindExtrinsicCameraParams2に必要な引数を渡して平行移動ベクトルを取得でき、次にこの座標の位置にcvProjectPoints2で点を描画しようと思い、
CvMat *point2d = cvCreateMat (1, 2, CV_32FC1);
cvProjectPoints2(translation,rotation,translation,intrinsic,distortion,point2d);
double x3,y3;
x3 = cvmGet(point2d,0,0);
y3 = cvmGet(point2d,0,1);
cvCircle( Image, cvPoint(x3,x3), 0, CV_RGB( 255, 0, 0 ), 10, 8, 0 );
(※translationが平行移動ベクトルです、CvMat *translation = cvCreateMat (1, 3, CV_32FC1); )
と書いてプログラムを実行したのですが
Incorrect size of input array(either the number of channels orcolums or rows must be = 1)
というエラーが出てきてしまい行き詰ってしまいました。cvProjectPoints2のpoint2dに問題があるようでいろいろと試したのですがエラーが出てきています。
lhaplus8888 様のcvProjectPoints2を使っているソースも見ましたがどうしてもわかりません。
これについての誤りを指摘していただけないでしょうか?
>大学生@理系さん
返信削除cvProjectPoints2の引数は、
cvProjectPoints2( const CvMat* object_points, const CvMat* rotation_vector,const CvMat* translation_vector, const CvMat* intrinsic_matrix,const CvMat* distortion_coeffs, CvMat* image_points)
となってますので、最初の引数はobject_points(現実上でのテープの座標)を渡す必要があります。
下記のような感じにすると、エラーが出なくなるかもしれません。。
CvMat *srcPoints3D = cvCreateMat (1, 1, CV_32FC3);//元の3次元座標
CvMat *dstPoints2D = cvCreateMat (1, 1, CV_32FC3);//画面に投影したときの2次元座標
//テープの現実上の位置を決める。
//(ここではrotationとtranslationを求めたときの原点にしました)
srcPoints3D->data.fl[0] =0;
srcPoints3D->data.fl[1] =0;
srcPoints3D->data.fl[2] =0;
//テープの原点が、画像上でどこに投影されるかを計算する。
//rotation,translation,intrinsic,distortion は求められてるものとする
cvProjectPoints2(srcPoints3D,rotation,translation,intrinsic,distortion,dstPoints2D);
//円を描画
cvCircle( Image, cvPoint((int)(dstPoints2D->data.fl[0]),(int)(dstPoints2D->data.fl[1]), 0, CV_RGB( 255, 0, 0 ), 10, 8, 0 );
連絡が遅くなりました。
返信削除cvProjectPoints2、アドバイス通りに書いたところ使えました!lhaplus8888 様もやっているARみたいなこともできるようになり感動しました。
lhaplus8888 様のおかげで研究のほうもなんとかもうひと踏ん張りで収束しそうです。
lhaplus8888 様への成果報告のためこちらに動画をアップしました(1週間くらいで削除すると思います)。ちなみに動画の背景にあるホワイトボードを撮影していれば撮影者が部屋のどこにいるかを検出するものを作ることが今回質問した目的でした。
(限定公開) http://www.youtube.com/watch?v=j5EdrXiHM4Q
動画では後輩の画像を投影しましたが別のカメラから取得した映像を投影して「浮かび上がるテレビディスプレイ」も作れそうですね。
このたびは本当にありがとうございました!ひょっとしたらまたお世話になるかもしれませんがそのときはどうぞよろしくお願いします。どうもありがとうございました。