画像積分の平均、標準偏差、勾配はどのようにして求められますか?画像を指定された次のような:画像の積分を計算する
を強調した部分の総和、sum = C+A-B-D
を見つけるために、上記の図に示すように。
だから我々はsum = 22
を持っています。私は見つけるために次の続行するにはどうすればよい
:
- グラデーション
画像積分の平均、標準偏差、勾配はどのようにして求められますか?画像を指定された次のような:画像の積分を計算する
を強調した部分の総和、sum = C+A-B-D
を見つけるために、上記の図に示すように。
だから我々はsum = 22
を持っています。私は見つけるために次の続行するにはどうすればよい
:
C+A-B-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
演算子を使用したくないですか?
あなたは、積分画像を使って計算平均とdevは特にランダムな場所やサイズで速いと言いました。次に、イメージ全体に適用するのが遅いということですか? Sobelオペレータは高速ですか? – Mzk
勾配を計算するために、sobelは慎重な実装(周波数領域での畳み込み)で高速です。固定サイズの近隣の各ピクセルで平均値を取得する必要がある場合は、boxFilterを使用するとよいでしょう。おそらくもっと速いかもしれませんが、わかりません。それは私の意見では数ミリ秒の問題です。しかし、あなたはこの方法で開発者を取得しないでください。スピードが必要な場合、積分画像は良いオプションです。 – remi
@remi数式は正しいですか?少なくとも平均値?それは(C + A-B-D)/ 4ではありませんか? – maximus
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ありません。
jmchが言っていないのは、sqrt(C'+A'-B'-D'/K - (mean*mean))
が積分画像から標準偏差をどのように計算すればいいのですか?
まず、Python/numpyコードに切り替えるようにしてください。そこで、表記の一貫性を犠牲にして、式を確認しやすくしています。サンプル配列Xを考えると、言う:X
のuncorrected sample standard deviationのように定義することができます
X = array([random() * 10.0 for i in range(0, 9)])
:
(X - mean(X)) ** 2
に
binomial 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
が乗ピクセルの積分画像で画像
I
と
I
から算出された2枚の積分画像
P
と
P2
(のための今
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]
の標準偏差を生じる上記の式に適用することができる:、M
とN
のように範囲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
実際、レミが与えた式に非常に近いですどの。
ご質問が一切ありません。あなたはそれを改善できますか? – ArtemStorozhuk
イメージ部分(ROI)の_mean_、_std dev_、_gradient_を探したいですか? – ArtemStorozhuk
すべての画像の平均、標準偏差、勾配を求めます。 – Mzk