[vtk-developers] The ImageStencil Issue
dean.inglis at camris.ca
dean.inglis at camris.ca
Tue Aug 22 21:09:53 EDT 2006
David,
have a look at php bug tracker item #1452.
If I run the tcl script as is, the ROI
is not updated correctly. If I modify the
script to delay updating the vtkImageAccumulate
and vtkTextActor pipeline until after the
first render, things work out (see modified
tcl script below). Prior to executives,
the submitted bug script would work. I believe
there is still a pipeline issue here. Sorry I
can't be of much help: I still haven't found time
to dive into and figure out executives...
>>
>> The vtkImageStencilSource class requires the Spacing and Origin of
>> whichever image eventually uses the stencil to be propagated the wrong
>> way along the pipeline. Ouch!
>>
Dean
#///////////////////////////////////////
package require vtk
package require vtkinteraction
proc UpdateROI {} {
accum Update
set aN [accum GetVoxelCount]
set amin [accum GetMin]
set amax [accum GetMax]
set amean [accum GetMean]
set astd [accum GetStandardDeviation]
set atext {}
append atext "N: "
append atext [string toupper $aN]
append atext ", \["
append atext [string toupper [lindex $amin 0] ]
append atext " -> "
append atext [string toupper [lindex $amax 0] ]
append atext "\] "
append atext [string toupper [lindex $amean 0] ]
append atext " +- "
append atext [string toupper [lindex $astd 0] ]
append atext " HU"
textActor SetInput $atext
# not sure if this is just on my Borland build
# but the text actor will not show the modified input text
# correctly (looks garbled and squished) unless
# we wait till later to add the text actor
#
ren AddViewProp textActor
}
vtkVolume16Reader v16
v16 SetDataDimensions 64 64
v16 SetDataByteOrderToLittleEndian
v16 SetImageRange 1 93
v16 SetDataSpacing 3.2 3.2 1.5
v16 SetFilePrefix "$VTK_DATA_ROOT/Data/headsq/quarter"
v16 ReleaseDataFlagOn
v16 SetDataMask 0x7fff
vtkExtractVOI extract
extract SetVOI 31 31 0 63 0 92
extract SetSampleRate 1 1 1
extract SetInput [v16 GetOutput]
extract ReleaseDataFlagOff
extract Update
set range [[extract GetOutput] GetScalarRange]
set min [lindex $range 0]
set max [lindex $range 1]
set diff [expr $max - $min]
set avg [expr 0.5*($max + $min)]
set bounds [[extract GetOutput] GetBounds]
vtkPoints points
points SetNumberOfPoints 5
set x [lindex $bounds 0]
set y0 [expr 0.25*[lindex $bounds 3]]
set y1 [expr 0.75*[lindex $bounds 3]]
set z0 [expr 0.25*[lindex $bounds 5]]
set z1 [expr 0.75*[lindex $bounds 5]]
points SetPoint 0 $x $y0 $z0
points SetPoint 1 $x $y1 $z0
points SetPoint 2 $x $y1 $z1
points SetPoint 3 $x $y0 $z1
points SetPoint 4 $x $y0 $z0
vtkCellArray cells
cells InsertNextCell 5
for {set i 0} {$i < 5} {incr i} {
cells InsertCellPoint $i
}
vtkPolyData region
region SetPoints points
region SetLines cells
vtkPolyDataMapper regionMapper
regionMapper SetInput region
vtkActor regionActor
regionActor SetMapper regionMapper
[regionActor GetProperty ] SetColor 1 0 0
vtkLinearExtrusionFilter extrude
extrude SetScaleFactor 1
extrude SetExtrusionTypeToNormalExtrusion
extrude SetVector 1 0 0
extrude SetInput region
vtkPolyDataToImageStencil dataToStencil
dataToStencil SetInput [extrude GetOutput]
vtkImageStencil stencil
stencil SetInput [extract GetOutput]
stencil SetStencil [dataToStencil GetOutput]
stencil ReverseStencilOff
stencil SetBackgroundValue $min
vtkImageMapToWindowLevelColors imageMapper
imageMapper SetOutputFormatToLuminance
imageMapper SetInput [stencil GetOutput]
imageMapper SetLevel $avg
imageMapper SetWindow $diff
vtkImageActor imageActor
imageActor SetInput [imageMapper GetOutput]
imageActor SetDisplayExtent 31 31 0 63 0 92
imageActor InterpolateOff
vtkImageAccumulate accum
accum SetInput [extract GetOutput]
accum ReverseStencilOff
accum SetStencil [stencil GetStencil]
accum SetComponentSpacing 1 0 0
accum SetComponentExtent 0 $diff 0 0 0 0
accum SetComponentOrigin $min 0 0
accum ReleaseDataFlagOff
# comment out old bug submission
#
# accum Update
# set aN [accum GetVoxelCount]
# set amin [accum GetMin]
# set amax [accum GetMax]
# set amean [accum GetMean]
# set astd [accum GetStandardDeviation]
# set atext {}
# append atext "N: "
# append atext [string toupper $aN]
# append atext ", \["
# append atext [string toupper [lindex $amin 0] ]
# append atext " -> "
# append atext [string toupper [lindex $amax 0] ]
# append atext "\] "
# append atext [string toupper [lindex $amean 0] ]
# append atext " +- "
# append atext [string toupper [lindex $astd 0] ]
# append atext " HU"
vtkTextActor textActor
textActor ScaledTextOff
# textActor SetInput $atext
textActor SetInput "ROI:"
[textActor GetPositionCoordinate] SetCoordinateSystemToNormalizedDisplay
[textActor GetPositionCoordinate] SetValue 0.05 0.05
set tprop [textActor GetTextProperty]
$tprop SetFontSize 16
$tprop SetFontFamilyToArial
$tprop BoldOff
$tprop ItalicOff
$tprop ShadowOff
$tprop SetLineSpacing 0.9
$tprop SetJustificationToLeft
$tprop SetVerticalJustificationToBottom
$tprop SetColor 1 1 0
vtkRenderer ren
ren SetBackground 0.4 0.4 0.5
vtkRenderWindow renWin
renWin AddRenderer ren
renWin SetSize 400 400
vtkInteractorStyleImage interactor
vtkRenderWindowInteractor iren
iren SetInteractorStyle interactor
iren SetRenderWindow renWin
ren AddViewProp imageActor
ren AddViewProp regionActor
# see comment above in UpdateROI proc
#
# ren AddViewProp textActor
iren AddObserver UserEvent {wm deiconify .vtkInteract}
renWin Render
set cam [ren GetActiveCamera]
$cam SetViewUp 0 1 0
$cam Azimuth 270
$cam Roll 270
$cam Dolly 1.7
ren ResetCameraClippingRange
renWin Render
# Prevent the tk window from showing up then start the event loop.
wm withdraw .
# pipeline works in current VTK CVS if we
# now update the accumulate here with a tcl proc
#
UpdateROI
More information about the vtk-developers
mailing list