画像解析プログラムのアイディア!星の光量を測る方法と星の位置の認識方法について

このQ&Aのポイント
  • 質問者は、星の画像解析プログラムのアイディアを求めています。星の光量を測る方法と星の位置の認識方法について悩んでいます。現在のアイディアでは処理が遅いため、より効率的な方法を知りたいとのことです。
  • 質問者は、星の画像解析プログラムのアイディアを求めています。星の光量を測るために、画像のバイナリを読み込んで星を表す画素を探し、その周辺の画像をサンプリングし、白い部分のカウント数から光量を計算する方法を考えています。しかし、処理が遅いため、より効率的な方法を知りたいとのことです。
  • 質問者は、星の画像解析プログラムのアイディアを求めています。現在のアイディアでは処理が遅いため、より効率的な方法を知りたいとのことです。また、カメラで撮影する場合、星の位置が変動するため、同じ星の位置を認識する方法も検討したいとのことです。
回答を見る
  • ベストアンサー

画像解析プログラムのアイディアありませんか?

諸々の事情で星の画像を解析することになりました。 内容としてはbmp形式の星空の画像(夜空に星が2,3個ぐらいある)の中で各星の光量を測らなければなりません(星の区別もつける)。 私の考えでは 1、画像のバイナリを読み込んで画像の端からザーっと読んでいく。 2、星を表す画素(FFFFFF(RGBで白)←星を白と想定して)にヒットする。 3、そこから、その画素を中心に星の画像が十分入るように100*100画素ぐ  らいサンプリングしてそのサンプリングした画像の中の白の部分をカウントす  る。 4、例えばカウント数が100回だとしたらそこから星の光量に変換する といった感じなんですが、どうも処理が遅いようです。もっと効率の良いプログラムのアイディアがありましたらお願いします。 またその星空の画像を時間ごとにカメラで撮っていくのですがその場合、星の位置が動きます。例えば1枚目の画像に星Aがあったとして10分後に撮った2枚目の画像の中の星Aは動いているのでこの二つの星は同じものなんだということをプログラムで認識させるのにも悩んでいます。 もし良ければこちらの方もお願いしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • sheep_goo
  • ベストアンサー率13% (3/22)
回答No.1

現在,仕事で画像解析のプログラムを組んでいます。 まず,処理の効率ですが,ファイルの読み込みを1画素分ずつやっていませんか? 最近はCPU能力がかなり上がったので比較処理等の時間はそんなに気にしなくても大丈夫です。問題はディスクI/Oの部分だと思います。 できるだけまとめてI/Oするように変更するだけで,処理時間はかなり早くなります。(すでにこの部分の工夫をされた上での質問でしたら申し訳ないです。) >この二つの星は同じものなんだということをプログラムで認識させるのにも悩んでいます。 1枚目の星の画像を元に,2枚目の画像の中を検索(?)していったらどうでしょうか。 たとえば1枚目の星の画像(100*100)があったとして,2枚目の画像(1000*1000)の左上から100*100を切り出し,2枚の画像のピクセルごとの誤差の総和を出す。 切り出す位置を1ピクセルごとにずらして順次誤差を出し,一番誤差が小さいところを検索する。(一般的にはこの誤差を出すことを相関演算というのかも?) 私の仕事でも同じようなことをするプログラムがありましたが,残念ながら自分で組んでいないので詳しいことはお教えできません。ごめんなさい。

jimihenn
質問者

お礼

たいへん詳しいご回答ありがとうございました。 参考になりました。

関連するQ&A

  • VB.NETでの画像処理について

    初めて書き込みます。 現在VB.NETと画像処理を勉強中です。 最終的には、画像を取り込んで画像の被写体の縦と横の長さをVB.NETから求めるのが目的です。 現在画像の色情報から輝度を求め、その画素数をカウントしてヒストグラムを求めるところまでは、おぼろげながら理解できています。しかし、画素数をカウントし縦と横の長さを求めるプログラムの作り方がわかりません。 解る方がいましたらぜひおしえてください。 ※画像処理についてですが、プログラムが関わっているので書き込みました。カテゴリーが違っていたらすいません。

  • 二値化画像の数値化

    白黒の二階調で表示されている画像を0と1の数値データに変換するソフトはないでしょうか? たとえば、白が0、黒が1となり、a画素×b画素の画像であればa×bで0と1が並ぶテキストデータになってしまうようなイメージです。 こんな文面で伝わるのか良く分かりませんが、よろしくお願いします…。

  • プログラム上で画像作成

    プログラム上での画像作成というのはできるのでしょうか? 例えば、関数を使って、tukutu(100,100); ※(xsize,ysize) 100*100サイズの画像を作るといったことはできるのでしょうか? しかし、作ったものをpicture1などに貼り付けられるものでないといけません。 もしくは、画像のリサイズを考えています。 例えば、rsize("a.bmp",100,100);  ※("元画像",xsize,ysize) といった感じで、もともとある画像を100*100のサイズに変える方法でもいいのですが。 画像の縮小拡大など難しいことは使わないで、もし指定のサイズより元画像が小さかったらあまりの部分に白領域を足して、大きかったら削ってしまうといった具合です。 とにかくプログラム上で指定したサイズでの画像を作成したいです。 ソフトはビジュアルスタディオを使っています。 分かる方がいましたらよろしくお願いします。

  • プログラムの作り方。アイディアの出し方。

    アイディアを思いつき、実際にプログラムを作る際、悩みます。 悩むのは、分からないではなくって、もっとよりよいのがあるのでは?と思うからです。 エゴグラムのような複数の質問から、各カテゴリーの回答のポイント数を表示するものを作ろうと思います。 (例えば、 おおざっぱ? => O型 神経質ですか? => A型 計画的ではない。 => O型 2面性有り => AB型 ・・・・ A型が1、O型が2、AB型が1等) 最終的に各カテゴリーの質問の集計が求められるスクリプトになればいいのですが、みなさんはどういった方法で集計しますか? 補足の条件としては、質問は気軽に順番を変えられるようにしたいので、スクリプト内で a_group = qes1+qes5+qes7+qes12;(それぞれが、同じカテゴリーの質問、この場合はチェックボックスの値が1とする。) と、単純にはしたくないのですが。 これが一番簡単だとは思いますが、後々の応用がしにくくなるし。 ちょっと考えたのは、各質問のチェックボックスの値をvalue="a_gata",value="b_gata"にして配列に入れれば、サブルーチンの中におさまるかなー、と。 質問を作る際にも、分かりやすいし。 それを戻り値にすれば、後の処理でカウントも合計もできるかと。 グローバス変数を使わなくても済むし。(←これは条件ではないけど。) みなさんは、「エゴグラムを作って」と頼まれた時に、どんな方法で実現させますか? あ、CGIとなってますが、PHPかPerlかで書いて頂けると、ありがたいです。

    • ベストアンサー
    • CGI
  • 日本語から英語へと歌詞を変換して欲しいのですが。

    今、学校のプロジェクトで英語の歌詞を作るというのをやっています。 日本語で考えてみたので、 これをどう英語にしたらいいのか教えてください。 (歌詞の言い回しなどがあったらそれもお願いします。) 星がいっぱいの夜は あまりに綺麗で 時がたつのを忘れさせるよう 暗闇の中で 懸命に光る星たちは 夢や希望であふれてる そんな夜空の星に 今手を伸ばすよ あの空にうかぶ星の数だけ 願いが叶いますように 皆の願いが星になって 輝き続けますように キラキラと光る あの星空が 私わ大好き 私の願いもいつか あの星の一つになって 永遠に光り続けますように ・・・こんな感じです。 どうぞアドバイスをお願いします。

  • ビットマップ画像を読み込むプログラムがうまく行きません。困ってます…。

    こんにちは。大学4年のyu-tinと申します。 現在、大学の研究で使用するためのプログラムとして、以下の機能を持ったプログラム作りに取り込んでいます。 1)ビットマップ画像(グレースケール、縦480×横640pixel)を読み込み、  その画像の1つ1つの画素の輝度値を表示させる 2)読み込んだビットマップ画像を出力させる しかし、作成したプログラムがうまく行きません。以下の3つの問題が発生しています。 a)0行0列~1行383列までの画素値がおかしい。  (0,0,0,0,1,1,1,0,2,2,2,0,3,3,3,0,…,254,0,255,255,255,0 となっている) b)出力した画像の最上部2行程度に、細くて黒い線が表示される。  (読み込んだ画像と全く同じ画像を出力させたい) c)出力した画像が、”ディスクエラー”によりPhotoshopで開けない。  (ペイントでは開ける) その問題のプログラムは、以下の通りです。 しかし、このプログラムは、他人のプログラムに改良を加えて作成したものです。なので、このプログラム自体、私自身が完璧に理解できていない状況です。 私は、プログラミングに関しては初心者に近いので、丁寧に教えて頂けると大変助かります。 研究が先に進まず、大変困っています…。みなさま、本当に、本当によろしくお願い致します。 //ビットマップ画像に関するプログラム。 //画像の表示と輝度値の表示を行う。 #include<stdio.h> #include<windows.h> #include<stdlib.h> #define X_SIZE 640  //画像の横幅(ピクセル数) #define Y_SIZE 480  //画像の縦幅(ピクセル数) #define Z_SIZE 1    //1つの画素に含まれる色の数 void *malloc(size_t size); void main(void) {  int i, j, k;   //ループ用変数 i…縦の画素用, j…横の画素用, k…色数用  int x=0;    //画像の横幅(ピクセル数)*/  int y=0;     //画像の縦幅(ピクセル数)  FILE *fp; /***********元画像データのメモリ確保*********/  BYTE ***mae;  mae=(BYTE ***)malloc(sizeof(BYTE **)*Y_SIZE);  for(i = 0; i < Y_SIZE; i++){   mae[i]=(BYTE **)malloc(sizeof(BYTE *)*X_SIZE);  }  for(i = 0; i < Y_SIZE; i++){   for(j = 0; j < X_SIZE; j++){    mae[i][j]=(BYTE *)malloc(sizeof(BYTE)*Z_SIZE);   }  } /*******画像の読み込み・輝度値の表示*******/  fp=fopen("sample1.bmp","rb");   //画像”sample1”を開く  BITMAPFILEHEADER bmfh;  BITMAPINFOHEADER bmih;  fread(&bmfh,sizeof(bmfh),1,fp);  fread(&bmih,sizeof(bmih),1,fp);  x=bmih.biWidth;  //インフォヘッダに含まれる画像の幅情報をxに代入  y=bmih.biHeight;  //インフォヘッダに含まれる画像の高さ情報をyに代入  for(i = 0; i < y ;i++){   for(j = 0; j < x; j++){    fread(&mae[i][j][0],sizeof(BYTE),1,fp);    if(i<640 && j<480)printf("%d, %d, %d\n",i, j, mae[i][j][0]);   //輝度値を表示   }  }  fclose(fp); /**************画像の表示*************/  //画像”sample1”を”sample2”という名前で出力する  fp = fopen("sample2.bmp" ,"wb");  //ヘッダの書き込み  fwrite(&bmfh,sizeof(bmfh),1,fp);  fwrite(&bmih,sizeof(bmih),1,fp);  for(i = 0; i < bmih.biHeight; i++){   for(j = 0; j < bmih.biWidth; j++){    fwrite(&mae[i][j][0],sizeof(BYTE),1,fp);   }  }  fclose(fp);  //ファイルをクローズ }

  • 満天の星空

    星空について、質問させてください。 子供のころ、九州の高原(夏)で見た星空(それこそ満天の星空、少なくとも私にとっては)が忘れられませんでした。 それから、成人して、旅でネパールのヒマラヤ(エベレスト方面)に、トレッキングに行きました。 11月の乾期で、それこそ昼間は、雲ひとつない天気が毎日続きました。 トレッキングの宿の最終地点(標高4000メートル以上)で、夜の星空を見るのが楽しみの一つだったのですが、期待したより全然、星の数が少なく感じました。 空は、晴れていました。それも一日だけ、夜空を眺めたわけではありません。 これは、どういう訳なんでしょうか? 子供のころの思い出が、美化されすぎてしまったせいでしょうか? 星というのは、空気が澄んだ高地では、どこでもよく見えるんではないかと思っていたのですが、それは間違いなのでですか? ずっと、心の中に疑問としてありました。 どなたかよろしくお願いします。

  • C++で文字をカウントするプログラムを・・・

    C++で簡易的な文字をカウントするプログラムを作成しようとしています。 あるtxtファイルがあって、その中に ----------------- nannchara8 1234 #kokokara a92kv838 402853 #s82ffr kka0345 #kokomade ----------------- と記述してあります。 #kokokara~#kokomadeに書いてある特定の文字(0やaなど)の数をカウント、ただし、行頭に#のついているものはカウントしない(上に示したtxtファイル内の文字「8」のカウント結果は3・・・みたいな」)。 そんなプログラムを作りたいのですが どのようにすればいいでしょうか? ご教授願います。

  • 画像が反転するのは?

    IEのVer.5.0を使用して、インターネットを見ていましたが、急に画像がおかしくなりました。 画像は、急に画素数を落としたか、モザイクのようになり、中には、色が白と反転してしまうものもあります。 再起動し、現在のバージョン(6?)にしましたが、結果は変わりません。 原因と対処法を教えてください。 よろしくお願いします。

  • 気になる二つの星

    最近空がきれいになったせいか、星が都会の街明かりに負けながらも、薄っすらと見えます。 今どきの午前1時ころの夜空、大犬座のシリウスからオリオン座の中央部ミンタカを直線上に見たとき、ミンタカから、シリウスからミンタカ間の1/3くらいの距離に非常輝いている星が見えます。 何という星でしょうか。 もう一つ、大犬座に宇宙の中で最も大きいと思われるVY星なるものがあるとネットで知りました。この星の位置或は星の記号名(例えばσCMaとかδCMaとか)をグーグルアースの星空の画面から教えてください。 (星座表なるものは持ち合わせしておりません)

専門家に質問してみよう