Shapeworks: Das Rendern von Volumes einiger Auflösungen stĂŒrzt ab, wenn itkwidgets.view verwendet wird, nachdem Shapeworks in einem Notizbuch verwendet wurde

Erstellt am 23. MĂ€rz 2021  Â·  22Kommentare  Â·  Quelle: SCIInstitute/ShapeWorks

FrĂŒher stĂŒrzte das Notebook unter MacOS mit der Pflege von Segmentierungen ab, aber viele Untersuchungen haben das eigentliche Problem aufgedeckt, möglicherweise aufgrund inkompatibler gemeinsam genutzter Bibliotheken.

Sauberes System, sauberer Zustand.

Dies ist die Zelle, die abstĂŒrzt:

shapeSeg = shapeSegList[10]
itkw.view( image          = sw2vtkImage(shapeSeg),
           slicing_planes = True,
           axes           = True,
           rotate         = True,
           interpolation  = True)
Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x000000014b76fff3
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Segmentation fault: 11
Termination Reason:    Namespace SIGNAL, Code 0xb
Terminating Process:   exc handler [0]

VM Regions Near 0x14b76fff3:
    MALLOC_LARGE           000000014b50a000-000000014b769000 [ 2428K] rw-/rwx SM=PRV  
--> 
    MALLOC_LARGE           000000014b770000-000000014d863000 [ 32.9M] rw-/rwx SM=PRV  

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_platform.dylib        0x00007fff564c85e6 _platform_memmove$VARIANT$Nehalem + 486
1   libvnl.dylib                    0x000000010ae40e6b vnl_vector<double>::operator=(vnl_vector<double> const&) + 139
2   _ITKCommonPython.so             0x000000014ec0d18b vnl_vector<double>::operator=(vnl_vector<double>&&) + 65
3   _ITKCommonPython.so             0x000000014eadec9d 0x14de03000 + 13483165
4   _ITKCommonPython.so             0x000000014e869165 0x14de03000 + 10903909
5   _ITKCommonPython.so             0x000000014ec611a7 itk::ProcessObject::UpdateOutputInformation() + 339
6   _ITKCommonPython.so             0x000000014e47d8fe 0x14de03000 + 6793470
7   _ITKImageGridPython.so          0x00000001538b5619 itk::ProcessObject::UpdateOutputInformation() + 117
8   _ITKImageGridPython.so          0x00000001538b5ebc itk::ProcessObject::UpdateLargestPossibleRegion() + 18
9   _ITKCommonPython.so             0x000000014e10726b 0x14de03000 + 3162731
10  python                          0x00000001044c8843 _PyMethodDef_RawFastCallKeywords + 131
11  python                          0x00000001044c81d6 _PyObject_FastCallKeywords + 598
12  python                          0x0000000104600bb7 call_function + 455
...
bug

Alle 22 Kommentare

Ja, ich versuche es jetzt auszufĂŒhren und treffe den gleichen Absturz, genau hier:
`` `shapeSeg = shapeSegList [10]
itkw.view (image = sw2vtkImage (shapeSeg),
slicing_planes = True,
Achsen = Richtig,
drehen = Wahr,
Interpolation = Wahr)

Das Problem wurde vereinfacht und es sieht so aus, als ob Image :: resample hier der Schuldige ist. Nach dem Resampling lÀdt ellipsoid_05 den Viewer, wÀhrend ellipsoid_00 den Kernel zum Absturz bringt, wenn versucht wird, itk.view () zu verwenden.

Screen Shot 2021-03-24 at 11 02 20 PM

Screen Shot 2021-03-24 at 11 01 06 PM

Nach dem Testen kann mit Image :: resample wrt itkwidgets.view etwas falsch sein.
Bilder versucht: ellipsoid_1mode / segmentations / ellipsoid_00.nrrd und ellipsoid_1mode / segmentations / ellipsoid_05.nrrd
-> 00 wird nicht geplottet, wenn pyvista nach dem Resampling in ein vtk-Bild eingewickelt wird
-> 05 funktioniert gut
=> _both_ funktionieren gut, wenn sie von pyvista gezeichnet werden
Ich habe einige Debug-Spucke in Image :: resample geworfen und bisher nichts Außergewöhnliches gesehen.

Hier ist ein einfaches Notizbuch, wenn Sie experimentieren möchten.
wanty_washy_resample.ipynb.zip

... und wie es beim Laden leer aussieht:
Screen Shot 2021-03-24 at 7 59 23 PM

... und wie es aussieht, wenn Sie es ausfĂŒhren. Ändern Sie 05 in 00 und fĂŒhren Sie es erneut aus, um abzustĂŒrzen, wenn itkw versucht zu rendern.
Screen Shot 2021-03-24 at 7 55 29 PM

Transponieren oder ... Das Array, das gerendert werden könnte
Wenn Sie sich erinnern, können itkwidgets ein numpy-Array direkt rendern. Aber es interpretiert dieses Array als die Transponierte dessen, was ĂŒbergeben wird, etwas, was es nicht tut, wenn ein vtk-Array verwendet wird. Daher transponieren wir normalerweise das, was wir aus dem Image erhalten, bevor wir es in ein vtk-Array einbinden, und verwenden einfach das vtk-Array mit itkwidgets, um die Dinge einfach zu halten.

Ich habe beide heute Morgen ausprobiert und leider macht es keinen Unterschied. Transponiert oder nicht, numpy oder vtk Arrays, alles stĂŒrzt ab, wenn versucht wird, mit itkwidgets nach Image.resample zu rendern.

Kopieren oder ... wiederhole ich mich?
Das vom Image kommende Array könnte das Problem sein. Vielleicht deutet es auf einen ungĂŒltigen Speicher hin. Also erstellen wir eine Kopie!
Nachdem ich das Array kopiert habe - sowohl in order='C' als auch in order='F' , transponiere, modifiziere, beim Komponieren der Funktionen auf meinem Kopf stehe und wunschgemĂ€ĂŸ ĂŒber alles nachdenke, stĂŒrzt es immer noch jedes Mal ab.

Dies deutete darauf hin, dass die GrĂ¶ĂŸe des Arrays selbst ein Problem sein könnte. Eine Möglichkeit, dies zu bestĂ€tigen, bestand darin, Resample mit demselben Abstand ( [1,1,2] ) aufzurufen, was gut funktionierte. Eine andere Möglichkeit bestand darin, ein falsches numpy-Array dieser fraglichen GrĂ¶ĂŸe zu erstellen. Und...
Trommelwirbel bitte...
prÀsentieren ...
zum ersten Mal ĂŒberhaupt ... (in GitHub)
Ein _shapeworks-free_ Repro!

array = np.ndarray([109, 77, 204])
itkw.view(image = array)

Also steck das in dein Notizbuch und rauch * es.

* Rauch bedeutet Absturz, befĂŒrwortet nicht das tatsĂ€chliche Einatmen von irgendetwas. Beachten Sie, dass dies eine Nichtrauchereinrichtung ist, die fĂŒr kein anderes Angebot gĂŒltig ist. Ich hoffe trotzdem, dass jemand lĂ€chelt, denn das ist nicht unser Problem! Nur dass es so ist. 😞

array = np.ndarray([109, 77, 204])
itkw.view(image = array)
array = np.ndarray([109, 109, 204])
itkw.view(image = array)



md5-047f51858ff0a12b3bec85f300fc2efa



array = np.ndarray([109, 109, 109])
itkw.view(image = array)

Alle diese Beispiele rendern den itk-Viewer, wenn Shapeworks nicht importiert wird.
Es stĂŒrzt ab, wenn Shapeworks importiert wird.

Hmm, haben wir eine Interaktion zwischen Conda Itk / Vtk und Shapeworks Itk / Vtk-Bibliothek?

Ich denke, itkwidgets verwendet eine andere Version von itk

Die Reihenfolge des Imports ist nicht wichtig, die Reihenfolge der Verwendung jedoch. Das heißt, wenn Sie alles importieren, aber itkwidgets vor Shapeworks verwenden, stĂŒrzt es ab, wenn Sie Shapeworks verwenden, und umgekehrt.

Da die Lösung fĂŒr # 1179 einfach "itk nicht verwenden" lautete, schlage ich vor, dass wir dieses Problem auf dieselbe Weise lösen. Wenn es derzeit keine bessere Option gibt, entfernen wir itkwidgets von unseren Notebooks.

Das klingt vorerst nach einem guten Plan. Ist es sinnvoll, itkwidgets von den Notebooks zu entfernen? WofĂŒr verwenden wir es?

Wir verwenden es, um die Segmentierungen anzuzeigen. Ich denke, wir können stattdessen Pyvista verwenden

Beachten Sie, dass pyvista (soweit ich weiß) die Bild-Metainformationen (Ursprung, Voxelabstand, Achsenrichtung) nicht berĂŒcksichtigt, itkwidget jedoch.

Beachten Sie, dass pyvista (soweit ich weiß) die Bild-Metainformationen (Ursprung, Voxelabstand, Achsenrichtung) nicht berĂŒcksichtigt, itkwidget jedoch.

Wir werden uns damit befassen, aber es muss ein gewisser Respekt fĂŒr die Herkunft bestehen, da mehrere Volumina gleichzeitig mit unterschiedlichen Positionen geplottet werden können. Dieses Bild zeigt, dass der Abstand zum Plotten verwendet wird. Unsere sw2vtkImage-Funktion (en) haben es einfach nicht beibehalten (ich weiß, dass ich dies in einigen geĂ€ndert habe, aber vielleicht befinden sich diese in der neuen Pybind-Verzweigung).

Screen Shot 2021-03-26 at 1 34 32 PM

Ich möchte vorschlagen, dass wir dies veröffentlichen und auf die nĂ€chste Version verschieben, da diese viele andere Python- und Notebook-Verbesserungen aufweist, und wir werden im Wesentlichen gezwungen sein, sie neu zu schreiben. Vielleicht lassen wir sie einfach kaputt gehen. Es ist ein bekanntes Problem in einem öffentlichen Repository, und wir haben eine Problemumgehung fĂŒr den Fall, dass Benutzer darauf stoßen.

(Wir mĂŒssen das Notizbuch "Erste Schritte mit Segmentierungen" noch so Ă€ndern, dass es ohne Absturz abgeschlossen wird. Dies bedeutet einfach, dass Sie ein anderes beliebiges Bild auswĂ€hlen, um das Rendern zu demonstrieren.)

Genau. Lassen Sie uns dies auf Version 6.1 verschieben, und ich werde die Versionshinweise und die grafische Zusammenfassung aktualisieren, um Python-Inhalte zu deaktivieren.

Nachdem Sie ein beliebiges Bild verwendet haben, das den Betrachter nicht zum Absturz bringt, stĂŒrzt es an drei weiteren Stellen ab, an denen das Bild mit mittlerer Form verwendet wird.
@cchriste

Ich schlage vor, dass wir dieses Notizbuch von der Veröffentlichung ausschließen, außer in der Dokumentation.

Funktioniert bei mir. @ Sheryjoe ?

Pyvista mit logischen Koordinaten
versus itkwidgets mit physikalischer Koordinate

Angesichts der Ausgabe Nr. 900 ist es schwer vorstellbar, dass itk jemals physikalische Koordinaten gezeigt hat.

FĂŒr dieses Bild (mit z-Abstand = 2):

{
    dims: [93, 87, 94],
    origin: [-24, -19, -21],
    size: [93, 87, 188],
    spacing: [1, 1, 2]
}

Der itk-Viewer kann nur die nicht skalierte Version anzeigen, da sie sonst abstĂŒrzt.
Screen Shot 2021-03-30 at 3 57 34 PM

Hier ist ein einzelnes Pyvista-Volumen, das sowohl das nicht skalierte Ellipsoid als auch die skalierte Version zeigt.
Screen Shot 2021-03-30 at 3 56 20 PM

Ich mag die Art und Weise, wie der Pyvista-Viewer Grenzen zeigt, im Vergleich zum Itk-Viewer nicht wirklich.
Aber sie haben Recht und zeigen physikalische Koordinaten.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen