该类实现了修改后的 H. Hirschmuller 算法 [128],它与原始算法的不同之处如下:更多...
#include <opencv2/calib3d.hpp>
|
| static Ptr< StereoSGBM > | create (int minDisparity=0, int numDisparities=16, int blockSize=3, int P1=0, int P2=0, int disp12MaxDiff=0, int preFilterCap=0, int uniquenessRatio=0, int speckleWindowSize=0, int speckleRange=0, int mode=StereoSGBM::MODE_SGBM) |
| | 创建 StereoSGBM 对象。
|
| |
| template<typename _Tp > |
| static Ptr< _Tp > | load (const String &filename, const String &objname=String()) |
| | 从文件中加载算法。
|
| |
| template<typename _Tp > |
| static Ptr< _Tp > | loadFromString (const String &strModel, const String &objname=String()) |
| | 从字符串加载算法。
|
| |
| template<typename _Tp > |
| static Ptr< _Tp > | read (const FileNode &fn) |
| | 从文件节点读取算法。
|
| |
该类实现了修改后的 H. Hirschmuller 算法 [128],它与原始算法的不同之处如下:
- 默认情况下,该算法是单通道的,这意味着只考虑 5 个方向而不是 8 个。在 createStereoSGBM 中将 mode 设置为 StereoSGBM::MODE_HH 以运行完整变体算法,但请注意,它可能会消耗大量内存。
- 该算法匹配的是块,而不是单个像素。但是,将 blockSize=1 可以将块减少为单个像素。
- 互信息成本函数未实现。相反,使用的是一个更简单的来自 [29] 的 Birchfield-Tomasi 亚像素度量。不过,彩色图像也受支持。
- 包含 K. Konolige 算法 StereoBM 的一些预处理和后处理步骤,例如:预过滤(StereoBM::PREFILTER_XSOBEL 类型)和后过滤(唯一性检查、二次插值和散斑过滤)。
- 注意
- (Python)StereoSGBM 匹配算法的使用示例可在 opencv_source_code/samples/python/stereo_match.py 找到。
◆ 匿名枚举
| 枚举器 |
|---|
| MODE_SGBM | |
| MODE_HH | |
| MODE_SGBM_3WAY | |
| MODE_HH4 | |
◆ create()
| static Ptr< StereoSGBM > cv::StereoSGBM::create |
( |
int | minDisparity = 0, |
|
|
int | numDisparities = 16, |
|
|
int | blockSize = 3, |
|
|
int | P1 = 0, |
|
|
int | P2 = 0, |
|
|
int | disp12MaxDiff = 0, |
|
|
int | preFilterCap = 0, |
|
|
int | uniquenessRatio = 0, |
|
|
int | speckleWindowSize = 0, |
|
|
int | speckleRange = 0, |
|
|
int | mode = StereoSGBM::MODE_SGBM ) |
|
static |
| Python |
|---|
| cv.StereoSGBM.create( | [, minDisparity[, numDisparities[, blockSize[, P1[, P2[, disp12MaxDiff[, preFilterCap[, uniquenessRatio[, speckleWindowSize[, speckleRange[, mode]]]]]]]]]]] | ) -> | retval |
| cv.StereoSGBM_create( | [, minDisparity[, numDisparities[, blockSize[, P1[, P2[, disp12MaxDiff[, preFilterCap[, uniquenessRatio[, speckleWindowSize[, speckleRange[, mode]]]]]]]]]]] | ) -> | retval |
创建 StereoSGBM 对象。
- 参数
-
| minDisparity | 可能的最小视差值。通常为零,但有时校正算法会使图像发生偏移,因此需要相应地调整此参数。 |
| numDisparities | 最大视差减去最小视差。该值始终大于零。在当前实现中,此参数必须能被 16 整除。 |
| blockSize | 匹配块大小。它必须是大于等于 1 的奇数。通常,它应在 3..11 的范围内。 |
| P1 | 控制视差平滑度的第一个参数。详见下文。 |
| P2 | 控制视差平滑度的第二个参数。值越大,视差越平滑。P1 是相邻像素间视差变化加一或减一的惩罚。P2 是相邻像素间视差变化大于一的惩罚。算法要求 P2 > P1。请参见 stereo_match.cpp 示例,其中显示了一些合理的 P1 和 P2 值(例如,分别为 8*图像通道数*blockSize*blockSize 和 32*图像通道数*blockSize*blockSize)。 |
| disp12MaxDiff | 左右视差检查中允许的最大差异(以整数像素为单位)。将其设置为非正值可禁用此检查。 |
| preFilterCap | 预过滤图像像素的截断值。算法首先计算每个像素的 x 导数,并将其值裁剪到 [-preFilterCap, preFilterCap] 区间。结果值被传递给 Birchfield-Tomasi 像素成本函数。 |
| uniquenessRatio | 最佳(最小)计算成本函数值“胜过”次佳值的百分比裕度,以认为找到的匹配是正确的。通常,5-15 范围内的值就足够了。 |
| speckleWindowSize | 平滑视差区域的最大大小,以将其视为噪声散斑并使其失效。将其设置为 0 以禁用散斑过滤。否则,将其设置在 50-200 范围内。 |
| speckleRange | 每个连通分量内的最大视差变化。如果您进行散斑过滤,请将此参数设置为正值,它将隐式乘以 16。通常,1 或 2 就足够了。 |
| mode | 将其设置为 StereoSGBM::MODE_HH 以运行全尺寸的两遍动态规划算法。它将消耗 O(W*H*numDisparities) 字节,这对于 640x480 立体图像来说很大,对于高清尺寸的图像来说更是巨大。默认情况下,它设置为 false。 |
第一个构造函数使用所有默认参数初始化 StereoSGBM。因此,您至少只需设置 StereoSGBM::numDisparities。第二个构造函数允许您将每个参数设置为自定义值。
◆ getMode()
| virtual int cv::StereoSGBM::getMode |
( |
| ) |
const |
|
纯虚函数 |
| Python |
|---|
| cv.StereoSGBM.getMode( | | ) -> | retval |
◆ getP1()
| virtual int cv::StereoSGBM::getP1 |
( |
| ) |
const |
|
纯虚函数 |
| Python |
|---|
| cv.StereoSGBM.getP1( | | ) -> | retval |
◆ getP2()
| virtual int cv::StereoSGBM::getP2 |
( |
| ) |
const |
|
纯虚函数 |
| Python |
|---|
| cv.StereoSGBM.getP2( | | ) -> | retval |
◆ getPreFilterCap()
| virtual int cv::StereoSGBM::getPreFilterCap |
( |
| ) |
const |
|
纯虚函数 |
| Python |
|---|
| cv.StereoSGBM.getPreFilterCap( | | ) -> | retval |
◆ getUniquenessRatio()
| virtual int cv::StereoSGBM::getUniquenessRatio |
( |
| ) |
const |
|
纯虚函数 |
| Python |
|---|
| cv.StereoSGBM.getUniquenessRatio( | | ) -> | retval |
◆ setMode()
| virtual void cv::StereoSGBM::setMode |
( |
int | mode | ) |
|
|
纯虚函数 |
| Python |
|---|
| cv.StereoSGBM.setMode( | mode | ) -> | 无 |
◆ setP1()
| virtual void cv::StereoSGBM::setP1 |
( |
int | P1 | ) |
|
|
纯虚函数 |
| Python |
|---|
| cv.StereoSGBM.setP1( | P1 | ) -> | 无 |
◆ setP2()
| virtual void cv::StereoSGBM::setP2 |
( |
int | P2 | ) |
|
|
纯虚函数 |
| Python |
|---|
| cv.StereoSGBM.setP2( | P2 | ) -> | 无 |
◆ setPreFilterCap()
| virtual void cv::StereoSGBM::setPreFilterCap |
( |
int | preFilterCap | ) |
|
|
纯虚函数 |
| Python |
|---|
| cv.StereoSGBM.setPreFilterCap( | preFilterCap | ) -> | 无 |
◆ setUniquenessRatio()
| virtual void cv::StereoSGBM::setUniquenessRatio |
( |
int | uniquenessRatio | ) |
|
|
纯虚函数 |
| Python |
|---|
| cv.StereoSGBM.setUniquenessRatio( | uniquenessRatio | ) -> | 无 |
此类的文档是从以下文件生成的