Frage

Ich habe ein kleines Python VTK Funktion, die das Volumen und die Oberfläche eines Objekts in einem Stapel von TIFF eingebettet berechnet Bilder. Um die TIFF's in VTK zu lesen, habe ich verwendet vtkTIFFReader und das Ergebnis mit vtkImageThreshold verarbeitet. Ich verwende vtkMassProperties dann nach Schwellwertbildung identifiziert das Volumen und die Oberfläche des Objektes zu extrahieren.

Mit VTK-5.04, gibt diese Funktion den richtigen Wert für einen Teststapel (3902 Pixel). Jedoch kehrt Verwendung VTK-5.4.2 die gleiche Funktion einen anderen Wert (422 Pixel). Kann man das jemand erklären?


Code

def testvtk():
    # read 36 TIFF images. Each TIFF is 27x27 pixels
    v16=vtk.vtkTIFFReader()
    v16.SetFilePrefix("d:/test/slice")
    v16.SetDataExtent(0,27,0,27,1,36)
    v16.SetFilePattern("%s%04d.tif")
    v16.SetDataSpacing (1,1,1)
    v16.Update()

    # Threshold level for seperating background/foreground pixels
    maxthres=81

    # Threshold the image stack
    thres=vtk.vtkImageThreshold()
    thres.SetInputConnection(v16.GetOutputPort())
    thres.ThresholdByLower(0)
    thres.ThresholdByUpper(maxthres)

    # create ISO surface from thresholded images
    iso=vtk.vtkImageMarchingCubes()
    iso.SetInputConnection(thres.GetOutputPort())

    # Have VTK calculate the Mass (volume) and surface area
    Mass = vtk.vtkMassProperties()
    Mass.SetInputConnection(iso.GetOutputPort())
    Mass.Update() 

    # just print the results
    print "Volume = ", Mass.GetVolume() 
    print "Surface = ", Mass.GetSurfaceArea()

Hinweis

sowohl VTK-5.4.2 Durch das Testen und VTK-5.2.1, verengte ich die Dinge ein wenig nach unten und glaube, dass dieses Verhalten zwischen den Versionen 5.0.4 und 5.2.1 eingeführt wurde.

Update

Es scheint, dass in VTK-5.4.2, vtkTIFFReader die ignoriert x und y eingestellten Werte in der SetDataSpacing Methode. Stattdessen wird vtkTIFFReader Berechnung der x und y aus der Auflösung durch die TIFF-Dateien berichtet dataspacing.

War es hilfreich?

Lösung

Ich habe noch nie von VTK gehört, aber hier geht es.

Gute Sache über Open-Source-Software ist, dass Sie den Quellcode direkt überprüfen können. Noch besser wäre es, wenn es Web-basierte Version Control-Browser ist, können wir über es online so reden.

Lassen Sie uns sehen vtkMassProperties Frage. 5.0.4 verwendet r1.28 und 5.4.2 verwendet r1.30. Hier ist der diff zwischen r1.28 und r.30 . Der Teil, der beeinflussen können Volumenberechnungen sind

vol[2] += (area * (double)u[2] * (double)zavg); // 5.0.4
vol[2] += (area * u[2] * zavg); // 5.4.2

und

kxyz[0] = (munc[0] + (wxyz/3.0) + ((wxy+wxz)/2.0)) /(double)(numCells); // 5.0.4
kxyz[0] = (munc[0] + (wxyz/3.0) + ((wxy+wxz)/2.0)) /numCells; // 5.4.2

aber alle Änderungen aussehen ok für mich.

Als nächstes verdächtig sind die vtkMarchingCubes . Diff zwischen r1.1.6. 1 und 1,5 .

self->UpdateProgress ((double) k / ((double) dims[2] - 1)); // 5.0.4
self->UpdateProgress (k / static_cast<double>(dims[2] - 1)); // 5.4.2

und

estimatedSize = (int) pow ((double) (dims[0] * dims[1] * dims[2]), .75); // 5.0.4
estimatedSize = static_cast<int>(
             pow(static_cast<double>(dims[0]*dims[1]*dims[2]),0.75)); // 5.4.2

Auch sie sind Befestigungs Sachen beim Gießen, aber es sieht okay.

Es könnte aber auch sehen vtkImageThreshold auch. Diff zwischen r1.50 und r1. 52 .

lowerThreshold = (IT) inData->GetScalarTypeMin(); // 5.0.4
lowerThreshold = static_cast<IT>(inData->GetScalarTypeMin()); // 5.4.2

Es gibt Haufen mehr, aber sie sind alle Guss Zeug.

Es wird immer interessanter mit vtkTIFFReader . Diff zwischen 1,51 und 1,63 . Wie Sie durch die Differenz in den Revisionsnummern sehen können, gibt es einige Entwicklung in dieser Klasse war im Vergleich zu anderen. Hier sind die checkin Kommentare:

  • ENH: Fügen Sie einen Namen für Skalare. Sichtbar in Paraview.
  • ENH: vtkDataArray hat jetzt ein neue übergeordneten Klasse-vtkAbstractArray ...
  • ENH. Set Standardanzahl von sampels pro Pixel für Dateien, die diese Meta-Daten fehlen
  • ENH. Lesen Sie nur, was Sie brauchen
  • ENH: in mehrseitigen TIFF-Datei-Unterstützung
  • ENH: print ivars
  • BUG: TIFF Reader nicht richtig machen RLE codierten Daten. Auch ExecuteInformation überschrieb Benutzer angegebenen Abstand und Herkunft.
  • BUG:. Wenn beach.tif (aus dem aktuellen CVS VTKData) zu lesen, würde das Bild auf dem Kopf geladen werden
  • STYLE: s / OrientationTypeSpecifiedFlag / OriginSpecifiedFlag / g und s / OrientationTypeSpecifiedFlag / SpacingSpecifiedFlag / g
  • BUG:. Reader wurde nicht Ausdehnungen richtig Handhabung
  • COMP. Fixing eine Warnung
  • COMP: Erste einer Warnung befreien.

Aus der Menge von Änderungen, die in vtkTIFFReader gemacht wurden, würde ich vermuten, dass der Unterschied im Verhalten von dort kommt. Zum Beispiel kann es Ihre Tiff als anderes Format zu erkennen und verändert die internen Pixelwerte haben begonnen. Versuchen Sie Pixelwerte Druck und sehen, ob es einen Unterschied ist. Wenn die Pixelwerte maxthres=81 haben sich geändert zu hoch sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top