C言語関係掲示板

過去ログ

No.1272 横軸:周波数、縦軸:コントラストという画像の特性グラフ

[戻る] [ホームページ]
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文の条件判定を変更してみたところ、
非常に高速に動作するようになりました。
本当にありがとうございます。