您当前的位置: 首页 >  图像处理

wendy_ya

暂无认证

  • 2浏览

    0关注

    342博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MATLAB图像处理相关函数介绍及问题分析

wendy_ya 发布时间:2020-11-27 21:33:24 ,浏览量:2

1.灰度化

以1.jpg文件为例,进行简要说明。 在这里插入图片描述 首先输入图像:

f=imread('D:\Desktop\1.jpg');

灰度化命令有两种: 第一种:

I2=rgb2gray(I1);%灰度化
I3=double(I2);
I4=uint8(I3);%转换为uint8并显示
figure,imshow(I4)

显示结果如图: 在这里插入图片描述 在这里插入图片描述 uint8类型,值为0-255

第二种:


I5=im2double(I2);
figure,imshow(I5)

显示结果如图: 在这里插入图片描述 在这里插入图片描述 double类型,值为0-1

这时就会产生一个问题,两个不同的数据类型为什么会产生相同的图像呢? 我们先来查阅一下这几个函数的含义:

  • I=rgb2gray(RGB) 将真彩色图像 RGB 转换为灰度图像 I。
  • imshow(I) 显示图像 I
  • double() 转换为双精度,仅仅转换类型,数值不变
  • im2double(I) 将图像 I 转换为双精度,并进行归一化(类型和数值均发生变化)

原来,用rgb2gray 将彩色图像转换为灰度图像。matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算;imshow()显示图像时对double型是认为在0-1范围内即大于1时都是显示为白色,而imshow显示uint8型时是0-255范围。所以对double类型的图像显示的时候,要么归一化到0-1之间,要么将double类型的0-255数据转为uint8类型。

关于上面那个问题的答案也就迎刃而解了,如果图像要进行存储和运算就需要转换为double类型,而如果只进行显示,则0-255范围内的uint8或0-1范围内的double类型均可。

现在,我们再来看所有代码:

I2=rgb2gray(I1);%灰度化
I3=double(I2);
I4=uint8(I3);%转换为uint8并显示
figure,imshow(I4)
I5=im2double(I2);
figure,imshow(I5)

I1是读入的原始图像uint8类型,I2是灰度化后的0-255uint8类型,I3转换为double类型但未进行归一化,I4转换为uint8编码并进行输出;而第二种方法的I5是转化为double类型并归一化为0-1之间的类型。因此,虽然I4和I5类型不同,但其输出结果图像均相同。

【注】:这里可能会有人怀疑,第一种方案中为什么要转换为double再转换回uint8?这不是多此一举吗?这里声明一下,因为double类型适合matlab存储和运算,因此如果后面要进行运算,则需要对I3进行处理即可。

参考:https://blog.csdn.net/didi_ya/article/details/105428758

(未完待续。。。建议收藏)

参考:https://ww2.mathworks.cn/help/pdf_doc/matlab/matlab_refbook_zh_CN.pdf

关注
打赏
1659256378
查看更多评论
立即登录/注册

微信扫码登录

0.0349s