es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Imshow en Matlab devuelve una imagen negra.

Quiero mostrar una imagen satelital (16 bits) que contiene 4 bandas con niveles de intensidad: rojo, verde, azul y nir. Sin embargo, solo quiero mostrar las primeras 3 bandas. Utilizo el siguiente código:

RGB = imread('IMG_PHR1B_MS_202106020751594_ORT_5893575101-2_R1C1.TIF')
subset_RGB = RGB[1550:3238, 343:1250, 0:3]
figure(1)
imshow(subset_RGB)
impixelinfo

Los píxeles muestran claramente diferentes valores, pero la imagen está completamente en negro.
Los valores varían desde:
rojo: 473-4152
verde: 599-4256
azul: 507-3737

Transformé esta imagen a HSV (porque también lo necesito).

normal = im2double(subset_RGB)
hsv = rgb2hsv(normal)
imshow(hsv)

Esta imagen sí resulta en una imagen en color. Tal vez pensé que era porque hsv es de tipo “double” y subset_RGB es de 16 bits, así que intenté lo siguiente:

test = im2double(subset_RGB)
imshow(test)

También intenté usar “imagesc” como se sugiere, pero también resulta en una imagen en negro:

figure(2)
imagesc(subset_RGB)

¿Cómo puedo mostrar la imagen original en colores verdaderos?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es que los valores RGB no están escalados correctamente. La imagen de 16 bits puede tener valores que van desde 0 hasta 65535, mientras que imshow espera que los valores estén entre 0 y 1.

    Puedes intentar escalar la imagen antes de mostrarla utilizando el fragmento de código:

    scaled_RGB = double(subset_RGB) ./ double(intmax('uint16'));
    imshow(scaled_RGB)
    

    Esto debería escalar los valores entre 0 y 1 y mostrar la imagen original en colores reales.

Comments are closed.