diff --git a/ethosu/vela/test/test_tflite_supported_operators.py b/ethosu/vela/test/test_tflite_supported_operators.py
index 35fc1a6..790f001 100644
--- a/ethosu/vela/test/test_tflite_supported_operators.py
+++ b/ethosu/vela/test/test_tflite_supported_operators.py
@@ -381,18 +381,6 @@
         assert not support.is_operator_supported(op)
 
 
-def test_constraint_resize_half_pixel_centers():
-    for resize_op in Op.op_set(Op.is_resize_op):
-        # Half-pixel centers is only supported for resize bilinear
-        op = testutil.create_op_with_quant_tensors(resize_op, [1, 4, 4, 8], [1, 8, 8, 8])
-        op.add_input_tensor(create_const_tensor("size", [2], DataType.int32, [8, 8], np.int32))
-        op.attrs["half_pixel_centers"] = True
-        if resize_op == Op.ResizeBilinear:
-            assert support.is_operator_supported(op)
-        else:
-            assert not support.is_operator_supported(op)
-
-
 def test_constraint_concat_pass():
     # A working concat
     op = testutil.create_op_with_quant_tensors(Op.Concat, [1, 1, 1, 4], [1, 1, 1, 8])
diff --git a/ethosu/vela/tflite_graph_optimiser.py b/ethosu/vela/tflite_graph_optimiser.py
index f3ca1b6..574d298 100644
--- a/ethosu/vela/tflite_graph_optimiser.py
+++ b/ethosu/vela/tflite_graph_optimiser.py
@@ -454,7 +454,9 @@
             # use depthwise conv to select the correct value
             scaled_op = convert_resizenn_ac_to_depthwise_conv(scaled_op, upscale_factor)
         else:
-            # keep 1x1 kernel and average pool
+            # Keep 1x1 kernel and average pool, this applies both when
+            # half-pixel-centers is True and False. Calculations are the
+            # same in the reference.
             pass
 
     scaled_op.outputs = outputs
diff --git a/ethosu/vela/tflite_supported_operators.py b/ethosu/vela/tflite_supported_operators.py
index 3d04def..23bbac2 100644
--- a/ethosu/vela/tflite_supported_operators.py
+++ b/ethosu/vela/tflite_supported_operators.py
@@ -264,7 +264,6 @@
             self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_resize)
             self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_resize_size)
             self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_resize_attrs)
-            self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_resize_half_pixel_centers)
 
         # Resize Bilinear specific checks:
         self.specific_constraints[Op.ResizeBilinear].append(
@@ -682,15 +681,6 @@
         return valid, "Op has both align_corners and half_pixel_centers set to True."
 
     @staticmethod
-    def constraint_resize_half_pixel_centers(op):
-        """Half_pixel_centers are only supported for resize bilinear"""
-        valid = True
-        half_pixel_centers = op.attrs.get("half_pixel_centers", False)
-        if half_pixel_centers and op.type != Op.ResizeBilinear:
-            valid = False
-        return valid, f"Op type={op.type} and half_pixel_centers={half_pixel_centers}"
-
-    @staticmethod
     def constraint_resizebi_half_pixel_centers_dims(op):
         """Half_pixel_centers for resize bilinear requires that OFM W and H is 2x IFM W and H"""
         half_pixel_centers = op.attrs.get("half_pixel_centers", False)
