python - 对于检测到的形状略有变化的 OpenCV,Hu 矩是否保持不变?

标签 python opencv image-processing colors object-detection

您可以在下面看到一组基于颜色作为主要特征表示的视频中检测到的属于同一对象的二进制形状。
shapes of object of interest
由于我在检测中依赖于对象颜色,因此二进制掩码图像中可能存在其他不相关的对象,因为它们只是具有与感兴趣的目标对象相似的颜色分布(要检测的对象是红色汽车或绿色汽车)例子)
我试图根据面积和纵横比来区分对象。但是,它没有有效地工作,因为有其他检测到的不相关对象,它们的面积和纵横比落在要检测的对象的边界内,如下图所示。
object and non object
在目标对象上方的图像中是顶部的白点。
并且由于照明效果很难保持颜色一致性,我试图使用额外的特征(例如 Hu 矩)来区分感兴趣的对象,因为 Hu 矩对于给定的形状是比例、位置和旋转不变的
如您所见,从视频的不同帧捕获的一组蒙版(见第一张图像)彼此略有不同。
那么尽管形状略有变化,胡矩会有所不同吗?如果它们保持不变,我如何将它们用作附加属性来使检测更准确?
我计算了不同帧的 7 个 Hu-Moments,结果是:

HuMoments
[[ 2.08520054e-01]
[ 1.69631372e-02]
[ 7.21551810e-05]
[ 6.90080950e-06]
[ 1.42410779e-12]
[-1.68289072e-07]
[-1.53980330e-10]]
HuMoments
[[ 2.06895709e-01]
[ 1.60840647e-02]
[ 3.30558368e-06]
[ 1.11390263e-07]
[-6.73641826e-14]
[ 1.41245011e-08]
[-5.54413536e-15]]
HuMoments
[[ 2.13862698e-01]
[ 1.92304207e-02]
[ 1.59852416e-06]
[ 3.25416763e-07]
[ 2.14353017e-13]
[ 1.50649139e-08]
[-9.55954816e-14]]
HuMoments
[[ 2.14002398e-01]
[ 1.92008910e-02]
[ 4.97181458e-06]
[ 4.78948215e-07]
[ 3.76015109e-13]
[-3.15822288e-08]
[-6.36277450e-13]]
HuMoments
[[ 2.06781829e-01]
[ 1.61130389e-02]
[ 8.62252599e-06]
[ 2.40464402e-07]
[ 2.97886471e-13]
[ 3.07837011e-09]
[-1.76507042e-13]]
HuMoments
[[ 2.05995932e-01]
[ 1.60756861e-02]
[ 7.67493642e-07]
[ 9.51817986e-08]
[ 2.14701063e-14]
[-3.25280940e-09]
[-1.41721342e-14]]
HuMoments
[[ 2.05805316e-01]
[ 1.54879330e-02]
[ 1.22114797e-04]
[ 1.25265644e-05]
[ 8.26008946e-11]
[-2.83389042e-07]
[-4.82914455e-10]]
HuMoments
[[ 2.09471113e-01]
[ 1.72160248e-02]
[ 2.20128873e-05]
[ 1.49897869e-06]
[-2.30866693e-12]
[-1.57913774e-07]
[-8.29529391e-12]]
HuMoments
[[2.15147844e-01]
[1.93443753e-02]
[8.08244156e-06]
[3.97563367e-06]
[2.20658357e-11]
[5.52855740e-07]
[4.58034173e-12]]
HuMoments
[[2.15429849e-01]
[1.93910849e-02]
[3.17392350e-05]
[1.45996626e-05]
[3.13970937e-10]
[1.99024297e-06]
[1.38642988e-11]]
HuMoments
[[ 2.11382574e-01]
[ 1.77909581e-02]
[ 2.79886054e-06]
[ 4.41359415e-06]
[ 1.53146745e-11]
[ 5.02198776e-07]
[-2.46891717e-12]]
HuMoments
[[2.12028845e-01]
[1.81061901e-02]
[1.15214622e-05]
[4.73220650e-06]
[3.35997756e-11]
[6.36751845e-07]
[9.59204224e-12]]
HuMoments
[[ 2.10406753e-01]
[ 1.72785541e-02]
[ 5.29421210e-06]
[ 9.58072012e-08]
[-2.65557753e-14]
[-1.25685175e-08]
[ 6.28538516e-14]]
HuMoments
[[2.17360183e-01]
[2.02630904e-02]
[6.14574197e-05]
[9.08990258e-06]
[2.13670968e-10]
[1.27309750e-06]
[2.24332748e-11]]
HuMoments
[[ 2.14532303e-01]
[ 1.87193203e-02]
[ 4.37330273e-05]
[ 5.07043463e-06]
[ 5.19617629e-11]
[-8.75846866e-08]
[-5.47804462e-11]]
提前致谢
对于下面的测试,是具有和不具有不相关对象的不同时间戳的对象掩码的图像以及原始图像之一
original_1
original_2
1
2
3

最佳答案

您可以尝试许多形状特征。
胡时刻对于您的情况当然值得一试。与大多数特征一样,当形状发生少量变化时,它们会发生少量变化,而当形状变化更强烈时,它们会发生更强烈的变化。但是,此声明仅适用于连续域。在离散域中,我们有一组近似于被成像对象的像素,并且该组的形状随着(子像素)平移、旋转和缩放而变化。对象越小,这些变化引入的相对差异就越大。
Hu 矩是根据高达 3 阶的中心矩计算的。阶数越高,时刻变化越小,变化越小。高阶矩对噪声更敏感。
前两个 Hu 矩只使用二阶中心矩,因此对噪声不敏感,更适用于非常小的物体。二阶矩描述了最适合该形状的椭圆。因此,前两个 Hu 矩将形状描述为椭圆:伸长率和与椭圆的相似性。
你应该添加到这个集合的其他特征是面积,也许像凸度或固体,和Podczeck shapes (尤其是与正方形的相似性似乎相关)。
您必须围绕您的理想值设置一些阈值,并且您应该从一组示例形状中确定这些阈值。

关于python - 对于检测到的形状略有变化的 OpenCV,Hu 矩是否保持不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63979571/

相关文章:

python - 遍历python sqlite数据库

opencv - 使用 haar 级联进行人员检测

c++ - 为 Raspberry PI 交叉编译 WebRTC+OpenCV

java - 将 XMP 写入多页 TIFF 的库

python - 有什么方法可以从图像中提取变形的矩形/正方形?

python - Polars 根据计算添加列抛出 TypeError : 'Expr' object is not subscriptable

python - GAE的webapp2_extra.i18n无法在MacOSX上导入babel

python - 如何将变量的值与该变量的名称联系起来?

matlab - 如何在opencv中将Matlab fft函数转换为cvDft

image-processing - 使用 ImageMagick 将图像转换为灰度非常暗