“双重”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日
转换图像存储类
可以使用MATLAB函数double将uint8和uint16数据转换为双精度。但是,在存储类之间进行转换会改变MATLAB和工具箱解释图像数据的方式。如果希望生成的数组正确解释为图像数据,则需要在转换数据时重新缩放或偏移数据。
为了更方便地转换存储类,请使用以下工具箱函数之一:im2double、im2uint8和im2uint16。这些函数自动处理原始数据的重新缩放和偏移。例如,此命令将数据范围为[0,1]的双精度RGB图像转换为数据范围为[0255]的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则用来处理非常大的数字。有许多函数,它们只接受双精度作为输入到超出范围的卵形内存。
很容易将double转换为uint8或其他方式。
假设我有uin8a的矩阵。
然后,要将其转换为双倍,您只需这样做
一个=双(A);
或者将其转换回uint8。
A=uint8(A);
4评论
沃尔特·罗伯森
沃尔特·罗伯森 2017年10月29日
var(double(yourmage(:))

登录评论。


塔提帕蒂葡萄酒
塔提帕蒂葡萄酒 2019年3月27日
编辑:塔提帕蒂葡萄酒 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,特别是对于超声波。

登录评论。


阿利雷扎·穆内西索希
你需要做的就是,添加以下代码:
A=2倍(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);

登录评论。


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

登录评论。


MathWorks支万博1manbetx持团队
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中心找到宝藏,并发现社区如何可以帮助你!

开始打猎吧!