- 締切済み
円のHough変換をC言語で
つくってみたのですが、ループが多すぎて実行時間が30分以上はかかりそうです。 ループをどうやって減らせばよいか、アドバイスお願いします。 円は(x-a)^2+(y-b)^2=400です。 以下、現在のプログラムの手順 1.b[x][y][a]を初期化(x,y,aでループ) 2.画素値が0のとき、b[x][y][a]=(円の式をb=~~の形にしたときの右辺)を行う(x,y,aでループ) 3.b[x][y][a]の頻度をカウントする。(カウントするbの値,x,y,aでループ。ここが時間かかる。) 4.逆変換する。まだ試してないけどxでしかループしないので時間はかからないはず。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- osamuy
- ベストアンサー率42% (1231/2878)
- duke_kimura
- ベストアンサー率39% (53/134)
- duke_kimura
- ベストアンサー率39% (53/134)
関連するQ&A
- 円のハフ変換をC言語で
r^2=(x-a)^2+(y-b)^2 を変形して b=√(r^2-(x-a)^2)+y にしました。課題ではr=10と指定されていて、 b=√(100-(x-a)^2)+y となります。これをa,b平面にプロットすればいいのですが、 画像平面のxとyというのがいまさら分かりません。 画素値をどう入力すればいいのでしょうか。 例えば1行1列目の画素値をwとしたとき、 x[1]=w、y[1]=w とすればいいのでしょうか。 ご回答お願いします。
- ベストアンサー
- C・C++・C#
- C言語教えてください。
(1)二次方程式y=a*x*x+b*x+cについて、a=1.0,b=2.0,c=3.0として、x=1.1,2.2,3.3,4.4のときのyをもとめる計算を行い、式と係数値とxと対応するyの値を表示するプログラムを作成せよ。 (2)xを与えて、xの2乗、3乗を計算し、xと対応する結果を表示するプログラムを作成せよ。なお、x=3,5,7,9とする。
- ベストアンサー
- C・C++・C#
- C言語のポインタの考え方について
ポインタについて理解ができていないのでお聞きしたいのですが 値を交換する関数のプログラミングでこの場合ポインタ で以下にしないといけないと思います。 #include<stdio.h> void swap(int *a int *b){ int c; c=*a; *a=*b; *b=c; } main(){ int x,y; x=123; y=456; swap(&x,&y); printf("x = %d, y = %d\n", x, y); } またポインタを使用せず以下のプログラムではなぜダメのでしょうか。 よろしくお願い致します。 #include<stdio.h> void swap(int a int b){ int c; c=a; a=b; b=c; } main(){ int x,y; x=123; y=456; swap(x,y); printf("x = %d, y = %d\n", x, y); }
- ベストアンサー
- C・C++・C#
- 「解きながら学ぶC言語」という本の問題8-3
2つの値の大きい方の値を返すマクロを以下のように定義! #define max(x, y) ((x) > (y) ? (x) : (y)) このマクロを利用してmax(max(max(a, b), c), d)を展開すると ((((((a) > (b) ? (a) : (b))) > (c) ? (((a) > (b) ? (a) : (b))) : (c))) > (d) ? (((((a) > (b) ? (a) : (b))) > (c) ? (((a) > (b) ? (a) : (b))) : (c))) > (d)) このようになる。 そこで質問ですが、展開後の最後の部分、 (c))) > (d))は、不等号(>)ではなくコンマ(:)ですよね? これは参考書のミスということでよろしいんでしょうか? 少々腑に落ちないので質問させていただきました。 長々と長文申し訳ございません。 ご回答宜しくお願いします!
- ベストアンサー
- C・C++・C#
- c言語の問題です。解説と解答をお願いします
(1) doube a[3][4]で宣言された2次元配列の要素a[y][x]に割り当てられるメモリのアドレス&a[y][x]を数式で表せ。x∈{0,1,2,3},y∈{0,1,2}である。 (2) 下記の宣言文によって複数個の配列要素に初期値を代入した。各配列要素に代入される値を説明しなさい。 char b[]={‘X’,’Y’,’Z’}; char c[]=“xyz”; char *d[]={“ONE”,”TWO”,”THREE”}; int e[3][2]={1,3,5,7,9,11}; お願いします。
- ベストアンサー
- C・C++・C#
- 楕円を円に変換する問題です。
1次変換 A=(1 -α) (β √3・γ) によって楕円3x^2+9y^2=1を原点を中心とする半径1の円になるとき α,β,γを求めよ。ただしα、β、γは正の実数とする。 という問題です。 (X,Y)を変換後の座標としますと、X^2+Y^2=1・・(1)が成り立ちます。 又、楕円は(1/√3 , 0) (0 , 1/3)を通りますので (X,Y)=(1/√3 , 1/√3・β) ・・(2) (X,Y)=(α/3 ,√3・γ/3) ・・(3) が成り立ちます。 (2)を(1)に代入しβ=√2を導出することはできたのですが、(3)を(1)に代入したところで詰まってしまいました。 ご回答よろしくお願いします。
- ベストアンサー
- 数学・算数
- 配列のプログラム(C言語)
実数yの値をキーボードから入力し、数列an=n+1(n=0.1.2.・・・.8.9)を係数にもつ多項式 f(y) = a9yの9乗 + a8yの8乗 +・・・+ a1y + a0 の値を計算して画面に表示するプログラムをforのループを使って教えてください。
- ベストアンサー
- C・C++・C#
補足
わざわざ試行錯誤までありがとうございます・・・。 cygwinのgccです。 全コードは字数オーバーになるので・・・ rは画素値を入れるポインタです。 bhはbの値です。bがもともと前の部分で使われていたので・・・ カウント部分の改善を試みているのですが、うまいこと数えられません・・・。