掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29381

射影変換
投稿者---初心者。(2007/01/09 20:14:31)


ある画像image1の座標(x、y)とこれから変換する画像image2の座標(x'、y')に次のような関係式があるのですがこれを変換していくにはどのようにプログラムすればいいか教えてください。

x' = ((m[0]*x2)+(m[1]*y2)+m[2]) / ((m[6]*x2)+(m[7]*y2)+1)

y' = ((m[3]*x2)+(m[4]*y2)+m[5]) / ((m[6]*x2)+(m[7]*y2)+1)

(m[0]〜m[7]は定数です。)


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:射影変換 29383 -- 2007/01/09 21:07:44


No.29383

Re:射影変換
投稿者-----(2007/01/09 21:07:44)


> 次のような関係式がある

Cのコードを書いた経験は、どのくらいありますか?


この投稿にコメントする

削除パスワード

No.29384

Re:射影変換
投稿者---初心者。(2007/01/09 21:26:13)


どのくらい・・・2年間くらいですかね。


この投稿にコメントする

削除パスワード

No.29385

Re:射影変換
投稿者-----(2007/01/09 21:41:00)


だとすると、計算式が見えているのですから、
対応するCのコードが浮かんできてもいいのではないかなぁと
思ったりします。



この投稿にコメントする

削除パスワード

No.29386

Re:射影変換
投稿者---初心者。(2007/01/09 22:05:59)


アドバイスありがとうございます。
いちお下のように考えてみたのですがちょっとうまくいかないので書き込んでみました。
何か気づいたら教えてください。
↓↓↓↓

#include <stdio.h>
#include <math.h>
#define HEIGHT 320
#define WIDTH 240

int main() 
{
  int x1,y1;
  double x2,y2,m[8] = {0.236,0.085,52.822,0.000,0.630,1.005,-0.003,0.000};
  unsigned char image[HEIGHT][WIDTH]; 
  unsigned char syaei[HEIGHT][WIDTH];
  FILE *fp;
  
  fp = fopen("left.dat", "rb");
  
  fread(image, sizeof(unsigned char), HEIGHT * WIDTH, fp);
  
  fclose(fp);

  x2=0;
  y2=0;
     
  for(x1=0;x1<320;x1++){
    for(y1=0;y1<240;y1++){
      
      x2 = ((m[0]*x1)+(m[1]*y1)+m[2]) / ((m[6]*x1)+(m[7]*y1)+1);    
      
      y2 = ((m[3]*x1)+(m[4]*y1)+m[5]) / ((m[6]*x1)+(m[7]*y1)+1);
      
      (int)x2 =x2;
      (int)y2 =y2;
      
      if(x1>319)
    x1=319;
      
      if(y1>239)
    y1 = 239;
      
    syaei[x1][y1]=image[x2][y2];
      }
      printf("%f %f\n",x2,y2);
      
    }
  }
  
fp = fopen("left-syaei.dat", "wb");

fwrite(syaei, sizeof(unsigned char), HEIGHT * WIDTH, fp);

  fclose(fp);
  
  return 0;
  
}





この投稿にコメントする

削除パスワード

No.29388

Re:射影変換
投稿者-----(2007/01/09 22:37:58)


> #include <math.h>

見たところ数学関数を使っていないようですので、
インクルードしなくてもよいです。

>   fp = fopen("left.dat", "rb");

ファイルのオープンは「絶対に」成功しますか?
fpがNULLかどうかを、必ずチェックしてください。

>   x2=0;
>   y2=0;

この2行は不要です。

>       (int)x2 =x2;
>       (int)y2 =y2;

キャストするくらいでしたら、x2とy2は初めからint型で十分だと思います。

>       if(x1>319)
>     x1=319;
>       
>       if(y1>239)
>     y1 = 239;

もしかしてx1はx2が、y1はy2が、それぞれ正しいのではありませんか?

>     syaei[x1][y1]=image[x2][y2];

もしかして、x1とx2、y1とy2が逆なのではありませんか?
x1からx2に、y1からy2に、それぞれ変換しようとしているのではないのですか?

> fp = fopen("left-syaei.dat", "wb");

fpがNULLかどうかを、必ずチェックしてください。





この投稿にコメントする

削除パスワード

No.29389

Re:射影変換
投稿者---初心者。(2007/01/10 00:51:47)


すごく丁寧な説明ありがとうございます。
明日やってみたいと思います。



この投稿にコメントする

削除パスワード

No.29396

Re:射影変換
投稿者---初心者。(2007/01/10 19:01:25)


昨日の指示を受けて今日下のようにしてみました。
コンパイルはできたのですが34行目でprintfをしてみたところ
値がすべて0で原因が分からないでいます。
分かる方がいらっしゃいましたら宜しくお願いします。

#include <stdio.h>
#define HEIGHT 320
#define WIDTH 240

int main() 
{
  int x1,y1,y2,x2;
  double m[8] = {0.236,0.085,52.822,0.000,0.630,1.005,-0.003,0.000};
  unsigned char image[HEIGHT][WIDTH]; 
  unsigned char syaei[HEIGHT][WIDTH];
  FILE *fp;
  
  fp = fopen("left.dat", "rb");
  
  fread(image, sizeof(unsigned char), HEIGHT * WIDTH, fp);
  
  fclose(fp);
     
  for(x1=0;x1<320;x1++){
    for(y1=0;y1<240;y1++){
      
      x2 = ((m[0]*x1)+(m[1]*y1)+m[2]) / ((m[6]*x1)+(m[7]*y1)+1);    
      
      y2 = ((m[3]*x1)+(m[4]*y1)+m[5]) / ((m[6]*x1)+(m[7]*y1)+1);
      
      if(x2>319)
    x2=319;
      
      if(y2>239)
    y2 = 239;
      
       syaei[x2][y2]=image[x1][y1];
      
    printf("%f %f\n",x2,y2);
      
    }
  }
  
fp = fopen("left-syaei.dat", "wb");

fwrite(syaei, sizeof(unsigned char), HEIGHT * WIDTH, fp);

  fclose(fp);
  
  return 0;
  
}




この投稿にコメントする

削除パスワード

No.29398

Re:射影変換
投稿者---Hermit(2007/01/10 20:05:14)


printf("%f %f\n",x2,y2);

ちょっとしか見てませんが、
x2,y2 は、int のようなので、

printf("%d %d\n",x2,y2);
ではないでしょうか。



この投稿にコメントする

削除パスワード

No.29399

Re:射影変換
投稿者---初心者。(2007/01/10 20:13:49)


あっ!簡単なミスをしていました。
ありがとうございました。そして迷惑かけてすいませんでした。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧