WCS request
WCS Result

Next, we do the same with WCPS - just subsetting:

WCPS query
WCPS Result

Finally, we compute the NDVI. For better visualization, the NDVI value (normally between -1 and +1) gets added 1 (to be non-negative) and multiplied with 127 (to "stretch" it into the 0 to 255 range of 8-bit grayscale imagery). Cast operations (syntactically: data types in parenthesis, like "(unsigned char)") first force the integer values from the coverage into float for the division, and then into the target format of 8-bit unsigned quantities.

WCPS query
WCPS Result