Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[pcl::2d] Keypoint module implementation is broken and incompatible with updated Convolution/Edge/Kernel classes

Aperta
#6,395 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 4 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
cpp

Direzione di ricerca

Inizia leggendo pcl/2d/impl/keypoint.hpp insieme alle API Convolution ed Edge in pcl/2d, quindi compila l’esempio minimo std::vector<std::vector> dell’issue. Traccia l’ImageType previsto e l’ambito dell’aggiornamento, comprese le chiamate mancanti a Gaussian/convolution e l’implementazione della derivata; il lavoro è completato quando l’esempio Keypoint viene compilato con le API correnti senza gli errori di tipo o di metodo segnalati.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

kind: bug status: triage

Description

I encountered severe compilation errors and design inconsistencies when trying to use the pcl::2d::Keypoint module. It appears that the implementation of Keypoint in pcl/2d/impl/keypoint.hpp has not been updated to match the current API of its dependencies (pcl::2d::Convolution, pcl::2d::Edge, and pcl::2d::Kernel).

The code seems to rely on legacy methods that no longer exist or have been renamed, and there is a fundamental type incompatibility between Keypoint and Convolution.

Steps to Reproduce

  1. Include pcl/2d/keypoint.h

  2. Try to instantiate pcl::Keypoint with a standard PointCloud type or a vector type.

    #include <pcl/2d/keypoint.h>
    #include <pcl/point_cloud.h>
    #include <pcl/point_types.h>
    
    int main() {
      // Define the ImageType that meets the requirements of the source code (no longer PointCloud)
      using ImageType = std::vector<std::vector<float>>;
    
      int width = 20;
      int height = 20;
      ImageType input(height, std::vector<float>(width, 0.0f));
      ImageType output;
      
      for (int r = 5; r <= 15; ++r) {
        for (int c = 5; c <= 15; ++c) {
          input[r][c] = 255.0f;
        }
      }
    
      pcl::Keypoint<ImageType> keypoint;
      // Args: output, input, sigma_d, sigma_i, alpha, thresh
      keypoint.harrisCorner (output, input, 1.0f, 2.0f, 0.04f, 1e-5f); // compile error
    
      return 0;
    }
    

Detailed Errors

I have identified the following critical issues in pcl/2d/impl/keypoint.hpp:

1. Missing Methods in Convolution

The Keypoint implementation calls methods on the conv_2d object (type pcl::Convolution) that do not exist:

  • Called: conv_2d.gaussianKernel(5, sigma, kernel_y);
    • Reality: pcl::Convolution has no gaussianKernel method. This method seems to belong to the pcl::kernel class.
  • Called: conv_2d.convolve(output, input, kernel_y);
    • Reality: pcl::Convolution uses the standard PCL Filter interface. The method is likely filter(), or the class usage is completely wrong here.
2. Missing Methods in Edge

The code calls edge_detection.ComputeDerivativeXCentral(...). However, this method only has a declaration and has not been implemented.

3. Fundamental Type Incompatibility

The pcl::Keypoint class seems to be written assuming ImageType is a std::vector<std::vector<T>> (nested vector), as seen by the access pattern input[i][j] in keypoint.hpp.

However, pcl::Convolution and pcl::Edge explicitly require pcl::PointCloud<PointT> as their template argument and input types.

  • If I pass pcl::PointCloud to Keypoint: keypoint.hpp fails because PointCloud does not support [i][j] indexing (it uses (col, row) or flat indexing).
  • If I pass std::vector<std::vector<T>> to Keypoint: convolution.h fails because it expects a class with .width, .height and points members.

Environment

  • OS: 6.18.5-arch1-1
  • Compiler: gcc 15.2.1
  • PCL: Master branch
Lingua principale
C++
Stelle
11.2k
Fork
4.7k
Merge medio
5g 8h
PR unite (30g)
10

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di PointCloudLibrary/pcl

Tutte le issue di PointCloudLibrary/pcl

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.