本文整理汇总了C++中MatrixT::storage_order方法的典型用法代码示例。如果您正苦于以下问题:C++ MatrixT::storage_order方法的具体用法?C++ MatrixT::storage_order怎么用?C++ MatrixT::storage_order使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MatrixT
的用法示例。
在下文中一共展示了MatrixT::storage_order方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: convolute_3d_in_place
void convolute_3d_in_place(MatrixT& _image, const MatrixT& _kernel,
const bool& _verbose = false) {
if (_image.size() == _kernel.size()) {
std::cerr << "received image and kernel of matching size, this makes "
"preparing the kernel impossible!\nExiting.\n";
return;
}
if (MatrixT::dimensionality != 3) {
std::cerr << "received image and kernel of dimension "
<< MatrixT::dimensionality
<< " that cannot be processed by convolute_3d_in_place!\n";
return;
}
std::vector<unsigned> origin_image_extents(MatrixT::dimensionality);
std::copy(_image.shape(), _image.shape() + MatrixT::dimensionality,
origin_image_extents.begin());
std::vector<unsigned> origin_kernel_extents(MatrixT::dimensionality);
std::copy(_kernel.shape(), _kernel.shape() + MatrixT::dimensionality,
origin_kernel_extents.begin());
if (_verbose) {
std::cout << "[convolute_3d_in_place]\timage:\n" << _image << "\n";
std::cout << "[convolute_3d_in_place]\tkernel:\n" << _kernel << "\n";
}
///////////////////////////////////////////////////////////////////////////
// CALCULATE PADDING EXTENT
std::vector<unsigned> common_extents(MatrixT::dimensionality);
std::transform(origin_image_extents.begin(), origin_image_extents.end(),
origin_kernel_extents.begin(), common_extents.begin(),
add_minus_1<unsigned>());
std::vector<unsigned> common_offsets(MatrixT::dimensionality);
std::transform(origin_kernel_extents.begin(), origin_kernel_extents.end(),
common_offsets.begin(), minus_1_div_2<unsigned>());
///////////////////////////////////////////////////////////////////////////
// PADD IMAGE
image_stack padded_image(common_extents, _image.storage_order());
image_stack_view subview_padded_image = padded_image
[boost::indices[range(common_offsets[0],
common_offsets[0] + origin_image_extents[0])]
[range(common_offsets[1],
common_offsets[1] + origin_image_extents[1])]
[range(common_offsets[2],
common_offsets[2] + origin_image_extents[2])]];
subview_padded_image = _image;
unsigned long size_of_transform = padded_image.num_elements();
///////////////////////////////////////////////////////////////////////////
// PADD KERNEL
image_stack padded_kernel(common_extents, _kernel.storage_order());
for (long z = 0; z < origin_kernel_extents[2]; ++z)
for (long y = 0; y < origin_kernel_extents[1]; ++y)
for (long x = 0; x < origin_kernel_extents[0]; ++x) {
long intermediate_x = x - origin_kernel_extents[0] / 2L;
long intermediate_y = y - origin_kernel_extents[1] / 2L;
long intermediate_z = z - origin_kernel_extents[2] / 2L;
intermediate_x = (intermediate_x < 0)
? intermediate_x + common_extents[0]
: intermediate_x;
intermediate_y = (intermediate_y < 0)
? intermediate_y + common_extents[1]
: intermediate_y;
intermediate_z = (intermediate_z < 0)
? intermediate_z + common_extents[2]
: intermediate_z;
padded_kernel[intermediate_x][intermediate_y][intermediate_z] =
_kernel[x][y][z];
}
///////////////////////////////////////////////////////////////////////////
// RESIZE ALL TO ALLOW FFTW INPLACE TRANSFORM
std::vector<unsigned> inplace_extents(3);
adapt_extents_for_fftw_inplace(common_extents, inplace_extents,
_image.storage_order());
padded_image.resize(boost::extents[inplace_extents[0]][inplace_extents[1]]
[inplace_extents[2]]);
padded_kernel.resize(boost::extents[inplace_extents[0]][inplace_extents[1]]
[inplace_extents[2]]);
if (_verbose) {
std::cout << "[convolute_3d_in_place]\t padded image:\n" << padded_image
<< "\n";
std::cout << "[convolute_3d_in_place]\t padded kernel:\n" << padded_kernel
<< "\n";
}
float scale = 1.0 / (size_of_transform);
fftwf_complex* complex_image_fourier = (fftwf_complex*)padded_image.data();
fftwf_complex* complex_kernel_fourier = (fftwf_complex*)padded_kernel.data();
// define+run forward plans
fftwf_plan image_fwd_plan = fftwf_plan_dft_r2c_3d(
common_extents[0], common_extents[1], common_extents[2],
padded_image.data(), complex_image_fourier, FFTW_ESTIMATE);
//.........这里部分代码省略.........