Ich habe eine Klasse mit ITK in CPP geschrieben, die alle Dateien in einem Verzeichnis liest und dann mittelt. Ich möchte diese Klasse in einer Pipeline verwenden, die mit Python erstellt wurde.Wie verwende ich eine ITK-Klasse in Python
Ich hatte zuvor versucht, Swig zu verwenden, Vorlagencode einzuschließen, aber gemäß der swig documenation, hat es keine Vorlagenunterstützung und die Typnamen müssen explizit angegeben werden. Aber wenn ich ITK in Python verwende, ist die Schnittstelle sehr unterschiedlich zu der, die ich von Swig-generierten Vorlage-Code erwarte (der Typ-Name ist überhaupt nicht in der Funktion/Klassenname angegeben, was im Gegensatz zu Swig-Dokumentation steht). für die Klasse in den Git repository gesehen werden kann
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();
Der Code:
Ein kleiner Ausschnitt aus meinem Code die Verwendung der Klasse darstellt, ist unten dargestellt. Ich habe kein Problem mit der Erhöhung der Abhängigkeiten von meinem Projekt mit Boost :: Python, aber ich brauche einen Ausgangspunkt, um fortzufahren. Jede Hilfe würde sehr geschätzt werden.
Danke.
UPDATE:
Erwartete Verwendung in Python wäre,
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())
Können Sie bitte erläutern, was Sie versucht haben und was fehlt mit SWIG Vorlagen Unterstützung? Ähnlich wie bei SWIG kann Boost.Python keine Vorlagen umbrechen, aber es kann Vorlageninstanzen umhüllen. Es kann extrem schwierig, wenn nicht sogar unmöglich sein, zwei Bindungsbibliotheken zu integrieren, da die meisten eine exklusive Kontrolle in Bezug auf Typentnahme und -verteilung haben. Auch die Git-Repository-Verbindung 404s. –
Nun, ich habe versucht, Template-Klassen mit SWIG zu instanziieren, aber die Verwendung ist sehr unterschiedlich (zum Beispiel wäre im obigen Filter die Python-Verwendung itk.NaryMeanImageFilter_UC() usw. für verschiedene Datentypen). Ich möchte, dass die Verwendung mit den verschiedenen ITK-Modulen konsistent ist. – scap3y