فضولي حول الاختلافات في vtkmassproperties ل VTK 5.04 و VTK 5.4.2
سؤال
لدي بيثون صغير VTK
الوظيفة التي تحسب وحدة التخزين والمنطقة السطحية للكائن المضمن في كومة من TIFF
الصور. لقراءة TIFF's
إلى VTK
, ، لقد استخدمت vtkTIFFReader
ومعالجة النتيجة باستخدام vtkImageThreshold
. وبعد أنا ثم استخدام vtkMassProperties
لاستخراج مستوى الصوت والمنطقة السطحية للكائن المحدد بعد العتبة.
مع VTK-5.04
, ، ترجع هذه الوظيفة القيمة الصحيحة للحصول على مكدس اختبار (3902 بكسل). ومع ذلك، باستخدام VTK-5.4.2
ترجع الدالة نفسها قيمة مختلفة (422 بكسل). يمكن للشخص أن يفسر هذا؟
رمز
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()
ملحوظة
من خلال اختبار كل من VTK-5.4.2 و VTK-5.2.1، ضاقت الأمور أسفل قليلا وتعتقد أنه تم تقديم هذا السلوك بين الإصدارات 5.0.4 و 5.2.1.
تحديث
يبدو أنه في VTK-5.4.2، يتجاهل Vtktiffreader عاشر و Y. القيم المحددة في setDataspacing. طريقة. بدلا من ذلك vtktiffreader حساب عاشر و Y. Dataspacing من القرار الذي أبلغ عنه ملفات TIFF.
المحلول
أنا لم أسمع قط VTK من قبل، ولكن هنا يذهب.
شيء جيد حول برنامج OpenSource هو أنه يمكنك التحقق من شفرة المصدر مباشرة. الأفضل من ذلك، إذا كان هناك متصفح التحكم في الإصدار المستند إلى الويب، فيمكننا التحدث عنه عبر الإنترنت مثل هذا.
دعنا نرى vtkMassProperties
في السؤال. 5.0.4 يستخدم R1.28 و 5.4.2 يستخدم R1.30. هنا فرق بين r1.28 و r.30. وبعد الجزء الذي قد يؤثر على حسابات الصوت
vol[2] += (area * (double)u[2] * (double)zavg); // 5.0.4
vol[2] += (area * u[2] * zavg); // 5.4.2
و
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
ولكن كل التغييرات تبدو موافق لي.
القادم المشبوهة هي vtkMarchingCubes
. فرق بين r1.1.6.1 و 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
و
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
مرة أخرى، يقومون بإصلاح الأشياء على الصب، ولكن يبدو موافق.
قد نرى جيدا vtkImageThreshold
جدا. فرق بين r1.50 و r1.52.
lowerThreshold = (IT) inData->GetScalarTypeMin(); // 5.0.4
lowerThreshold = static_cast<IT>(inData->GetScalarTypeMin()); // 5.4.2
هناك حفنة أكثر، لكنها جميع الأشياء الصب.
يحصل أكثر إثارة للاهتمام مع vtkTIFFReader
. فرق بين 1.51 و 1.63. وبعد كما ترون الفرق في أرقام المراجعة، كان هناك بعض التطورات في هذه الفئة مقارنة بالآخرين. فيما يلي تعليقات Checkin:
- إكسب: أضف اسما للأفراس. مرئية في paraview.
- إكسب: يحتوي Vtkdataarray الآن على Superclass-Vtkabstractarray جديد ...
- ENG: تعيين العدد الافتراضي من Sampels لكل بكسل للملفات التي تفتقد بيانات التعريف هذه.
- إكسب: اقرأ فقط ما تحتاجه.
- إكسب: إضافة دعم ملفات TIFF متعددة
- إكسب: طباعة avars
- BUG: لم يتم حساب قارئ TIFF بشكل صحيح للبيانات المشفرة RLL. أيضا، executeInformation الكتابة الكتابية المحددة التباعد والأصل.
- BUG: عند قراءة Beach.tif (من CVS الحالي VTKDATA)، سيتم تحميل الصورة رأسا على عقب.
- نمط: S / OrigintationTyPespecifiedflag / Originspecifiedflag / G و S / ORIVAIDETYPESPECEFIFIEDFLAG / SpacingsPecifiedflag / G
- BUG: القارئ لم يكن التعامل مع النطاقات بشكل صحيح.
- شركات: إصلاح تحذير.
- شركات: التخلص من تحذير.
من مقدار التغييرات التي تم إجراؤها في Vtktiffreader، أعتقد أن الفرق في السلوك قادما من هناك. على سبيل المثال، قد بدأت في التعرف على TIFF الخاص بك بتنسيق مختلف وتغيير قيم البكسل الداخلية. حاول طباعة قيم البكسل ومعرفة ما إذا كان هناك أي فرق. إذا تغيرت قيم البكسل maxthres=81
قد تكون عالية جدا.