From 0a1c9f56fe32f2d1d1458cf7c844fe2a291d32c5 Mon Sep 17 00:00:00 2001 From: Luke Yeager Date: Mon, 22 Aug 2016 19:00:55 -0700 Subject: [PATCH] Use bicubic interp in DetectNetTransform layer --- src/caffe/layers/detectnet_transform_layer.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/caffe/layers/detectnet_transform_layer.cpp b/src/caffe/layers/detectnet_transform_layer.cpp index f7e1853a92f..d1bbc7d77ef 100644 --- a/src/caffe/layers/detectnet_transform_layer.cpp +++ b/src/caffe/layers/detectnet_transform_layer.cpp @@ -81,7 +81,14 @@ void DetectNetTransformationLayer::retrieveMeanImage(Size dimensions) { // resize, if dimensions were defined: if (dimensions.area() > 0) { - resize(data_mean_, data_mean_, dimensions, cv::INTER_CUBIC); + // Resize using bicubic interpolation and then clamp to [min, max] + double minval, maxval; + cv::minMaxLoc(data_mean_, &minval, &maxval); + cv::resize(data_mean_, data_mean_, dimensions, 0, 0, cv::INTER_CUBIC); + cv::threshold(data_mean_, data_mean_, maxval, 0, cv::THRESH_TRUNC); + data_mean_ *= -1; + cv::threshold(data_mean_, data_mean_, -minval, 0, cv::THRESH_TRUNC); + data_mean_ *= -1; } // scale from 0..255 to 0..1: data_mean_ /= Dtype(UINT8_MAX); @@ -439,7 +446,14 @@ void DetectNetTransformationLayer::transform_scale( Dtype scale_x = (Dtype)size.width / img.cols; Dtype scale_y = (Dtype)size.height / img.rows; - resize(img, *img_temp, size, cv::INTER_CUBIC); + // Resize using bicubic interpolation and then clamp to [min, max] + double minval, maxval; + cv::minMaxLoc(img, &minval, &maxval); + cv::resize(img, *img_temp, size, 0, 0, cv::INTER_CUBIC); + cv::threshold(*img_temp, *img_temp, maxval, 0, cv::THRESH_TRUNC); + *img_temp *= -1; + cv::threshold(*img_temp, *img_temp, -minval, 0, cv::THRESH_TRUNC); + *img_temp *= -1; vector bboxList_aug; foreach_(BboxLabel label, bboxList) { // for every bbox: