使用“imshow”功能的“double”与“uint8”输入

1167次(过去30天)
卡什
卡什 2011年12月1日
回答: 穆罕默德suhaan dar2021年9月21日8:53
当使用命令"imshow(image)"时,当"image"的类型是"double"时,我得到一个错误。如果我把"image"转换为"uint8",然后"imshow"产生图像。为什么type "double"有一个错误?
1评论
总裁刘
总裁刘 2019年10月27日
如果变量a的类型是' uint8 ',则可以用 double(a),然后,类型变为“double”。

登录以发表评论。

公认的答案

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

登录以发表评论。

更多的答案(8)

奈德
奈德 2011年12月1日
uint8用于无符号8位整数。这是像素的范围。像素值不能超过2^8-1。因此,对于图像,使用uint8类型。而double用于处理非常大的数字。有许多函数,它们只将double作为输入,输入到超出范围的卵形内存。
它很容易转换为uint8或其他方式。
假设我有矩阵uin8a。
然后把它变成两倍你只需要这样做
A=双(A);
或者把它转换回uint8。
= uint8 ();
4评论
沃尔特·罗伯森
沃尔特·罗伯森 2017年10月29日
var(双(YourImage (:)))

登录以发表评论。


Vinai Datta Thatiparthi
Vinai Datta Thatiparthi 2019年3月27日
编辑:Vinai Datta Thatiparthi 2020年2月28日
嗨!要添加到线程中,
所有图像都存储并表示为矩阵(二维或三维)。在Matlab中存储矩阵或数组信息的默认设置为双精度。它使用64位来存储任何数字。但是,对于图像像素的实际情况,范围通常为0-255。8位足以描述此信息。为了节省内存,为了更有效地表示,我们使用uint8、uint16、uint32、uint64等等。。。
我= 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的,特别是超声。

登录以发表评论。


此前Mounesisohi
此前Mounesisohi 2016年6月24日
您只需将以下代码添加到其中:
一个= im2double (B);
B是8单位矩阵A是二重矩阵。
祝你好运

香港成
香港成 2017年4月26日
我想也许你会在阅读图片的时候遇到它们。如果是真的,当你阅读图像时使用
一个= imread (picture.png
函数,那么你会得到一个变量 一个 例如a*b*3 unit8,其值从0到255不等,但如果你转换这个变量 一个 使用
B=IM2双倍(A)
然后你会得到某种变量 B 如a*b*3 double,其值从0到1不等
在你使用这个函数之后
灰色= rgb2gray (I2)
你会得到一个像a*b double的变量
2的评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年6月1日
数字数组的数据类型与整个数组的数据类型相同。您不能拥有某些元素是双精度而其他元素不是双精度的数字数组。
你应该写一个新的数组,比如
dbs(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持团队
一个 n全白图像显示 发生在 图像数据不在默认图像显示范围内。为班级的形象 “double”,范围为[0,1]。要继续工作 在这个问题上,使用' 显示范围 '参数与"imshow" 例如, 考虑以下命令,其中输入参数是热感摄像机的图像 图像处理工具箱
imshow(“热咖啡,tif”
如果检查图像中的像素值,则它们超出默认范围,例如23.6268 ,因此图像显示全部为白色。 如果使用空括号[]指定显示范围,则"imshow"计算显示范围并正确显示图像:
imshow(“热咖啡,tif”“显示范围”, [])

玛哈斯阿尔巴西亚酒店
编辑:玛哈斯阿尔巴西亚酒店 2020年4月17日
我发现了一些有用的信息,可能会有所帮助

穆罕默德suhaan dar
穆罕默德suhaan dar 2021年9月21日8:53
认为 p 是一个 uint8 像素的值 20. 是一个 uint8 像素的值 210 .下面哪个选项会显示为黑色像素?
im2double p -40
im2double p - 40
p - 40
+ 40
im2double -40
im2double - 40

标签

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!