24 #include "itkImageRegionIterator.h" 27 #include "opencv2/core/core.hpp" 49 template<
class TImageType
50 #if (_MSC_VER >= 1800) || (__GNUC__ > 4) 51 = itk::Image< float, 3 >
54 cv::Mat
VectorizeImages(
const std::vector< std::vector< typename TImageType::Pointer > > inputSubjectsAndImages,
55 const std::vector< typename TImageType::Pointer > maskImages,
56 const bool columnMajor,
const bool appendInputImagesFromSubjects,
const bool maskDefinedPerSubject)
58 if (inputSubjectsAndImages.size() != maskImages.size())
60 std::cerr <<
"The number of input and mask images do not match.\n";
65 for (
size_t i = 0; i < inputSubjectsAndImages.size(); i++)
67 std::vector< float > tempMat;
68 for (
size_t j = 0; j < inputSubjectsAndImages[i].size(); j++)
70 if (!appendInputImagesFromSubjects)
74 int maskIndexToConsider = j;
75 if (maskDefinedPerSubject)
77 maskIndexToConsider = i;
80 itk::ImageRegionIterator<TImageType>
81 inputImageIterator(inputSubjectsAndImages[i][j], inputSubjectsAndImages[i][j]->GetLargestPossibleRegion()),
82 maskImageIterator(maskImages[maskIndexToConsider], maskImages[maskIndexToConsider]->GetLargestPossibleRegion());
84 maskImageIterator.GoToBegin();
86 while (!maskImageIterator.IsAtEnd())
88 if (maskImageIterator.Get() != static_cast<typename TImageType::PixelType>(0))
90 inputImageIterator.SetIndex(maskImageIterator.GetIndex());
91 tempMat.push_back(static_cast<float>(inputImageIterator.Get()));
95 if (!appendInputImagesFromSubjects)
97 returnMat.push_back(tempMat);
100 if (appendInputImagesFromSubjects)
102 returnMat.push_back(tempMat);
108 cv::transpose(returnMat, returnMat);
123 template<
class TImageType
124 #if (_MSC_VER >= 1800) || (__GNUC__ > 4) 125 = itk::Image< float, 3 >
128 cv::Mat
VectorizeImages(
const std::vector< std::vector< typename TImageType::Pointer > > inputSubjectsAndImages,
129 const std::vector< std::vector< typename TImageType::IndexType > > maskIndeces,
130 const bool appendInputImagesFromSubjects =
false,
const bool columnMajor =
false,
const bool maskDefinedPerSubject =
false)
132 if (maskDefinedPerSubject)
134 if (inputSubjectsAndImages.size() != maskIndeces.size())
136 std::cerr <<
"The number of input and mask images do not match.\n";
142 if (inputSubjectsAndImages[0].size() != maskIndeces.size())
144 std::cerr <<
"The number of input and mask images do not match.\n";
150 for (
size_t i = 0; i < inputSubjectsAndImages.size(); i++)
153 for (
size_t j = 0; j < inputSubjectsAndImages[i].size(); j++)
155 if (!appendInputImagesFromSubjects)
159 itk::ImageRegionIterator<TImageType>
160 inputImageIterator(inputSubjectsAndImages[i][j], inputSubjectsAndImages[i][j]->GetLargestPossibleRegion());
162 int maskIndexToConsider = j;
163 if (maskDefinedPerSubject)
165 maskIndexToConsider = i;
167 for (
size_t k = 0; k < maskIndeces[maskIndexToConsider].size(); k++)
169 inputImageIterator.SetIndex(maskIndeces[maskIndexToConsider][k]);
170 tempMat.push_back(static_cast<float>(inputImageIterator.Get()));
172 if (!appendInputImagesFromSubjects)
174 returnMat.push_back(tempMat.t());
177 if (appendInputImagesFromSubjects)
179 returnMat.push_back(tempMat.t());
185 return returnMat.t();
198 template<
class TImageType
199 #if (_MSC_VER >= 1800) || (__GNUC__ > 4) 200 = itk::Image< float, 3 >
203 cv::Mat
VectorizeImages(
const std::vector< std::vector< typename TImageType::Pointer > > inputSubjectsAndImages,
204 const bool columnMajor =
false,
const bool appendInputImagesFromSubjects =
false)
208 for (
size_t i = 0; i < inputSubjectsAndImages.size(); i++)
210 std::vector< float > tempMat;
211 for (
size_t j = 0; j < inputSubjectsAndImages[i].size(); j++)
213 if (!appendInputImagesFromSubjects)
217 itk::ImageRegionIterator<TImageType>
218 inputImageIterator(inputSubjectsAndImages[i][j], inputSubjectsAndImages[i][j]->GetLargestPossibleRegion());
220 while (!inputImageIterator.IsAtEnd())
223 tempMat.push_back(static_cast<float>(inputImageIterator.Get()));
224 ++inputImageIterator;
226 if (!appendInputImagesFromSubjects)
228 returnMat.push_back(tempMat);
231 if (appendInputImagesFromSubjects)
233 returnMat.push_back(tempMat);
239 cv::transpose(returnMat, returnMat);
250 template<
typename TDataType
251 #if (_MSC_VER >= 1800) || (__GNUC__ > 4) 255 std::vector< TDataType >
L2normalize(
const std::vector< TDataType > &inputVector)
257 std::vector< TDataType > returnVector;
258 float norm = cv::norm(inputVector, cv::NORM_L2);
261 std::cerr <<
"Calculated norm = 0, please check data.\n";
264 returnVector.resize(inputVector.size());
265 std::transform(inputVector.begin(), inputVector.end(), returnVector.begin(), std::bind1st(std::divides< float >(), norm));
273 cv::Mat
Multiply(
const cv::Mat &input1,
const cv::Mat &input2)
276 cv::multiply(input1, input2, returnMat);
283 cv::Mat
Multiply(
const cv::Mat &input1,
const double input2)
286 cv::multiply(input1, input2, returnMat);
293 cv::Mat
Add(
const cv::InputArray &input1,
const cv::InputArray &input2)
296 cv::add(input1, input2, returnMat);
303 cv::Mat
Invert(
const cv::InputArray &input)
306 cv::invert(input, returnMat);
316 cv::transpose(input, returnMat);
323 cv::Mat
Subtract(
const cv::InputArray &input1,
const cv::InputArray &input2)
326 cv::subtract(input1, input2, returnMat);
cv::Mat Add(const cv::InputArray &input1, const cv::InputArray &input2)
Wrap of OpenCV's add function.
Definition: cbicaITKOpenCVUtilities.h:293
cv::Mat Transpose(const cv::InputArray &input)
Wrap of OpenCV's transpose function.
Definition: cbicaITKOpenCVUtilities.h:313
cv::Mat VectorizeImages(const std::vector< std::vector< typename TImageType::Pointer > > inputSubjectsAndImages, const std::vector< typename TImageType::Pointer > maskImages, const bool columnMajor, const bool appendInputImagesFromSubjects, const bool maskDefinedPerSubject)
Vectorizes a set of images.
Definition: cbicaITKOpenCVUtilities.h:54
cv::Mat Subtract(const cv::InputArray &input1, const cv::InputArray &input2)
Wrap of OpenCV's subtract function.
Definition: cbicaITKOpenCVUtilities.h:323
std::vector< TDataType > L2normalize(const std::vector< TDataType > &inputVector)
Normalize a vector based on its L2 norm.
Definition: cbicaITKOpenCVUtilities.h:255
cv::Mat Invert(const cv::InputArray &input)
Wrap of OpenCV's invert function.
Definition: cbicaITKOpenCVUtilities.h:303
cv::Mat Multiply(const cv::Mat &input1, const cv::Mat &input2)
Wrap of OpenCV's multiply function.
Definition: cbicaITKOpenCVUtilities.h:273