diff --git a/read.m b/read.m
index 25800fbab8f8d502f90eb40a9958fdd1e084d875..097efd435f955ab044d45997f327f833ead7c19a 100644
--- a/read.m
+++ b/read.m
@@ -53,12 +53,14 @@ fullRange = true;
 p.addParameter( 'inColSpace', 'rgb'  , @ischar);
 p.addParameter('outColSpace', 'ycbcr', @ischar);
 p.addParameter('fullRange', fullRange , @islogical);
+p.addParameter('interpMeth', 'nearest', @ischar);
 
 p.parse(varargin{:});
 
 inColSpace  = p.Results.inColSpace;
 outColSpace = p.Results.outColSpace;
 fullRange = p.Results.fullRange;
+interpMeth = p.Results.interpMeth;
 
 precision = ['uint',num2str(max(8,2^ceil(log2(bitDepth))))];
 
@@ -87,8 +89,13 @@ switch subSamp
         xgv = 1.5:2:imgSize(1); ygv = 1:2:imgSize(2);
 end
 
+% Add small offset to ensure correct nearest neighbour interpolation
+if any(strcmp(subSamp,{'422','420'})) && strcmp(interpMeth,'nearest')
+    ygv = ygv + 0.25;
+end
+
 subImgSize = [numel(xgv),numel(ygv)];
-UV = griddedInterpolant({xgv,ygv},zeros(subImgSize),'linear','nearest');
+UV = griddedInterpolant({xgv,ygv},zeros(subImgSize),interpMeth,'nearest');
 
 %% Read frames iteratively
 %filename = yuv.params2name(filename,imgSize,imgRes,subSamp,bitDepth);