Fur*_*rin 4 python opencv sift
我刚刚发现 SIFT 将八度写入打包值(八度、图层和比例)。
我需要解压这个值,因为我必须将 SIFT 检测器与其他描述符(ORB、BRIEF、SURF、BRISK)结合使用。在这里您可以找到类似的问题。
我已经尝试了不同的解决方案(参见下面的代码),但似乎没有一个在 python 中工作(这个也是如此)。
有什么建议吗?
unpackOctave(keypoints[i], octave, layer, scale)
Run Code Online (Sandbox Code Playgroud)
或者:
unpackOctave(const KeyPoint& kpt, int& octave, int& layer, float& scale){
octave = kpt.octave & 255;
layer = (kpt.octave >> 8) & 255;
octave = octave < 128 ? octave : (-128 | octave);
scale = octave >= 0 ? 1.f/(1 << octave) : (float)(1 << -octave);
}
Run Code Online (Sandbox Code Playgroud)
我定义了一个 Python 函数来解压 SIFT Octave:
#!/usr/bin/python3
## 2018.01.23 11:12:30 CST
## created by Silencer
def unpackSIFTOctave(kpt):
"""unpackSIFTOctave(kpt)->(octave,layer,scale)
@created by Silencer at 2018.01.23 11:12:30 CST
@brief Unpack Sift Keypoint by Silencer
@param kpt: cv2.KeyPoint (of SIFT)
"""
_octave = kpt.octave
octave = _octave&0xFF
layer = (_octave>>8)&0xFF
if octave>=128:
octave |= -128
if octave>=0:
scale = float(1/(1<<octave))
else:
scale = float(1<<-octave)
return (octave, layer, scale)
Run Code Online (Sandbox Code Playgroud)
例如,我检测熊猫上的筛选 kpts。
用于unpackSiftOctave解压 sift kpts,获取(八度、图层、音阶)列表。解压结果的一部分。
[(0, 3, 1.0),
(1, 3, 0.5),
(-1, 3, 2.0),
(-1, 3, 2.0),
(2, 1, 0.25),
(2, 1, 0.25),
(-1, 1, 2.0),
(-1, 1, 2.0),
(0, 2, 1.0),
(1, 3, 0.5),
...
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1630 次 |
| 最近记录: |