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?
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:
Esto debería escalar los valores entre 0 y 1 y mostrar la imagen original en colores reales.