2012-10-28 18 views
8

画像積分の平均、標準偏差、勾配はどのようにして求められますか?画像を指定された次のような:画像の積分を計算する

summed area table and normal table of numbers

を強調した部分の総和、sum = C+A-B-Dを見つけるために、上記の図に示すように。
だから我々はsum = 22を持っています。私は見つけるために次の続行するにはどうすればよい

  • グラデーション
+2

ご質問が一切ありません。あなたはそれを改善できますか? – ArtemStorozhuk

+0

イメージ部分(ROI)の_mean_、_std dev_、_gradient_を探したいですか? – ArtemStorozhuk

+0

すべての画像の平均、標準偏差、勾配を求めます。 – Mzk

答えて

2

C+A-B-Dはあなたで区切られたゾーンのグレーレベルの合計を与える

  • STD devの平均A、B、C、Dのように、あなたはゾーンの面積でそれを分割する必要がある平均を得るために:

    mean = (C+A-B-D)/4 
    

    DEVを取得するには、(あなたが二乗和を取得するために追加のパラメータを渡すことができcv::integralを使用して)平方領域テーブルの合計を計算しなければなりません。 wikipediaを引用すると、標準偏差は平方根(平方根の平均から平方根を差し引いたもの)を引いたものに等しくなります。だから、A「B」、C「D」あなた平方領域テーブル内の値と仮定すると:

    dev = sqrt((C'+A'-B'-D')/4 - (mean*mean)) 
    

    だから平均を計算し、積分画像を使用してdevがある非常に速く、積分画像を使用して、特にあなたの場合それらの量をランダムな位置および画像パッチのランダムなサイズで計算したいと考えています。

    グラデーションに関しては、より複雑です。 sobel演算子を使用したくないですか?

  • +0

    あなたは、積分画像を使って計算平均とdevは特にランダムな場所やサイズで速いと言いました。次に、イメージ全体に適用するのが遅いということですか? Sobelオペレータは高速ですか? – Mzk

    +0

    勾配を計算するために、sobelは慎重な実装(周波数領域での畳み込み)で高速です。固定サイズの近隣の各ピクセルで平均値を取得する必要がある場合は、boxFilterを使用するとよいでしょう。おそらくもっと速いかもしれませんが、わかりません。それは私の意見では数ミリ秒の問題です。しかし、あなたはこの方法で開発者を取得しないでください。スピードが必要な場合、積分画像は良いオプションです。 – remi

    +0

    @remi数式は正しいですか?少なくとも平均値?それは(C + A-B-D)/ 4ではありませんか? – maximus

    3

    C + A-B-Cは、ゾーン内のすべてのグレーレベルの和である場合、平均値は

    mean = C+A-B-D/4 
    

    しかし

    Kは、ゾーン内のグレイレベルの数である
    mean = C+A-B-D/K 
    

    ありません。ここで式は、これらの式は等価ではない

    dev = sqrt((1/N)*sum_N ((x_i)^2) - u^2) 
    

    に相当する

    dev = sqrt((1/N)*sum_N (x_i - u)^2) 
    

    ため

    はまた、

    dev = sqrt(C'+A'-B'-D'/4 - (mean*mean)) 
    

    は、STDEVありません。

    +0

    いいです。ありがとう@jmch。 – Mzk

    +0

    実際、私の答えに示されているように、レミは正しい軌道に乗って標準偏差公式を導き出していました。 – xperroni

    2

    jmchが言っていないのは、sqrt(C'+A'-B'-D'/K - (mean*mean))が積分画像から標準偏差をどのように計算すればいいのですか?

    まず、Python/numpyコードに切り替えるようにしてください。そこで、表記の一貫性を犠牲にして、式を確認しやすくしています。サンプル配列Xを考えると、言う:Xuncorrected sample standard deviationのように定義することができます

    X = array([random() * 10.0 for i in range(0, 9)]) 
    

    (X - mean(X)) ** 2binomial theoremを適用
    std = (sum((X - mean(X)) ** 2)/len(X)) ** 0.5 # 1 
    

    我々が得る:

    identities考える
    std = (sum(X ** 2 - X * 2 * mean(X) + mean(X) ** 2)/len(X)) ** 0.5 # 2 
    

    を合計演算、我々は作ることができます:

    std = ((sum(X ** 2) - 2 * mean(X) * sum(X) + len(X) * mean(X) ** 2)/len(X)) ** 0.5 # 3 
    

    我々はS = sum(X)S2 = sum(X ** 2)M = mean(X)N = len(X)を作る場合は、我々が得る:

    P2が乗ピクセルの積分画像で画像 IIから算出された2枚の積分画像 PP2(のための今
    std = ((S2 - 2 * M * S + N * M ** 2)/N) ** 0.5 # 4 
    

    値)では、4つのエッジ座標A = (i0, j0),B = (i0, j1),C = (i1, j0)およびD = (i1, j1)が与えられた場合、S,の値

    S = P[A] + P[D] - P[B] - P[C] 
    
    S2 = P2[A] + P2[D] - P2[B] - P2[C] 
    
    N = (i1 - i0) * (j1 - j0) 
    
    M = S/N 
    

    次いで(4)範囲I[A:D]の標準偏差を生じる上記の式に適用することができる:、MNのように範囲I[A:D]について計算することができます。

    編集:それは全く必要ありませんが、M = S/N我々は方程式に以下の置換及び簡略化を適用することができますことを考えると(4):

    std = ((S2 - 2 * M * S + N * M ** 2)/N) ** 0.5 
    
    std = ((S2 - 2 * (S/N) * S + N * (S/N) ** 2)/N) ** 0.5 
    
    std = ((S2 - 2 * ((S ** 2)/N) + (S ** 2/N))/N) ** 0.5 
    
    std = ((S2 - ((S ** 2)/N))/N) ** 0.5 
    
    std = (S2/N - (S/N) ** 2) ** 0.5 # 5 
    

    実際、レミが与えた式に非常に近いですどの。