No.16882![]() |
画像処理 投稿者---FFTer(2004/09/23 02:02:55) |
||
横軸:周波数、縦軸:コントラストという画像の特性グラフを 一時関数近似してその傾きを見たいのですが、 これは最小2乗を用いて近似グラフを求める方法がベストでしょうか? 特性グラフは、対象となる画像にFFTをかけ、FFT後の画像の領域変換を行い、中心からの同じ距離にあるデータを足してコントラストとして いるのですが、その処理に大変時間がかかってしまっています。 現状だと、同じ距離にあるデータを見付けるのに逐次判定を行っており、そこで時間がかかっているので、始めから決めうちでできればかなり 軽くなると思っています。 中心から同心円上に配列を指定できるようなコードなどありましたら 御紹介頂ければ幸いです。 それでは宜しくお願い致します。 bufが元画像データです。kが中心からの距離です。 if文で距離の判定を行い、同じ距離にある輝度値を足しています。 <pre> for(k = 0; k<181; k++){ for(i = 0; i<IMAGE_HEIGHT; i++){ for(j = 0; j<IMAGE_WIDTH; j++){ data = sqrt(((j-IMAGE_WIDTH/2)*(j-IMAGE_WIDTH/2) + (i-IMAGE_HEIGHT/2)*(i-IMAGE_HEIGHT/2))); if(data == k){ hist[k] += buf[i][j]; } } } </pre> |
No.16883![]() |
Re:画像処理 投稿者---επιστημη(2004/09/23 09:06:39) |
||
>中心から同心円上に配列を指定できるようなコードなどありましたら >御紹介頂ければ幸いです。 極座標使ったほうが早いんじゃないかしら。 中心を(X,Y), 半径r として: x = X + r * sin(theta); y = Y + r * cos(theta); で、thetaをぐるっと一回りすれば。 sin, con はあらかじめ表にしておくことができるし。 |
No.16884![]() |
Re:画像処理 投稿者---REE(2004/09/23 09:23:05) |
||
【掲示板ご利用上の注意】 ※ソースの添付は「HTML変換ツール」で字下げ! >中心から同心円上に配列を指定できるようなコードなどありましたら 円の経路を辿ることも出来ますが、181個の円を辿るのでは効果半減です。 見方を変えて以下の様にするのも手です。 これだけで、100倍以上早くなるはずです。 for(i = 0; i<IMAGE_HEIGHT; i++){ for(j = 0; j<IMAGE_WIDTH; j++){ data = sqrt(((j-IMAGE_WIDTH/2)*(j-IMAGE_WIDTH/2) + (i-IMAGE_HEIGHT/2)*(i-IMAGE_HEIGHT/2))); if(data < 181){ hist[data] += buf[i][j]; } } } この上で、jのループの範囲をiの値によって狭めることで、さらなる高速化も可能でしょう。 |
No.16891![]() |
画像処理 投稿者---FFTer(2004/09/23 17:49:24) |
||
早々のお返事ありがとうございます!! REEさん御指摘の、IF文の条件判定を変更してみたところ、 非常に高速に動作するようになりました。 本当にありがとうございます。 |