为什么我们在matlab中对图像使用数值运算之前将灰度级转换为double?

时间:2016-03-27 10:51:13

标签: matlab image-processing double

为什么我们在matlab中对图像使用数值运算之前将灰度级转换为double? 是否有必要这样做?

1 个答案:

答案 0 :(得分:1)

因为像uint8这样的整数类型在MATLAB中有saturated arithmetic,所以浮点类型在执行某些操作时具有更高的精度。

同样地说,向uint8转换为double比向另一个方向转发更为安全。

举一个例子,假设你想通过将图像的动态范围提高到2的幂来改变图像的动态范围:

img = imread('peppers.png');
subplot(121), imshow(im2double(img).^2), title('double')
subplot(122), imshow(img.^2), title('uint8')

image

您可以看到uint8图像如何在255处被大多数值饱和。

更重要的是,使用分数指数会为整数类型抛出错误:

>> img.^(1.1);
Error using  .^ 
Integers can only be raised to positive integral powers.