我正在上matlab编程课,老师告诉我们要一直写
img = double(imread('file.tif'));
而不是
img = imread('file.tif');
因为省略double(...)
可能“导致错误”。我对为什么会发生这些错误感到困惑。
这是一个交互式会话示例,我取每个像素的平方值(注意 - 输入图像是灰度的),并且该值仅在我们使用双精度时才正确:
>> img = imread('cat.tif');
>> img_double = double(imread('cat.tif'));
>> img = img .^2;
>> img_double = img_double .^2;
>> img(1:10, 1:10)
ans =
255 255 255 255 255 255 255 255 255 255
225 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 121
255 255 255 255 255 255 255 255 255 49
>> img_double(1:10, 1:10)
ans =
Columns 1 through 5
16129 16129 16129 16129 16129
225 361 625 1089 1681
324 484 961 1681 2209
400 729 1369 2401 3025
576 1225 2209 3249 3969
900 1849 3025 4096 4900
1369 2809 4096 5184 5625
2209 3969 5476 6241 6241
3249 5041 6400 7056 6724
4489 6241 7569 7569 6724
Columns 6 through 10
16129 16129 16129 16129 16129
2025 2209 2209 1849 1521
2809 2809 2401 2025 1521
3249 3249 2809 2025 1369
3969 3481 2809 1849 1089
4624 3969 2809 1681 841
5041 3969 2601 1369 529
5184 3721 2209 961 289
5184 3481 1681 576 121
5041 2809 1225 289 49
为什么会这样?