strong_corners = corners.selectStrongest(length(corners), scores > threshold);显示参数类型不正确?
时间: 2023-12-17 10:03:20 浏览: 183
对不起,我的回答有误。`selectStrongest`函数的第一个参数应该是要选择的角点数目,而不是角点集合的长度。因此,可以将第一个参数修改为想要选择的角点数目,例如100,代码如下:
```matlab
strong_corners = corners.selectStrongest(100, scores > threshold);
```
此外,还需要保证`scores`变量是角点得分的向量,长度与`corners`变量中存储的角点个数相同。如果使用`detectFASTFeatures`函数来检测角点,则可以直接从`corners`变量中获取每个角点的得分,代码如下:
```matlab
% 在图像中检测角点
corners = detectFASTFeatures(img, 'MinContrast', threshold, 'ROI', [1 1 size(img,2) size(img,1)], 'NumOctaves', 1, 'NumScaleLevels', 1, 'Radius', n);
% 获取每个角点的得分
scores = corners.Metric;
% 输出得分高于阈值的角点
strong_corners = corners.selectStrongest(100, scores > threshold);
```
如果使用其他的角点检测方法,则需要根据具体情况获取每个角点的得分,并将其存储在`scores`变量中。
相关问题
strong_corners=points.selectStrongest(length(points),points.Metric>0.1); 输入参数太多?
这个函数的输入有两个参数:第一个参数是需要选择的角点数目,第二个参数是一个逻辑矩阵,用于选择哪些角点。其中,`points`是输入的角点矩阵,`points.Metric`表示每个角点的质量指标。`length(points)`表示输入矩阵的长度。因此,这个函数的作用是选择输入矩阵中质量指标大于0.1的所有角点,并将这些角点按照质量指标从大到小排序,最后选择质量指标最高的`length(points)`个角点作为输出。
以下代码如何修正corners = cv2.goodFeaturesToTrack(gray, 200, 0.01, 20) corners = corners.astype(int) sorted_idx = np.lexsort((corners[:, 1], corners[:, 0])) sorted_corners = corners[sorted_idx]
这段代码中存在一个问题,即`goodFeaturesToTrack`函数返回的`corners`数组的元素类型为`float32`,而在后续的代码中需要将其转换为`int`类型。这样做可能会导致精度的损失,从而影响后续的计算结果。
为了修正这个问题,可以将`corners`数组在转换为`int`类型之前先进行四舍五入的操作,从而保留一定的精度。修改后的代码如下:
``` python
corners = cv2.goodFeaturesToTrack(gray, 200, 0.01, 20)
corners = np.round(corners).astype(int)
sorted_idx = np.lexsort((corners[:, 1], corners[:, 0]))
sorted_corners = corners[sorted_idx]
```
这样做可以避免精度损失,从而保证后续计算的准确性。
阅读全文