本文整理汇总了C++中volume::setinterpolationmethod方法的典型用法代码示例。如果您正苦于以下问题:C++ volume::setinterpolationmethod方法的具体用法?C++ volume::setinterpolationmethod怎么用?C++ volume::setinterpolationmethod使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类volume
的用法示例。
在下文中一共展示了volume::setinterpolationmethod方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mpoint
volume<float> find_skull (volume<float> & image, const Mesh & m, const double t2, double t, double t98)
{
const double skull_search = 30;
const double skull_start = -3;
volume<float> result = image;
result=0;
volume<short> volmesh;
copyconvert(image,volmesh);
int xsize = volmesh.xsize();
int ysize = volmesh.ysize();
int zsize = volmesh.zsize();
double xdim = volmesh.xdim();
double ydim = volmesh.ydim();
double zdim = volmesh.zdim();
double scale = Min(xdim, Min(ydim, zdim));
volmesh = 1;
volmesh = draw_mesh(volmesh, m);
image.setinterpolationmethod(trilinear);
for (vector<Mpoint*>::const_iterator i = m._points.begin(); i != m._points.end(); i++)
{
double max_neighbour = 0;
const Vec normal = (*i)->local_normal();
const Vec n = Vec(normal.X/xdim, normal.Y/ydim, normal.Z/zdim);
for (list<Mpoint*>::const_iterator nei = (*i)->_neighbours.begin(); nei != (*i)->_neighbours.end(); nei++)
max_neighbour = Max(((**i) - (**nei)).norm(), max_neighbour);
max_neighbour = ceil((max_neighbour)/2);
const Pt mpoint((*i)->get_coord().X/xdim,(*i)->get_coord().Y/ydim,(*i)->get_coord().Z/zdim);
for (int ck = (int)floor(mpoint.Z - max_neighbour/zdim); ck <= (int)floor(mpoint.Z + max_neighbour/zdim); ck++)
for (int cj = (int)floor(mpoint.Y - max_neighbour/ydim); cj <= (int)floor(mpoint.Y + max_neighbour/ydim); cj++)
for (int ci = (int)floor(mpoint.X - max_neighbour/xdim); ci <= (int)floor(mpoint.X + max_neighbour/xdim); ci++)
{
bool compute = false;
const Pt point(ci, cj, ck);
const Pt realpoint(ci*xdim, cj*ydim, ck*zdim);
if (volmesh(ci, cj, ck) == 0)
{
double mindist = 10000;
for (list<Mpoint*>::const_iterator nei = (*i)->_neighbours.begin(); nei != (*i)->_neighbours.end(); nei++)
mindist = Min(((realpoint) - (**nei)).norm(), mindist);
if (mindist >= ((realpoint) - (**i)).norm()) compute = true;
}
if (compute)
{
double maxval = t;
double minval = image.interpolate(point.X, point.Y, point.Z);
double d_max = 0;
for (double d=0; d<skull_search; d+=scale*.5)
{
Pt current = point + d * n;
double val = image.interpolate(current.X, current.Y, current.Z);
if (val>maxval)
{
maxval=val;
d_max=d;
}
if (val<minval)
minval=val;
}
if (maxval > t)
{
double d_min=skull_start;
double maxJ =-1000000;
double lastJ=-2000000;
for(double d=skull_start; d<d_max; d+=scale*0.5)
{
Pt current = point + d * n;
if (current.X >= 0 && current.Y >= 0 && current.Z >= 0 && current.X<xsize && current.Y<ysize && current.Z<zsize)
{
double tmpf = d/30 - image.interpolate(current.X, current.Y, current.Z) / (t98 - t2);
if (tmpf > maxJ)
{
maxJ=tmpf;
d_min = d;
}
lastJ=tmpf;
}
}
double maxgrad = 0;
double d_skull;
Pt current2 = point + d_min * n;
if (current2.X >= 0 && current2.Y >= 0 && current2.Z >= 0 && current2.X<xsize && current2.Y<ysize && current2.Z<zsize)
{
double val2 = image.interpolate(current2.X, current2.Y, current2.Z);
for(double d=d_min + scale; d<d_max; d+=0.5*scale)
{
Pt current = point + d * n;
if (current.X >= 0 && current.Y >= 0 && current.Z >= 0 && current.X<xsize && current.Y<ysize && current.Z<zsize)
{
//.........这里部分代码省略.........