float operator()(const PixelType& a, const PixelType& b) const { using Helpers::length; using ITKHelpers::length; using Helpers::index; using ITKHelpers::index; assert(length(a) == length(b)); float pixelDifference = 0.0f; for(unsigned int component = 0; component < N; ++component) { float componentDifference = fabs(index(a,component) - index(b,component)); pixelDifference += componentDifference; } return pixelDifference; }
float operator()(const PixelType& a, const PixelType& b) const { using Helpers::length; using ITKHelpers::length; using Helpers::index; using ITKHelpers::index; assert(length(a) == length(b)); //assert(length(a) == Weights.size()); if(length(a) != Weights.size()) { std::stringstream ss; ss << "length(a) != Weights.size(). a is " << length(a) << " and weights is " << Weights.size(); throw std::runtime_error(ss.str()); } float pixelDifference = 0.0f; for(unsigned int component = 0; component < length(a); ++component) { float componentDifference = Weights[component] * fabs(index(a,component) - index(b,component)); pixelDifference += componentDifference; } return pixelDifference; }