danforthcenter / plantcv

Plant phenotyping with image analysis
Mozilla Public License 2.0
667 stars 265 forks source link

The bug from import hyperspectral image file using function readimage() #1007

Open ZainZh opened 1 year ago

ZainZh commented 1 year ago

Describe the bug When using function readimage() function to read the raw and hdr images captured from the unispectral camera. Some bugs happen because of the size of the parameter default_bands in your source code hyperspectral/read_data.py, function _maek_pseudo_rgb, the default_bands is ['713'] got from the raw file. However, this function needs three data from the default_bands list, which is incompatible. Btw, if is reasonable to choose the default_band in axis 2 of the array_data

def _make_pseudo_rgb(spectral_array):
    """Create the best pseudo-rgb image possible from a hyperspectral datacube

    Inputs:
        spectral_array = Hyperspectral data instance

    Returns:
        pseudo_rgb     = Pseudo-rgb image

    :param spectral_array: __main__.Spectral_data
    :return pseudo_rgb: numpy.ndarray
    """
    # Make shorter variable names for data from the spectral class instance object
    array_data = spectral_array.array_data
    default_bands = spectral_array.default_bands #['713']
    wl_keys = spectral_array.wavelength_dict.keys()

    if default_bands is not None:
        pseudo_rgb = cv2.merge((array_data[:, :, int(default_bands[0])],
                                array_data[:, :, int(default_bands[1])],
                                array_data[:, :, int(default_bands[2])]))

To Reproduce Steps to reproduce the behavior (including sample data and code really help):

  1. Starting with image '...' images1.zip
  2. Run function(s) 'readimage' with the envimode
  3. See error

Expected behavior please fix it ,thanks Or need a PR?

Local environment (please complete the following information):

Additional context Add any other context about the problem here.

JorgeGtz commented 1 year ago

Hi @ZainZh, The function uses the bands specified in the header file and three bands are necessary to create a pseudo-rgb image. We could potentially modify the code to return a grayscale image when only one band is provided. In the meantime, you could try commenting out the default bands line in your header file.