[Insight-users] rescaling problems
Sven Prevrhal
sven . prevrhal at oarg . ucsf . edu
Wed, 2 Jul 2003 15:19:09 -0700
This is a multi-part message in MIME format.
------=_NextPart_000_0001_01C340AD.4957DA40
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit
I'd like to sample a CT volume onto a coarser grid and am having trouble.
The resampleFilter Update throws an exception saying at least a part of the
requested region is outside the maximum size, but only if I request a
smaller size! Here's my code with the problem description commented:
m_ResampleTransform->SetIdentity();
ImageSizeType scaledSize;
ImageSizeType size = m_ImageReader->GetOutput()->
GetBufferedRegion().GetSize();
//From the GUI:
this->m_SpacingFactor[0] = xValue;
this->m_SpacingFactor[1] = yValue;
this->m_SpacingFactor[2] = zValue;
double * scaledSpacing = new double[ImageDimension];
const double * spacing = m_ImageReader->GetOutput()->GetSpacing();
for( int i = 0; i < ImageDimension; i++ ) {
scaledSpacing[i] = spacing[i] * m_SpacingFactor[i];
// Here's the problem: If I leave
// scaledSize[i] = size[i];
// it doesn't crash,
// but I get a lot of zero voxels around. Setting
scaledSize[i] = size[i] / m_SpacingFactor[i];
// should take the excess voxel out, but it crashes!
}
m_ResampleFilter->SetSize( scaledSize );
m_ResampleFilter->SetOutputSpacing( (const double *) scaledSpacing );
m_ResampleFilter->Modified();
// Update somewhere else, but that's when it crashes
Example: I have 512x512xn input, want to resample onto 256x256xn output, I
choose the m_SpacingFactors 2.0,2.0,1.0. Setting size to 256x256xn ->crash!
This shouldn't be hard, but for some reason I am stuck. Any ideas totally
appreciated!!
sven
--
------=_NextPart_000_0001_01C340AD.4957DA40
Content-Type: text/html;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">
<meta name=3DGenerator content=3D"Microsoft Word 10 (filtered)">
<style>
<!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman";}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
{margin:0in;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New";}
p.MsoAutoSig, li.MsoAutoSig, div.MsoAutoSig
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman";}
span.EmailStyle17
{font-family:Arial;
color:windowtext;}
@page Section1
{size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
{page:Section1;}
-->
</style>
</head>
<body lang=3DEN-US link=3Dblue vlink=3Dpurple>
<div class=3DSection1>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>I’d like to sample a CT volume onto a coarser =
grid and
am having trouble. The resampleFilter Update throws an exception saying =
at
least a part of the requested region is outside the maximum size, but =
only if I
request a smaller size! Here’s my code with the problem =
description
commented:</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
m_ResampleTransform->SetIdentity();</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> ImageSizeType scaledSize;</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> ImageSizeType size =3D =
m_ImageReader->GetOutput()-></span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
GetBufferedRegion().GetSize();</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> //From the GUI:</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> this->m_SpacingFactor[0] =3D =
xValue;</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> this->m_SpacingFactor[1] =3D =
yValue;</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> this->m_SpacingFactor[2] =3D =
zValue;</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> double * scaledSpacing =3D new =
double[ImageDimension];</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> const double * spacing =3D =
m_ImageReader->GetOutput()->GetSpacing();</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> for( int i =3D 0; i < ImageDimension; i++ ) =
{</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
scaledSpacing[i] =3D spacing[i] * m_SpacingFactor[i]; </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
// Here’s the problem: If I leave</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
// scaledSize[i] =3D size[i];</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
// it doesn’t crash,</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
// but I get a lot of zero voxels around. Setting</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
scaledSize[i] =3D size[i] / m_SpacingFactor[i];</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
// should take the excess voxel out, but it crashes!</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> }</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> m_ResampleFilter->SetSize( scaledSize =
);</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> m_ResampleFilter->SetOutputSpacing( (const =
double
*) scaledSpacing );</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> =
m_ResampleFilter->Modified();</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> // Update somewhere else, but that’s =
when it
crashes</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>Example: I have 512x512xn input, want to resample =
onto
256x256xn output, I choose the m_SpacingFactors 2.0,2.0,1.0. Setting =
size to
256x256xn ->crash!</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>This shouldn’t be hard, but for some reason I =
am
stuck. Any ideas totally appreciated!!</span></font></p>
<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'> </span></font></p>
<p class=3DMsoAutoSig><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'>sven</span></font></p>
<p class=3DMsoAutoSig><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'>--</span></font></p>
<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'> </span></font></p>
</div>
</body>
</html>
------=_NextPart_000_0001_01C340AD.4957DA40--