《数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)》——2.3 MATLAB的图像转换...

    xiaoxiao2024-05-07  9

    本节书摘来自异步社区出版社《Visual C++ 2012 开发权威指南》一书中的第2章,第2.3节,作者: 张铮 , 徐超 , 任淑霞 , 韩海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    2.3 MATLAB的图像转换

    数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)1.图像存储格式的互相转换有时必须将图像存储格式加以转换才能使用某些图像处理函数。例如,当使用某些MATLAB内置的滤镜时,需要将索引图像转换为RGB图像或者灰度图像,MATLAB才会将图像滤镜应用于图像数据本身,而不是索引图像中的颜色索引值表(这将产生无意义的结果)。

    MATLAB提供了一系列存储格式转换函数,如表1.11所示。它们的名字都很便于记忆,例如ind2gray可以将索引图像转化为灰度图像。

    表1.11 图像格式转换函数

    也可以使用一些矩阵操作函数实现某些格式的转换。例如,下面的语句可以将一幅灰度图像转换为RGB图像。

    RGBIMAGE = CAT(3, GRAY, GRAY, GRAY);2.图像数据类型转换MATLAB图像处理工具箱中支持的默认图像数据类型是uint8,使用imread函数读取图像文件一般都为uint8类型。然而,很多数学函数如sin等并不支持double以外的类型,例如当试图对uint8类型直接使用sin函数进行操作时,MATLAB会提示如下的错误信息。

    I = imread(‘coins.png’); %读入一幅unit8图像 sin(I); ??? Undefined function or method 'sin' for input arguments of type 'uint8'``` 针对这种情况,除了使用小节介绍的强制类型转换方法外,还可利用图像处理工具箱中的内置图像数据类型转换函数。内置转换函数的优势在于它们可以帮助处理数据偏移量和归一化变换,从而简化了使用者的编程工作。 一些常用的图像类型转换函数如表1.12所示。 表1.12 图像数据类型转换函数 ![image](https://yqfile.alicdn.com/766bae590139d19c1ca37d58509af45ac5b7c670.png) 可以在使用MATLAB数学函数前将图像转换为double类型,而在准备将图像写入文件时再将其转换为uint8类型,如下所示。

    I_d = im2double(I_uint8); %将uint8图像转换为double类型,灰度范围也相应从[0,255]归一化至[0,1]Iout_d = sin(I_d); %进行数学计算Iout_uint8= im2uint8(Iout_d); %转换回uint8(灰度范围也重新扩展到[0,255]), 准备写入文件`

    相关资源:《数字图像处理与机器视觉—— Visual C 与Matlab实现》光盘源代码
    最新回复(0)