matlab图像处理关于unit8的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab图像处理关于unit8的问题相关的知识,希望对你有一定的参考价值。

a=imread('b.bmp');
[r,c,d]=size(a);
blue=zeros(r,c);
blue(:,:,1)=zeros(r,c);
blue(:,:,2)=zeros(r,c);
blue(:,:,3)=a(:,:,3);
blue=uint8(blue);
imshow(blue);
这个程序用来提取图像蓝色区域,请问unit2是干啥用的
是uint8

参考技术A 为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像。
imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。

因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,
I2=im2double(I1) %把图像I1转换成double精度类型 (假设图形矩阵范围0~255)
或者
I64=double(I8)/255; %uint转换成double
如果不转换,计算会产生溢出。本回答被提问者采纳

matlab imadd关于2幅图像叠加问题

imshow显示图像是uint8格式的,即每个像素最大值为255,两个灰度图像相加,如果保证值在0-255之内,才能显示。 那么如果不能保证值在0-255之内,怎么相加图像啊?

参考技术A Z = imadd(X,Y)
此函数将相应矩阵X中的元素与相应矩阵 Y 中的元素进行叠加,返回一个叠加结果作为输出数列 Z 中对应的元素。 X 和 Y 都是实数,且两者是大小相同,类型相同的非稀疏矩阵,或者 Y 是一个双精度标量。若 X 不是逻辑值, Z 和 X 的大小相同;若 X 是逻辑值, Z 是双精度的值。

把两个一字节的数组相加 Add two uint8 arrays。当超过 255 时请注意。
X = uint8([ 255 0 75; 44 225 100]); 《Simulink与信号处理》
Y = uint8([ 50 50 50; 50 50 50 ]);
Z = imadd(X,Y)

运行结果:
Z =
255 50 125
94 255 150

所以说,超过255部分它会按照255算的。这个函数其他的你可以上ilovematlab上面函数库查。

以上是关于matlab图像处理关于unit8的问题的主要内容,如果未能解决你的问题,请参考以下文章

matlab中如何将unit8转成double型?

matlab imshow()函数显示白色图像问题

在 MATLAB 中保存非常大的图像

matlab 将数字矩阵转换成图像

matlab 提取彩色部分的RGB

matlab矩阵的三维可视化问题