Ho scritto una classe utilizzando ITK in CPP che legge tutti i file in una directory e quindi li media. Mi piacerebbe usare questa classe in una pipeline costruita usando Python.Come utilizzare una classe ITK in Python
Avevo già provato a utilizzare Swig per avvolgere il codice del modello, ma secondo lo swig documenation, non ha il supporto dei modelli e i nomi dei tipi devono essere specificati esplicitamente. Ma quando uso lo ITK in Python, l'interfaccia è molto diversa da quella che mi aspetto dal codice del template generato da Swig (il nome del tipo non è specificato nel nome della funzione/classe, il che è contrario a ciò che dice la documentazione di Swig).
Un piccolo frammento dal mio codice illustra l'utilizzo della classe è stata di:
typedef unsigned char PixelType;
typedef itk::Image<PixelType, 2> ImageType;
typedef itk::NaryMeanImageFilter< ImageType, ImageType > FilterType; // custom class
typedef itk::ImageFileReader<ImageType> ReaderType;
typedef itk::ImageFileWriter<ImageType> WriterType;
ImageType::Pointer image = ImageType::New();
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
FilterType::Pointer filter = FilterType::New(); // custom class
for (unsigned int i = 0; i< fileNames.size(); ++i)
{
reader->SetFileName(fileNames[i]);
filter->SetInput(i, reader->GetOutput()); // custom class
}
writer->SetFileName(outName);
writer->SetInput(filter->GetOutput());
writer->Update();
Il codice della classe può essere visto nel Git repository. Non ho un problema con l'aumento delle dipendenze del mio progetto usando Boost :: Python ma ho bisogno di un punto di partenza per procedere. Qualsiasi aiuto sarebbe estremamente apprezzato.
Grazie.
UPDATE:
utilizzo atteso in Python sarebbe,
readerType=itk.ImageFileReader[inputImageType]
reader=readerType.New()
filterType=itk.NaryMeanImageFilter[inputImageType,inputImageType]
filter=filterType.New()
for i in range(0, fileNames.size()):
reader.SetFileName(fileNames[i])
filter.SetInput(i, reader->GetOutput())
Puoi per favore approfondire cosa hai provato e cosa manca con il supporto dei modelli di SWIG? Simile a SWIG, Boost.Python non può eseguire il wrapping dei modelli, ma può eseguire il wrapping di istanze del modello. Può essere estremamente difficile, se non impossibile, integrare due librerie di rilegatura, dato che la maggior parte ha un controllo esclusivo per quanto riguarda l'estrazione e la distribuzione dei caratteri. Inoltre, il link git link 404s. –
Beh, ho provato a creare istanze di classi di template usando SWIG ma l'uso è molto diverso (ad esempio, nel filtro precedente, l'uso di Python sarebbe itk.NaryMeanImageFilter_UC(), ecc. Per diversi tipi di dati). Vorrei che l'utilizzo fosse coerente con i diversi moduli ITK – scap3y