MATLAB: Problem in Calculating NDVI Values Using Multispectral Images

Image Processing Toolboxinfraredndvi

I want to calculate NDVI values using multispectral images that range from -1 to 1 using the formula (NIR-R)/(NIR+R). NIR means the image in Near-Infrared band and R means the image in Red band. I apologize if there is any mistake and I humbly ask for guidance.
Following is the images in RGB, Red, and Near-Infrared that I have converted to jpg so I could upload it here, the original type is TIF.
Below is the code that I used to compute these images :
R = imread('RED.TIF');
NIR = imread('NIR.TIF');
NDVI = (NIR-R) ./ (NIR + R); % [In this step I couldn't use / to compute, could you tell me why?]
NDVI = double(NDVI); % [Why the variable has to be changed to double type? Because if not the image couldn't be shown.]
colormap(jet); colorbar; impixelinfo;
Why is the NDVI variable only contain 0s and 1s? As the NDVI value should be ranging from -1 to 1 and I want the value to be in 2 digits after decimal. How can I improve the image processing as the green area of plants is missing in the final results? Do I need another methods to calculate it?
Thank you for your attention, sir.

Best Answer

You need to cast to double before adding, subtracting, or dividing
NDVI = (double(NIR) - double(R)) ./ (double(NIR) + double(R));
imshow(NDVI, []); % Make sure you use [] because NDVI is floating point.