1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-30 07:43:03 +04:00

Make DNN Crop layer match Caffe default offset behavior

and add parametric unit test for crop layer.
This commit is contained in:
David Koller
2018-01-14 00:39:11 -05:00
committed by drkoller
parent a55aed5f42
commit d1a3b530be
2 changed files with 87 additions and 18 deletions
+4 -18
View File
@@ -110,26 +110,12 @@ public:
}
crop_ranges.resize(dims, Range::all());
for (int i = 0; i < dims; i++)
for (int i = start_axis; i < dims; i++)
{
if( i < start_axis )
continue;
if (offset_final[i] < 0 || offset_final[i] + inpSzBlob.size[i] > inpBlob.size[i])
CV_Error(Error::StsBadArg, "invalid crop parameters or blob sizes");
if (!offset.empty()) //normal case
{
if (offset_final[i] < 0 || offset_final[i] + inpSzBlob.size[i] > inpBlob.size[i])
CV_Error(Error::StsBadArg, "invalid crop parameters");
crop_ranges[i] = Range(offset_final[i], offset_final[i] + inpSzBlob.size[i]);
}
else //detect offset automatically so that cropped image is center of original one
{
if (inpSzBlob.size[i] > inpBlob.size[i])
CV_Error(Error::StsBadArg, "invalid output blob size");
int cur_crop = (inpBlob.size[i] - inpSzBlob.size[i]) / 2;
crop_ranges[i] = Range(cur_crop, cur_crop + inpSzBlob.size[i]);
}
crop_ranges[i] = Range(offset_final[i], offset_final[i] + inpSzBlob.size[i]);
}
}