aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/image
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <gardener@tensorflow.org>2018-06-26 15:44:04 -0700
committerGravatar Gunhan Gulsoy <gunan@google.com>2018-06-28 21:37:43 -0700
commit775b18506eec48c49f09ff4c815ecd222737194c (patch)
treed7e130ce82e13d014a553d5584b0343324b2c497 /tensorflow/contrib/image
parent4bac5adc9c19d5f658491bfb970db9313f38a995 (diff)
When a pixel is mapped to an infinite location, it is assigned with the default value of zero.
PiperOrigin-RevId: 202208466
Diffstat (limited to 'tensorflow/contrib/image')
-rw-r--r--tensorflow/contrib/image/kernels/image_ops.h5
-rw-r--r--tensorflow/contrib/image/python/kernel_tests/image_ops_test.py17
2 files changed, 22 insertions, 0 deletions
diff --git a/tensorflow/contrib/image/kernels/image_ops.h b/tensorflow/contrib/image/kernels/image_ops.h
index f1dbd1becc..209aa24548 100644
--- a/tensorflow/contrib/image/kernels/image_ops.h
+++ b/tensorflow/contrib/image/kernels/image_ops.h
@@ -59,6 +59,11 @@ class ProjectiveGenerator {
? transforms_.data()
: &transforms_.data()[transforms_.dimension(1) * coords[0]];
float projection = transform[6] * output_x + transform[7] * output_y + 1.f;
+ if (projection == 0) {
+ // Return the fill value (0) for infinite coordinates,
+ // which are outside the input image
+ return T(0);
+ }
const float input_x =
(transform[0] * output_x + transform[1] * output_y + transform[2]) /
projection;
diff --git a/tensorflow/contrib/image/python/kernel_tests/image_ops_test.py b/tensorflow/contrib/image/python/kernel_tests/image_ops_test.py
index 88a5c9f079..62a22dcf34 100644
--- a/tensorflow/contrib/image/python/kernel_tests/image_ops_test.py
+++ b/tensorflow/contrib/image/python/kernel_tests/image_ops_test.py
@@ -128,6 +128,23 @@ class ImageOpsTest(test_util.TensorFlowTestCase):
[0, 1, 0, 1],
[0, 1, 1, 1]])
+ def test_extreme_projective_transform(self):
+ for dtype in _DTYPES:
+ with self.test_session():
+ image = constant_op.constant(
+ [[1, 0, 1, 0],
+ [0, 1, 0, 1],
+ [1, 0, 1, 0],
+ [0, 1, 0, 1]], dtype=dtype)
+ transformation = constant_op.constant([1, 0, 0, 0, 1, 0, -1, 0],
+ dtypes.float32)
+ image_transformed = image_ops.transform(image, transformation)
+ self.assertAllEqual(image_transformed.eval(),
+ [[1, 0, 0, 0],
+ [0, 0, 0, 0],
+ [1, 0, 0, 0],
+ [0, 0, 0, 0]])
+
def test_bilinear(self):
with self.test_session():
image = constant_op.constant(