Fork me on GitHub

Matlab中imshow()函数的使用

     imread() 返回的图像类型是uint8类型, 这时用imshow显示图像的时候, imshow会认为输入矩阵的范围在0-255, 如果imshow的参数为double类型的,那么imshow认为输入矩阵的值为0-1.

     很多时候需要将图像转换为double类型的, 但是转换以后直接使用imshow显示的是一片白色, 是因为当imshow显示图像的时候, 会认为double类型的图像矩阵的范围在0-1, 超过1的像素值当作1处理, 这样就是几乎所有的像素都是白色。

     通过搜索,找到两个解决方法:
         imshow(I/256); -----------将图像矩阵转化到0-1之间
         imshow(I,[]);       -----------自动调整数据的范围以便于显示 (不明白原理!) 
         从实验结果看两种方法都解决了问题,但是从显示的图像看,第二种方法显示的图像明暗黑白对比的强烈些!不知什么原理!        
     此外还找到一些方法,还没有试过,记录如下: 
        uint8和im2uint8的区别 
       图像数据在计算前需要转换为double,以保证精度; 
       很多矩阵数据也都是double的,要想显示,必须先转换为图像的标准数据格式。
       如果转换前的数据符合图像数据标准(比如如果是double则要位于0~1之间),那么可以直接使用im2uint8;如果转换前的数据分布不合规律,则使用uint8,将其自动切割至0~255(超过255的按255)
        最好使用mat2gray,将一个矩阵转化为灰度图像的数据格式(double) 
        另外,可以用isgray判断矩阵是否是一个图像数据矩阵。
posted @ 2016-07-08 17:15  ranjiewen  阅读(15146)  评论(0编辑  收藏  举报