当前位置: 首页 > 知识库问答 >
问题:

Matlab将像素值转换为双精度

孟胤
2023-03-14

我是Matlab新手,所以这应该是一个简单的问题。我有一个带有几个特定像素的图像,我需要从中获取红色RGB分量,求和,并将结果存储到一个变量中。默认情况下,这些值的类型为uint8,因此总和不能超过255。我尝试使用double()的每个组合将R值转换为double,但似乎没有任何效果。下面是从终端复制的实际情况:(所有像素的R值都在200以上)

img = imread('img.png');
r = img(64,64,1)
r =
    224
r = r + double(img(64,65,1))
r =
    255
r = r + double(img(64,66,1))
r =
    255

我做错了什么?我不能将这些值转换为双精度值吗?

共有2个答案

束敏学
2023-03-14

r=r-double(img(64,65,1))行中发生的情况是,img(64,65,1)值被转换为double,但随后立即被转换回class(r),因为r是一个整数类,在操作中具有优先权。注意class(int64(10)10)返回int64。正如比克评论的那样,这里的关键是首先将r自身转换为double

您可能不必担心使用double()进行转换;double可以表示最大为2^53-1的整数,远高于255。因此,如果你只是做简单的像素求和运算或诸如此类的事情,你不会在计算中失去任何精度。当然,如果您需要将其放回图像中,则255左右的任何值都会饱和。因此,这可能更合理,这取决于你正在做什么,以重新缩放的东西之间的0和1;在这种情况下,正如明静所建议的,最好使用im2double

南门承教
2023-03-14

对于图像处理,大多数情况下,最好使用im2double函数将读取的图像转换为0-1之间的双数组:

img = im2double(imread('img.png'));

这样,在同一个程序中就不必再担心数据类型了。

仅使用Double()进行数据类型转换几乎永远不会实现您对图像的预期,因为uint8和双图像在数据类型和数据范围上都有所不同。

 类似资料:
  • 我试图得到一个double(由两个int的分数得到)作为我下面函数的返回值。 但结果总是错的,我得到的价值如: 预期结果应介于和 我的代码有什么问题! 谢谢

  • 我想用一个小数点和一个小数位的格式将任何双精度四舍五入为双精度,这样29575.347434将是2.3。 我试着用decimalFormat做这个,但当我试着我只得到了一个29575.3格式的字符串,带有一个,我不知道如何在保留值为双精度的同时去掉所有小数点。

  • 我有一个双重形象,我的目标是把它转换成逻辑。我想创建5x5窗口,并把它放在图像中的每个像素上。然后,我计算这25个像素的平均值。如果中心像素值大于平均值,则为1。否则为0。 我怎么能那样做? 附注。我不想这样做:

  • 我还是一名学生,刚开始学习java编程语言,我只是想问一下如何将函数main中的参数从字符串转换为double,就像将字符串转换为整数一样。pasreInt(arg)

  • 问题内容: 我有一个双,其值是10,000,000.00(千万)。我必须将其转换为。当使用该方法时,我会得到 “ 1.0E7”,它遵循规范是正确的。不幸的是,我需要“ 10,000,000.00”(或等价的语言,具体取决于语言环境)。 如何做到这一点? 问题答案: 尝试之一 NumberFormat http://java.sun.com/javase/6/docs/api/java/text/N

  • 通常在Matlab中,颜色由RGB强度值的三个元素向量表示,精度为uint8(范围0-255)或双精度(范围0-1)。Matlabs函数,如与任一表示一起工作,使两者都易于在程序中使用。 然而,当将颜色值从一种类型的矩阵分配到另一种类型的矩阵时,同样容易引入错误(因为值会默默转换,但不会重新缩放到新的范围)。刚刚花了几个小时找到这样一个错误,我想确保它永远不会再被引入。 当发生类型转换时,如何使M