“双重”vs。"uint8"输入使用"imshow"功能

1167次(过去30天)
卡什
卡什 2011年12月1日
当使用命令“imshow(image)”时,当“image”的类型为“double”时,我会得到一个错误。如果我将“image”转换为“uint8”类型,那么“imshow”会生成图像。为什么类型为“double”时会出现错误?
1评论
刘立峰
刘立峰 2019年10月27日
如果变量a的类型是'uint8',我们可以通过 Double (a),然后,类型变成' Double '。

登录评论。

接受的答案

丹尼斯·弗雷什塔齐
丹尼斯·弗雷什塔齐 2018年11月11日
转换图像存储类
你可以转换uint8和uint16数据到双精度使用MATLAB函数,double。然而,存储类之间的转换改变了MATLAB和工具箱解释图像数据的方式。如果希望得到的数组被正确地解释为图像数据,则需要在转换数据时重新缩放或偏移数据。
为了更容易的转换存储类,使用这些工具箱函数之一:im2double, im2uint8,和im2uint16。这些函数自动处理原始数据的缩放和偏移。例如,该命令将数据范围为[0,1]的双精度RGB图像转换为数据范围为[0,255]的uint8 RGB图像。
RGB2 = im2uint8 (RGB1);
在转换过程中丢失信息
当转换为使用较少位元表示数字的类时,通常会丢失图像中的一些信息。例如,一个uint16强度图像能够存储多达65,536个不同的灰度,但一个uint8强度图像只能存储256个不同的灰度。当你转换一个uint16强度图像到一个uint8强度图像,im2uint8量化灰度在原始图像。换句话说,原始图像中从0到127的所有值在uint8图像中变成0,从128到385的值都变成1,以此类推。然而,这种信息的丢失通常不是问题,因为256种灰度仍然超过了你的眼睛可能识别的灰度的数量。
将索引图像
将索引图像从一个存储类转换到另一个存储类并不总是可能的。在索引图像中,图像矩阵只包含进入颜色映射的索引,而不包含颜色数据本身,因此在转换过程中不可能对颜色数据进行量化。
例如,具有300种颜色的uint16或双索引图像无法转换为uint8,因为uint8数组只有256个不同的值。如果要执行此转换,必须首先使用imapprox函数减少图像中的颜色数。此函数对颜色贴图中的颜色执行量化,以减少图像中不同颜色的数量。有关更多信息,请参阅减少索引图像中的颜色。
4评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年1月27日
rgb2ind获取颜色编号。可能后跟ind2rgb以添加不同的颜色。

登录评论。

更多的答案(8)

Junaid
Junaid 2011年12月1日
Uint8使用无符号8位整数。这就是像素的范围。像素值不能大于2^8 -1。因此,对于图像uint8类型被使用。而double则用来处理非常大的数字。有许多函数,它们只接受双精度作为输入到超出范围的卵形内存。
它很容易转换为uint8或其他方式。
假设我有矩阵uin8a。
然后把它变成两倍你只需要这样做
一个=双(A);
或者把它转换回uint8。
A=uint8(A);
4评论

登录评论。


Vinai Datta Thatiparthi
Vinai Datta Thatiparthi 2019年3月27日
编辑:Vinai Datta Thatiparthi 2020年2月28日
这就跟你问声好!要添加到线程中,
所有图像都以矩阵(2-D或3-D)的形式存储和表示。在Matlab中存储矩阵或数组信息的默认设置是双精度。它使用64位来存储任何数字。然而,对于图像的一个像素的强度,其范围一般为0-255。8位就足以描述这个信息。为了节省内存和更有效的表示,我们使用了uint8, uint16, uint32, uint64等等…
im=imread(“random_picture.jpg”);
imshow (im);
imshow(双(im));
你可以通过这个例子更好地理解Uint8和double的区别。
此外,您可以直接使用术语作为命令,轻松地从一个类转换到另一个类。为了获得更详细的细节,我们可以将像素的强度设置为(2^16 -1),(2^32 -1)等等。
作为扩展,此处的8位表示存储一个平面的图像信息所需的位数。对于RGB图像,位深度(表示所有图像信息所需的总位数)将变为24。对于灰度图像,位深度仅为8,因为它只有一个平面。
希望这对你有所帮助:)
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2019年3月27日
TIF图像和动画GIF可以是4D,也可以是为体素阵列中的每个位置指定颜色的图像。DICOM可以是4D,特别是对于超声波。

登录评论。


阿利雷扎·穆内西索希
你需要做的就是,添加以下代码:
一个= im2double (B);
其中B是单位8矩阵,A是双矩阵。
祝你好运。

香港成
香港成 2017年4月26日
我想当你阅读一幅图像时可能会遇到这些问题。如果是真的,那么当你阅读一幅图像时,使用
A=imread(picture.png)
函数,那么你会得到一个变量 A. 例如a*b*3 unit8,其值从0到255不等,但如果你转换这个变量 A. 使用
B = im2double (A)
然后你会得到某种变量 B 比如a*b*3双精度,其值在0到1之间变化
在你使用这个函数之后
灰色=RGB2灰色(I2)
你会得到一个像a*b double这样的变量
2评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年6月1日
数值数组的数据类型与整个数组的数据类型相同。不能使用某些元素为双精度但其他元素不是双精度的数值数组。
你应该写一个新的数组,比如
星展银行(i1) =双(bs (i1));
或者您应该转换整个数组,如
dbs =双(bs);

登录评论。


Pranit帕蒂尔
Pranit帕蒂尔 2018年3月8日
我读了一个rgb图像,我想要图像的直方图,但当我给命令imhist('xyz.jpg'),它给了我错误的绘图只是x -y轴,而不是其中的图形。完全是白色的。请帮助我,图像已经在uint8。
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2018年3月8日
无法将文件名传递给imhist:需要将文件imread()读入数组,然后将数组传递给imhist。

登录评论。


MathWorks支金宝app持团队
A. N全白色图像显示 发生在 图像数据不在默认图像显示范围内。对于类的图像 "double",范围是[0,1]。基于“增大化现实”技术的工作 找到这个,使用' DisplayRange '参数与"imshow" 例如, 考虑下面的命令,其中输入参数是来自热摄像机图像的 图像处理工具箱 :
imshow (“hotcoffee.tif”)
如果检查图像中的像素值,就会发现它们超出了默认范围,例如23.6268 ,因此图像显示全部为白色。 如果使用空括号[]指定显示范围,则"imshow"计算显示范围并正确显示图像:
imshow (“hotcoffee.tif”,“DisplayRange”[])

摩诃Arbasia
摩诃Arbasia 2020年4月17日
编辑:摩诃Arbasia 2020年4月17日
我找到了一些有用的信息,可能会有帮助

穆罕默德·苏哈安·达尔
穆罕默德·苏哈安·达尔 2021年9月21日8:53
假设 P 是一个 uint8 有值像素 20 Q 是一个 uint8 有值像素 210 .下面哪个选项会显示为黑色像素?
两重 ( P -40 )
两重 ( P ) - 40
P - 40
Q + 40
两重 ( Q -40 )
两重 ( Q ) - 40

标签

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!