我需要矩阵的元素平方。在 Matlab 中,我找到了这段代码: if A
is matrix thenA.^2
计算矩阵的元素平方。Emgu Cv 中是否有任何功能可以做到这一点?
实际上我需要矩阵的标准偏差。如果计算标准偏差的方法有计算标准偏差的功能,那么它对我会更有帮助。
我需要矩阵的元素平方。在 Matlab 中,我找到了这段代码: if A
is matrix thenA.^2
计算矩阵的元素平方。Emgu Cv 中是否有任何功能可以做到这一点?
实际上我需要矩阵的标准偏差。如果计算标准偏差的方法有计算标准偏差的功能,那么它对我会更有帮助。
逐元素平方与逐元素乘法与矩阵本身相同。因此,以下代码行应该可以解决问题(假设Matrix
is called mat
):
mat._Mul(mat);
请注意,尽管这会替换原来的mat
. 如果你想保存它,你可以这样做:
Matrix<byte> squaredMatrix = mat.Copy();
squaredMatrix._Mul(mat);
如果您想要标准偏差,那么Image
该类提供了一个AvgSdv
包装 OpenCV 等效函数的方法cvAvgSdv
。也许您可以通过将您的复制Matrix
到Image
第一个来做到这一点。
实施复制如下以供参考:
/// <summary>
/// Calculates the average value and standard deviation of array elements, independently for each channel
/// </summary>
/// <param name="average">The avg color</param>
/// <param name="sdv">The standard deviation for each channel</param>
/// <param name="mask">The operation mask</param>
public void AvgSdv(out TColor average, out MCvScalar sdv, Image<Gray, Byte> mask)
{
average = new TColor();
MCvScalar avgScalar = new MCvScalar();
sdv = new MCvScalar();
CvInvoke.cvAvgSdv(Ptr, ref avgScalar, ref sdv, mask == null ? IntPtr.Zero : mask.Ptr);
average.MCvScalar = avgScalar;
}
如果您的数据是图像而不是矩阵,则可以使用 Image(TColor, TDepth).Mul 方法:
http://www.emgu.com/wiki/files/2.3.0/document/html/01b9ba23-0058-3167-16ee-206a4befd7f3.htm
这是代码:
Iamge.Mul(Iamge, 1);
对于矩阵的标准差,请尝试 Image(TColor, TDepth).AvgSdv 方法。