matlab读取图像的程序imread,读入后的数据为uint8
matlab保存图像的程序imwrite,写入时的输入可以为uint8或double
但是为了计算和表达方便
matlab针对uint8和double都有相应操作
有时我们会疑惑
一会
iMG = double(img);
imshow(uint8(IMG)*25)
一会
imshow(IMG)
imwrite同样有如此操作
为什么呢??????????
我们在使用时可以分成两个体系
在用uint8时,matlab默认图像为[0,255],即你在imshow和imwrite时,数据是[0,255]范围是没有问题的。此时如果直接double转为uint8(数据类型转换,数据大小不会改变,不是你的double转为uint8,你的[0,1]直接就能转为[0,255]),数据将集中在[0,1],也就是全部数据都在0或1,你的图像就是全黑。
在用double时,matlab默认图像为[0,1],即你在imshow和imwrite时,数据要是在[0,255],那么大于1的全为1,所以你的图像就是全白。
因此我们在图像数据类型转换时,需要乘以255和除以255
uint8→double//double(img)/255
double→uint8/uint8(img*255)