| CPC H04N 19/513 (2014.11) [H04N 19/159 (2014.11); H04N 19/176 (2014.11); H04N 19/186 (2014.11); H04N 19/30 (2014.11)] | 22 Claims |

|
1. An image encoding method, comprising:
performing an image encoding process for an image block coded in an inter prediction mode, to output an encoded bitstream, wherein the image block comprises a luma block and a co-located chroma block, and wherein the performing the image encoding process comprises a chroma motion vector derivation process, comprising:
obtaining an averaged luma motion vector mvAvgLX by:
determining chroma scaling factors in horizontal and vertical directions based on chroma format information indicating a chroma format of a current picture which the image block belongs to, wherein the chroma format comprises one of a YUV 4:2:2 format, a YUV 4:2:0 format or a YUV 4:4:4 format;
determining a set (S) of luma subblocks of the luma block based on values of the chroma scaling factors; and
generating the averaged luma motion vector mvAvgLX by averaging motion vectors of the luma subblocks in the set (S), in a case that more than one luma subblocks in the set (S);
deriving a chroma motion vector for a chroma subblock mvCLX[xSbIdx][ySbIdx] of the chroma block based on the averaged luma motion vector mvAvgLX; wherein a process of deriving the chroma motion vector is invoked as follows with the mvAvgLX as input, and the chroma motion vector mvCLX[xSbIdx][ySbIdx] as output:
mvCLX[0]=mvLX[0]*2/SubWidthC
mvCLX[1]=mvLX[1]*2/SubHeightC−, if a reference picture corresponding to refIdxLX for the image block is not a current picture; or
mvCLX[0]=((mvLX[0]>>(3+SubWidthC))*32
mvCLX[1]=((mvLX[1]>>(3+SubHeightC))*32, if the reference picture corresponding to the refIdxLX for the image block is the current picture,
wherein mvLX[0] corresponds to a horizontal component of the mvAvgLX, and mvLX[1] corresponds to a vertical component of the mvAvgLX,
wherein when both SubWidthC and SubHeightC are equal to 1, the set of luma subblocks (S) is a luma subblock indexed by S0=(xSbIdx, ySbIdx);
when at least one of SubWidthC and SubHeightC is not equal to 1, the set of luma subblocks (S) is: a first luma subblock indexed by S0=
((xSbIdx>>(SubWidthC−1)<<(SubWidthC−1)),
(ySbIdx>>(SubHeightC−1)<<(SubHeightC−1))), and a second luma subblock indexed by
S1=((xSbIdx>>(SubWidthC−1)<<(SubWidthC−1))+(SubWidthC−1),(ySbIdx>>(SubHeightC−1)<<(SubHeightC−1))+(SubHeightC−1))
wherein SubWidthC and SubHeightC represent the chroma scaling factors in horizontal and vertical directions, respectively;
xSbIdx and ySbIdx represent a subblock index in the horizontal direction and a subblock index in the vertical direction, respectively, for a luma subblock in the set (S);
“<<” represents a left arithmetic shift;
“>>” represents a right arithmetic shift;
xSbIdx is an integer number ranging from 0 to numSbX−1 and ySbIdx is an integer ranging from 0 to numSbY−1;
numSbX indicates the number of luma subblocks in the luma block along the horizontal direction; and
numSbY indicates the number of luma subblocks in the luma block along the vertical direction.
|