動画像(時間的に連続した複数の画像)の平均画像の作成方法について
教えてください。

この「平均画像」とは、動画像中で動いていない物体のみが表示される画像です。
つまり、平均画像を作ることによって、移動している物体のみを消したいのです。

単純に各画素値をたしあわせて、それを平均したものではなく、
全画像の最頻値をもちいて平均画像を作成するようにしたいのですが、
最頻値の求め方がよくわかりません。

各画素値にRGBを用いた場合と、HSVを用いた場合の
2通りの平均画像の作成方法を知りたいです。

また、最頻値以外の値を用いて平均画像を作成する方法があれば、
その方法も教えていただけると助かります。

よろしくおねがいします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

平均画像=背景画像としてアドバイスします.


動いている物体の検出のために背景画像が必要になることがあります.
背景画像を取得できる場合は良いのですが,一般に照明の変化などにより動的に背景画像の取得が必要になることは結構あると思います.
そういうわけで,以下のキーワードで検索してみてはいかがでしょうか.
・移動物体 検出(抽出)
・背景 画像 推定

最頻値の求め方については…
いまいち,どこがわからないのかが,わからないです.
    • good
    • 0
この回答へのお礼

いろいろ検索してみたのですが見つからず、
困った末に質問しました。

でも、自分で検索していたときのキーワードと多少違うので、
もう一度そのキーワードでも検索してみようと思います。

どうもありがとうございました。

お礼日時:2002/01/16 17:57

平均画像と言うのは正しいのでしょうか?



動画像中で動いていない物体のみが表示される画像を
全画像の最頻値をもちいて,作成できるとは思えません.
最頻値をどのように用いるのでしょうか?

そもそも全画像の最頻値は,どう言う意味でしょうか?
ヒストグラムが最大になる値のことでしょうか?

また画像処理の場合,処理対象によって最適な方法があると思います.
もうすこし,具体的なことがわかれば答えやすいと思います.

この回答への補足

説明不足ですみません。

最頻値は、画像全体の最頻値ではなく、各画素ごとの最頻値で、
各画素ごとに頻度を取ったとき、頻度が最大になる値です。

動画像をn枚の画像に分けたとしたら、
n枚の画像のある画素(x,y)において、RGB値の頻度を取り、
その最頻値をここでいう「平均画像」の(x,y)の画素値としたいのです。

ただし、RGB値はR,G,B独立に頻度を取るのではなく、
RGBの3次元での頻度をとりたいのです。
独立に取ると、最頻値として求まった値は実際に求めた色とは違ってしまうので。

最頻値を用いることによって動いていない物体のみが表示されるというのは、
ある画素を見た場合、ずっと動かない物体がうつっている画像数のほうが
動いている物体がうつっている画像数より多いはずなので、
頻度を取ると、動いていない物体の色の頻度の方が高くなると思われます。

よって、最頻値を用いることにより、
動いていない物体のみが表示された画像ができるはずなのです。

画像は、室内で撮影した画像を用います。
特に背景が何色とかいう限定はなく、単に室内で撮影した画像です。

これでもやっぱりわかりにくいですよね・・・。
説明が下手で本当にすみません。

補足日時:2002/01/11 16:55
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2002/01/16 17:54

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q添付画像のファイルはどんな状態のファイルなのでしょうか?クリってもエラ

添付画像のファイルはどんな状態のファイルなのでしょうか?クリってもエラーしか出た事がないのですが

Aベストアンサー

他の回答者様の記入通り、拡張子が無い事には判断出来ません。
また、クリックしてもエラーとありますが、webから探すとか出ませんか?
憶測ですが、多分質問者様のPCにこのファイルを開くアプリケーションが
インストールされていないのではないかな?って思います。
参考までに
よくありがちなのは、XPで作ったエクセルファイル等(逆だったかな^^;)を
ビスタのPCで見ると似たようなアイコンになります。
オフィスの互換パックをインストールすると見れます。

QOpenCVで、画像の平均階調値より小さい画素の階調値を0(または25

OpenCVで、画像の平均階調値より小さい画素の階調値を0(または255)にするフィルタを作りたいのですが、どのようにすればよいでしょうか。よろしくお願いします。

Aベストアンサー

http://opencv.jp/opencv-2svn/c/operations_on_arrays.html#avg
で平均値を求めて、それをしきい値にして
http://opencv.jp/opencv-2svn/c/miscellaneous_image_transformations.html#threshold
で処理


その前に、リファレンスマニュアル
http://opencv.jp/reference_manual
や、サンプルコード
http://opencv.jp/sample_code
に一通り目を通して、頭に入れておくことをお勧めします。

Q右クリで画像保存が出ない!

画像を取りたくて矢印を画像に置くと!手のマークに代わり!右クリができなくなりました。
どうしたらよいのでしょうか?

Aベストアンサー

最近のサイトでは著作権の問題もあり、勝手に保存ができないように右クリックができないように設定しいるところが多くなっているであります。法律に抵触する場合もあるであります。

方法としては、色々あるでありますが、ただ見えてる画像が欲しいのであれば、プリントスクリーンでPC画面全体をコピーして、ペイントソフトにペースト、余分な部分を削除して保存すればいいと思うであります。

プリントスクリーンはググってほしいであります。

QOpenCVを使って画素の階調値を、その近傍画素の階調の最小値(最大値

OpenCVを使って画素の階調値を、その近傍画素の階調の最小値(最大値)にするフィルタを作りたいのですが、やり方がわかりません。どのたか、わかる方お願いします。

Aベストアンサー

http://opencv.jp/opencv-2svn/c/image_filtering.html#dilate
http://opencv.jp/opencv-2svn/c/image_filtering.html#erode

Q 友近さんの画像を探しています。本当にいい人で、美人で、セクシーだと思

 友近さんの画像を探しています。本当にいい人で、美人で、セクシーだと思います。着衣・水着・スカート、なんでもOKです(あまり小さいサイズじゃない方がよいです)。どうぞよろしくお願いします。

Aベストアンサー

こちらに数点ありました。
http://bsearch.goo.ne.jp/image.php?UI=web&TAB=web&STYPE=0&CC=1&SCRDEF=0&IMGST=0&IMGSZ=0&IMGC=3&IMGFT=0&IMGFT=1&IMGFT=2&IMGFT=3&MOVPT=0&MOVFT=0&MOVFT=1&MOVFT=2&MOVFT=3&AUDPT=0&NSDP=1&KWDP=1&DC=20&FR=1&SM=mc&OCR=1&SITE=&SITE2=&SITE3=&SITE4=&SITE5=&SITEH=&AUDST=0&AUDMST=0&MOVTHN=0&QGR=1&MOVSC=0&NOJSB=0&QGA=1&NOJS=0&AUDSITE=0&MT=%CD%A7%B6%E1&button=%B2%E8%C1%FC%B8%A1%BA%F7
画像を使用される場合は自己責任でお願いします。

QマウスクリックしたポイントのHSV値の表示方法

VC++のMFCにて顔画像処理について研究中の者です。
マウスクリックしたポイントのHSV値をそれぞれ3つのEditControlに表示させようと考えています。
RGB値をHSVに変換させる方法は、OpenCVのcvCvtColor()関数を使って

   cvCvtColor( frameImage,hsvImage,CV_BGR2HSV );

という風に変換させようと思っています。

クリックした位置のHSV値の表示方法を教えてください。
よろしくお願いいたします。

Aベストアンサー

処理を細分化すべし。

クリックしたら何が起きるか?

クリックイベントで呼ばれる関数はどれか?

クリックイベントで呼ばれる関数のエントリポイントはどう書けば良いか?

クリックイベントで呼ばれる関数には、何が渡されて来るか?

何がクリックされたか?(ピクチャか?フォームか?ウィンドゥか?)

クリックイベントで拾った座標は、ウィンドウ座標か、クライアント座標か?

ピクチャがクリックされ、クリック座標が判ったら、座標変換を行って、クリック座標からピクチャの座標を割り出す。

ピクチャの座標が判ったら、その座標からピクセル情報を取り出す。

ピクセル情報からRGB値を取り出す。

RGB値からHSV値に変換する。

HSV値からH、S、Vを取り出す。

Hの値を文字列化して、EditControlのテキストプロパティに放り込む。

Sの値を文字列化して、EditControlのテキストプロパティに放り込む。

Vの値を文字列化して、EditControlのテキストプロパティに放り込む。

さて、この中で、何が判らない?

判る物と判らない物を切り分けしたら、判らない物を更に細分化し、それを「判る物と判らない物」に切り分けよう。

それを繰り返していけば、最後は「このAPI関数の仕様が判らない」とか「これの演算方法が判らない」とか「探せばどっかに答えが書いてある事」にまで細分化される。

後は、探した答えを、細分化したのと逆の手順で組み立てていけば良い。

で、その作業は「プログラムを1命令づつ書いていく」のと等しい。

処理を細分化すべし。

クリックしたら何が起きるか?

クリックイベントで呼ばれる関数はどれか?

クリックイベントで呼ばれる関数のエントリポイントはどう書けば良いか?

クリックイベントで呼ばれる関数には、何が渡されて来るか?

何がクリックされたか?(ピクチャか?フォームか?ウィンドゥか?)

クリックイベントで拾った座標は、ウィンドウ座標か、クライアント座標か?

ピクチャがクリックされ、クリック座標が判ったら、座標変換を行って、クリック座標からピクチャの座標を割り...続きを読む

Q●「美人アプリ」の画像を保存したい!

●「美人アプリ」というアプリを使用しています。

●ここで表示される画像を保存したいのですが、方法がわかりません。可能かどうかも。。

●もし、方法をご存知の方がいらっしゃいましたら教えていただけませんか?おねがいします。

Aベストアンサー

保存したい画像を表示させて、↓の方法で画面をキャプチャすると、写真アルバムから見れます。
http://blog.livedoor.jp/sakusakupocky/archives/50263981.html

Q平均値を関数を用いて出力したいのですが。。

平均値を関数を用いて出力したいのですが一箇所でつまずいてしまい
ました。ソースは
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*構造体宣言*/
struct Students{
int N;
int A;
int B;
int C;
double ave;
};

/*平均値を計算する関数*/
struct Students Average(struct Students std[i]){
std[i].ave=(double)(std[i].A+std[i].B+std[i].C)/3;
return std[i];
}

int main(void){
struct Students std[49]; /*構造型配列*/

int i,N,A,B,C,num,scannum;

FILE*file; /*ファイルのポインタを用意*/

srand((unsigned)time(NULL)); /*乱数の初期化/


file=fopen("Data.txt","r"); /*Dataファイルの読み込み*/

/*ファイルのオープンチェック*/
if(file==NULL){
fprintf(stderr,"cannnot open file 'Data.txt'\n");
exit(1);
}
/*Studentsにデータを格納*/
for(i=0;i<=49;i++){
fscanf(file,"%d%d%d",&N,&A,&B);
std[i].N=N;
std[i].A=A;
std[i].B=B;
std[i].C=70+(rand()/(RAND_MAX+1.0)*31);
std[i].ave=Average(std[i]);

/*表示*/
printf("学籍番号:%d.",std[i].N);
printf("科目A:%d.\n",std[i].A);
printf("科目B:%d.\n",std[i].B);
printf("科目C:%d.\n",std[i].C);
printf("平均点:%d.\n",std[i].ave);

fclose(file);

return 0;
}
目標はA,B,Cの平均を出したいのですが関数宣言の際にstd[i]を
用いると未定義扱いになってしまい実行が出来ない状態です。
自分としては↑のソースでi番目の配列の平均値を導出し、表示
させようとしてるのですが。。。。アドバイスをお願いします。
m(__)m

平均値を関数を用いて出力したいのですが一箇所でつまずいてしまい
ました。ソースは
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*構造体宣言*/
struct Students{
int N;
int A;
int B;
int C;
double ave;
};

/*平均値を計算する関数*/
struct Students Average(struct Students std[i]){
std[i].ave=(double)(std[i].A+std[i].B+std[i].C)/3;
return std[i];
}

int main(void){
struct Students std[49]; /*構造型配列*/

int i,N,A,B,C,num,scannum;
...続きを読む

Aベストアンサー

double Average(struct Students tmp);
{
return (double)(tmp.A+tmp.B+tmp.C)/3;
}

のようにするべきでは?

関数を呼び出すときの引数は値をコピーするための一時的な変数です。

std[i].ave = Average(std[i]);

としてAverage関数を呼び出すときには

struct Students Average(struct Students tmp)
tmp = std[i];
{
return (double)(tmp.A+tmp.B+tmp.C)/3;
}

とちょっと書き方は変になりますが、std[i]という変数を一時的に引数で宣言されている変数にコピーして
関数の中で計算を行いますので、std[i]のように名前が同じである必要がありません。
名前を同じにしても良いのですが、関数の中と外とでは全く違う変数として扱われます。
また、引数として宣言できる変数名は普通の変数宣言と同じ形式ですので
std[i]というような変数名を宣言することはできません。

あと、averageの中身ですが平均値を計算したいのであれば上記のように
平均値を戻り値としないと

std[i].ave=Average(std[i]);

で、型が違うのでエラーがでるのでは?

double Average(struct Students tmp);
{
return (double)(tmp.A+tmp.B+tmp.C)/3;
}

のようにするべきでは?

関数を呼び出すときの引数は値をコピーするための一時的な変数です。

std[i].ave = Average(std[i]);

としてAverage関数を呼び出すときには

struct Students Average(struct Students tmp)
tmp = std[i];
{
return (double)(tmp.A+tmp.B+tmp.C)/3;
}

とちょっと書き方は変になりますが、std[i]という変数を一時的に引数で宣言されている変数にコピーして
関数の中で計算を...続きを読む

Q右クリ禁止のサイトの画像を保存

質問の通りなのですが右クリック禁止のサイトの画像を保存できるようにする方法はないでしょうか?あと、よく海外でおもしろ動画とかを見せてるサイトがありますが、そういった動画を保存する方法はありますか?重ねて質問すいません^^;

Aベストアンサー

そのサイトを見ないとなんとも言えませんが、
JAVAをオフにしてみると右クリック禁止がはずれる事もあります。

それで駄目ならば、プリントスクリーンを取って画像を修正してください。
まぁ画像を持ち出されたくないサイトならばあまり持ち出さないほうがよろしいかと思います。

ちなみに動画を保存する場合は専用のソフトなどが必要。

Q配列変数を用いて平均値を求める

こんにちわ
実は、入力データを使って平均値を求めるプログラムについてなんですけど。
//データの平均値の計算
#include <stdio.h>
void main () {
int i, k, n, x[100];
double a;
while (1) {
a = 0;
printf("データ数を入力してください...");
scanf("%d",&n);
printf("正の実数のデータを入力してください。");
for (i = 0;i < n ;i++) scanf("%d",&x[i]);
for (k = 0;k < n;k++) a += x[k];
printf("平均値 %f\n", a/n);
}
}
すいません、インデントがいい加減です。 
こうやると普通に平均値を出せますが、最初にデータ数を入力しなければいけません。
 私は、データの個数を入力しないで平均値を出したいと思います。どういう風に上のプログラムを変更すればできるのでしょうか?上のプログラムに誤植があるとは思いますが。。。
 また、たとえば最後に0以下の数字を入力したらデータ入力を終わらせる...
 if(x[i]<=0)break; はどこに入れればいいでしょうか?
 たくさんの質問すいません。ご教授よろしくお願いします。

こんにちわ
実は、入力データを使って平均値を求めるプログラムについてなんですけど。
//データの平均値の計算
#include <stdio.h>
void main () {
int i, k, n, x[100];
double a;
while (1) {
a = 0;
printf("データ数を入力してください...");
scanf("%d",&n);
printf("正の実数のデータを入力してください。");
for (i = 0;i < n ;i++) scanf("%d",&x[i]);
for (k = 0;k < n;k++) a += x[k];
printf("平均値 %f\n", a/n);
...続きを読む

Aベストアンサー

こんな感じでどうでしょうかね。
#include <stdio.h>
#define MAX 100

int main(){
int i, x[MAX];
double a;

printf("正の実数のデータを入力してください。");
a=0; i=0;
do{
printf("0以下で入力終了>");
scanf("%d",&x[i]);
if(x[i]<=0)
break;
a+=x[i++];
}while(i<MAX);
printf("平均値 %f\n", a/i);
return 0;
}


人気Q&Aランキング

おすすめ情報