画像積分から平均、標準偏差、勾配をどのように見つけるのですか?次のような画像が与えられます:
上の図に示すように、強調表示された部分の合計を見つけるには、sum = C+A-B-D
。
だから私たちは持っていsum = 22
ます。
次を見つけるために次に進むにはどうすればよいですか?
- 平均
- 標準偏差
- 勾配
画像積分から平均、標準偏差、勾配をどのように見つけるのですか?次のような画像が与えられます:
上の図に示すように、強調表示された部分の合計を見つけるには、sum = C+A-B-D
。
だから私たちは持っていsum = 22
ます。
次を見つけるために次に進むにはどうすればよいですか?
C+A-B-D
A、B、C、Dで区切られたゾーンのグレーレベルの合計が得られるので、平均を取得するには、ゾーンの面積でそれをダイビングする必要があります。
mean = (C+A-B-D)/4
開発者を取得するには、正方形の面積の合計テーブルを計算する必要があります(cv::integral
追加のパラメーターを渡して正方形の合計を取得できます)。ウィキペディアを引用すると、標準偏差はの平方根に等しくなります(二乗の平均から平均の二乗を引いたもの)。したがって、A'、B'、C'、D'と仮定すると、正方形の面積テーブルの値は次のようになります。
dev = sqrt((C'+A'-B'-D')/4 - (mean*mean))
したがって、積分画像を使用した平均と開発の計算は、特にランダムな位置とランダムなサイズの画像パッチでこれらの量を計算する場合は、積分画像を使用すると非常に高速になります。
グラデーションに関しては、もっと複雑です。sobel
演算子を使用したくないですか?
C + ABCがゾーン内のすべてのグレーレベルの合計である場合、平均は
mean = C+A-B-D/4
しかし
mean = C+A-B-D/K
ここで、Kはゾーン内のグレーレベルの数です。
また、
dev = sqrt( C'+A'-B'-D'/4 - (mean*mean) )
stdevではありません。なぜなら
dev = sqrt( (1/N)*sum_N ( x_i - u )^2 )
ここでの方程式は次の式に相当します
dev = sqrt( (1/N)*sum_N ( (x_i)^2 ) - u^2 )
これらの方程式は同等ではありません。
jmchが言っていないのはsqrt( C'+A'-B'-D'/K - (mean*mean) )
、積分画像から標準偏差を計算する方法ではない場合、それをどのように行うかということです。
まず、Python / numpyコードに切り替えて、表記の一貫性を少し高め、式を確認しやすくします。サンプル配列Xが与えられた場合、次のように言います。
X = array([random() * 10.0 for i in range(0, 9)])
の未修正のサンプル標準偏差は、次のX
ように定義できます。
std = (sum((X - mean(X)) ** 2) / len(X)) ** 0.5 # 1
二項定理を適用すると、次のよう(X - mean(X)) ** 2
になります。
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)
ます。
std = ((S2 - 2 * M * S + N * M ** 2) / N) ** 0.5 # 4
ここで、1つの画像I
と2つの積分画像について、 (は2乗ピクセル値の積分画像です)から計算するP
と、 4つのエッジ座標、、、およびが与えられた場合、、、の値は次のように範囲に対して計算できることがわかります。P2
I
P2
A = (i0, j0)
B = (i0, j1)
C = (i1, j0)
D = (i1, j1)
S
S2
M
N
I[A:D]
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 = 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
これは、実際、レミが与えた方程式に非常に近いものです。