zoukankan      html  css  js  c++  java
  • Matlab中double,im2double,mat2gray区别

     

    转载:http://blog.sina.com.cn/s/blog_6c41e2f30101559d.html

     

    ****************假设某图像数据A(uint8格式)**********************

    A =

      235  200  89  20

    >> double(A)                 %返回与原矩阵数值相同但类型为double的矩阵;

    ans =

       235   200 89   20 

    >> im2double(A)           %返回矩阵类型:double;数值范围[0 1] ,0对应uint8中的0;1对应uint8中的255

    ans =

        0.9216    0.7843   0.3490    0.0784

    >> mat2gray(A)              %对原矩阵归一化

    ans =

        1.0000    0.8372   0.3209      0

    ****************假设矩阵A为一般二维数组,非图像数据(double格式)**********************

    A =

       235   200    89    20 

    >> double(A)

    ans =

       235   200   89    20

    >> im2double(A)

    ans =

       235   200   89    20

    >> mat2gray(A)

    ans =

        1.0000    0.8372    0.3209      0 

     

    小结:

    im2double:

      如果输入类型是uint8、unit16 、logical,则按照0-->>0,255-->>1,将其值按比例处理成0~1之间的double数值.

      如果输入类型是double,输出没有处理.

    double:

      返回数值与输入相同的double类型矩阵;

    mat2gray:

      对输入进行归一化处理,最小值-->>0;最大值-->>1,输出类型为double。

    1. 在Matlab对图像处理过程中,图像是unit类型,所以imshow等这些关于图像的函数,默认输入都是uint格式的,其他格式的数据显示会有默认改动,需要注意。另一方面,在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此通常使用im2double函数将图像数据转换成双精度型数据再进行计算。

    2. 有时需要把图像以mat的方式进行存储(multispectral images), 那么mat只能存储double类型的数据,所以最好先用im2double将uint类型的图片转为[0 1]范围内的数据存储于mat中,将来使用的时候再用im2uint8 or im2uint16转换回图像。

    3. uint16和uint8之间的转换,使用im2double 作为中间桥梁,或者:img8 = uint8(img16 / 256)。 

  • 相关阅读:
    poj 2584 T-Shirt Gumbo (二分匹配)
    hdu 1757 A Simple Math Problem (乘法矩阵)
    矩阵之矩阵乘法(转载)
    poj 2239 Selecting Courses (二分匹配)
    hdu 3661 Assignments (贪心)
    hdu 1348 Wall (凸包)
    poj 2060 Taxi Cab Scheme (二分匹配)
    hdu 2202 最大三角形 (凸包)
    hdu 1577 WisKey的眼神 (数学几何)
    poj 1719 Shooting Contest (二分匹配)
  • 原文地址:https://www.cnblogs.com/Matrix420/p/4941391.html
Copyright © 2011-2022 走看看