telespazio-tim / karios

Python application based on KLT Algorithm for Registration of Images from Observing Systems (KARIOS)
Apache License 2.0
10 stars 5 forks source link

`max_corners < 0` is not a valid input, despite documentation #3

Closed DFEvans closed 2 months ago

DFEvans commented 4 months ago

The README states that:

maxCorners : Maximum number of corners to extract. If there are more corners than are found, the strongest of them is returned. maxCorners <= 0 implies that no limit on the maximum is set and all detected corners are returned.

This suggests that an input such as "maxCorners": -1 in the configuration is valid. However, doing so fails, because opencv does not permit negative values for this parameter:

Traceback (most recent call last):
  File "/home/danielevans/repositories/karios/karios/karios.py", line 319, in <module>
    sys.exit(main(sys.argv[1:]))
             ^^^^^^^^^^^^^^^^^^
  File "/home/danielevans/repositories/karios/karios/karios.py", line 313, in main
    match_and_plot.process(args.mon, args.ref, args.mask, args.resume)
  File "/home/danielevans/repositories/karios/karios/karios.py", line 280, in process
    points = self._get_points(resume, monitored_image, reference_image, mask)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/danielevans/repositories/karios/karios/karios.py", line 148, in _get_points
    points = self._do_klt(monitored_image, reference_image, mask, csv_file)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/danielevans/repositories/karios/karios/karios.py", line 127, in _do_klt
    points = self._handle_klt_results(dataframe_gen, csv_file)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/danielevans/repositories/karios/karios/karios.py", line 64, in _handle_klt_results
    for dataframe in results:
  File "/home/danielevans/repositories/karios/karios/klt_matcher/matcher.py", line 200, in match
    points = self._match_tile(x_off, y_off, mon_img, ref_img, mask)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/danielevans/repositories/karios/karios/klt_matcher/matcher.py", line 261, in _match_tile
    results = klt_tracker(
              ^^^^^^^^^^^^
  File "/home/danielevans/repositories/karios/karios/klt_matcher/matcher.py", line 100, in klt_tracker
    p0 = cv2.goodFeaturesToTrack(ref_data, mask=mask, **feature_params)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cv2.error: OpenCV(4.8.1) /home/conda/feedstock_root/build_artifacts/libopencv_1698890291961/work/modules/imgproc/src/featureselect.cpp:389: error: (-215:Assertion failed) qualityLevel > 0 && minDistance >= 0 && maxCorners >= 0 in function 'goodFeaturesToTrack'

Using a value of 0 works as expected.