Matlab将像素值转换为双精度

时间:2016-09-07 23:29:11

标签: image matlab rgb

我是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 个答案:

答案 0 :(得分:1)

对于图像处理,大多数时候最好使用public static int baseB2int(String number, int base) { int product = 0; int num = Integer.parseInt(number); int sum; int i = number.length(); int[] theNumber = new int[i]; for (int j = 0; j < number.length(); j++) { System.out.println("the length of number is " + number.length()); theNumber[j] = num%base; System.out.println("theNumber["+j+"] is " + theNumber[j]); num = num/base; System.out.println("the num is "+num); } sum = theNumber[i - 1]; System.out.println("the sum is " + sum); while (i > 0) { product = sum * base; System.out.println("The product in the while loop is " + product); System.out.println("theNumber[previous]" + theNumber[i-1]); sum = product + theNumber[i-1]; System.out.println("the sum in the while loop is " + sum); i--; } return product; } 函数将读取的图像转换为0-1之间的双数组:

im2double

然后,您不必再担心同一程序中的数据类型。

单独使用img = im2double(imread('img.png')); 的数据类型转换几乎从不执行您想要的图像,因为uint8和双图像在 数据类型和数据范围方面都不同。

答案 1 :(得分:0)

r = r + double(img(64,65,1))行中发生的事情是img(64,65,1)值正在转换为double,但随后会立即转换回class(r),因为r是一个整数类,在操作中具有优先权。请注意class(int64(10)+10)返回int64。正如烧杯评论的那样,此处的关键是首先将r本身转换为double

您可能不必担心使用double()进行转换;双精度可以表示高达2^53-1的整数,高于255.因此,如果您只是进行简单的像素求和操作或类似的操作,那么您不会在计算中失去任何精度。当然,如果你需要将它放回图像中,那么大约255的任何东西都会饱和。因此,根据您正在做的事情将事物重新调整为0到1之间,它可能更有意义;在这种情况下,正如Mingjing建议的那样,最好使用im2double