《数字图像处理与机器视觉——Visual C++与Matlab实现》——1.3 Matlab的图像转换-阿里云开发者社区

开发者社区> 数据库> 正文

《数字图像处理与机器视觉——Visual C++与Matlab实现》——1.3 Matlab的图像转换

简介:

本节书摘来自异步社区出版社《数字图像处理与机器视觉——Visual C++与Matlab实现》一书中的第1章,第1.3节,作者: 张铮 , 王艳平 , 薛桂香,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.3 Matlab的图像转换

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

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

image

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

RGBIMAGE = CAT(3, GRAY, GRAY, GRAY);

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

sin(D);
??? Undefined function or method 'sin' for input arguments of type 'uint8'

针对这种情况,除了使用1.1.4小节介绍的强制类型转换方法外,还可利用图像处理工具箱中的内置图像数据类型转换函数。内置转换函数的优势在于它们可以帮助处理数据偏移量和归一化变换,从而简化了编程工作。

一些常用的图像类型转换函数如表1.12所示。

image

可以在使用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]), 准备写入文件
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章