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
...
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.
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:
... 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.
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).
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
https://sci.utah.edu/~shapeworks/doc-resources/mp4s/nb-groom-resample.mp4
versus itkwidgets mit physikalischer Koordinate
https://sci.utah.edu/~shapeworks/doc-resources/mp4s/nb-groom-resample-iso.mp4
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.
Hier ist ein einzelnes Pyvista-Volumen, das sowohl das nicht skalierte Ellipsoid als auch die skalierte Version zeigt.
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.