image read and write problem
13 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Weia Reinboud
le 13 Juil 2020
Déplacé(e) : DGM
le 20 Fév 2023
Sometimes imwrite and imread work OK, but often not. In that case in stead of numbers between 0 and 255 (RGB tif file) all numbers become 0 or 255. Nothing in between. I can't find a problem and I can't find a system in what's going wrong. Any hints? You can see in the picture waht happens. It's a very tiny tif-file, all code you can see and after write and read it's damaged. Only red shown, blue and green the same.
7 commentaires
Réponse acceptée
Walter Roberson
le 14 Juil 2020
srijf2(:,:,1)=[173,173,173,173,173,173,173,173
0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0
38,38,38,138,38,38,38,38
255,255,255,255,255,255,255,255
255,255,255,255,255,255,255,255]
That creates double precisions numbers, class double(). When you imwrite() data that is class double() then it assumes the dynamic range is 0 (black) to 1 (full intensity), and scales and converts to uint8, like uint8(srijf2 * 255) . Because of saturation of the uint8 range, that is going to give you all 0 or 255.
Do not double() integer images unless you know exactly what you are doing. Use im2double() if you need to convert from integer images to double precision images.
15 commentaires
Image Analyst
le 21 Juil 2020
Déplacé(e) : DGM
le 20 Fév 2023
No, you should have done
cupoltje = uint8(cupoltje); % or cupoltje = uint8(255 * mat2gray(cupoltje));
NOT
cupoltje=single(cupoltje); % Single won't work.
Not sure why you did that when we and MATLAB have already told you single won't work. Why didn't you convert to uint8?
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Image Data dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!